历时 3 个月,终于把我自己编写的入门计算机视觉的代码开源了,想入门 AI 计算机视觉的朋友查看下面的github链接,欢迎星标。
去年 11 月的时候,定了一个目标,希望在未来 3 个月的时间里,写满 100 篇关于从零入门 AI 视觉的算法解析和代码调试的文章。
历经 3 个月,终于在今天把 100 篇文章写完了,代码也全部调试完成。
已经把代码上传到了 github 上,有想要学习或入门 AI 视觉的小伙伴可以看看,地址:
https://github.com/dongtuoc/cv_learning_resnet50
本项目主要是为了帮助想入门学习 AI 视觉的小伙伴快速上手。
项目首先对一些经典的传统计算机视觉算法进行实操,随后以 resnet50 神经网络为例子,系统的讲解了 CV 模型中的基础算法和背景知识。
最后通过本仓库中的代码实战,从零手写了 resnet50 模型,并且完成任意一张图片的识别,以及完成模型的性能优化。
在传统计算机视觉部分,会有灰度图、RGB、YUV、均值/高斯滤波器、利用 Canny 算子对图像进行边缘检测、利用大津算法对图像进行分割等小项目。
在 AI 部分,首先会有一个手写数字识别项目(6_Mnist) 作为引子,用来理解一个 AI 模型的训练和推理过程。
最后,用 python 和 C++ 两种语言完成了 resnet50 模型的从零手写。
其中 resnet50 的所有核心算法和网络结构(包括Conv2d、AvgPool、MaxPool、fc、Relu、残差结构) 全部手写,不借用任何第三方库。
由于是自己手写的算法和模型结构,因此会有很大的自由度进行性能优化。
性能优化是本项目最后进行的部分,会迭代多个版本,一步步将模型的性能调到比较不错的效果。
目前网上有很多教程,在教你手搭神经网络的时候,基本都是基于 torch 的 nn 模块或其他模块,用 nn.conv2d 就完成了卷积计算。
对于想深究算法和学习算法的同学,或者一些初学者而言,即使按照教程将神经网络搭建出来了,或这将图片推理出来了,依旧是云里雾里,不知其原理。
知识点浮于表面,心里学的也不踏实,这一点我在多年前初学的时候感受尤为明显。
事实上,nn.conv2d 是将 conv2d 的算法实现给封装起来了,我们看不到它的实现机制。
很难学到里面的实现细节,跟别提如何在此基础上进行性能优化了(虽然该接口已经被优化过)。
于是便有了这个项目。
最初仅仅是想自己动手完成一个简单的 resnet50 的模型的手写。随后有一些小伙伴联系我希望跟着学习,于是开始系统的写文章。
结果文章越写越多,索性做了一个系统的小册,同时不断的维护和更新这个项目。截止到现在,基本完成了代码的开发和调试,同时还为代码写了详细的注释。
所以,非常欢迎你不断试用该仓库代码,并且提出的你的建议。
另外,本仓库搭配了 100 多篇相关知识的介绍和代码使用的文章,如果你感兴趣,可以来这里看看。
目前项目中所有代码已经完全跑通,模型推理的精度也 OK,性能经过 5 个版本的迭代,也基本达到了不错的效果。
通过本项目,你可以一窥传统计算机视觉的经典算法,理解传统计算机视觉和基于深度学习的计算机视觉算法的联系和区别。
深入理解 resnet50 中用到的所有算法原型、算法背景原理、resent50 的思想、resnet50 的网络结构、以及常见的神经网络优化方法。
你可以参考项目中的代码,真正运行一个 resnet50 神经网络,完成一张或多张图片的推理。
在项目的 new_version_with_notes 目录下是带有注释的版本,代码中关键的地方我会给出文字详解。
如果你把项目配套文章都阅读一遍,代码实操一遍,我觉得入门 AI 视觉并不是很难。
同时关于 resnet50 这个经典模型,即使你是一个小白,实操过后也会有很大的收获。
该项目搭配的 100+ 篇背景知识、原理解析和代码实操相关的介绍文章,有两种办法可以阅读到这些文章:
使用 torchvision 从已经预训练好的模型中,将 resnet50 每一层的权值保存到仓库中,所保存的权值文件会在后续被加载进来,参与卷积、全连接、BN层的计算。
在 model 目录下,运行以下脚本,即可将参数保存到 model/resnet50_weight 中。
$ python3 resnet50_parser.py
在保存完权值后,利用 python / C++ 语言,分别实现 Conv2d, BatchNorm, Relu, AvgPool, MaxPool, FullyConnect(MatMul) 等核心函数。
按照 resent50的网络结构, 将以上算法搭起来。
代码实现完成后,意味着模型运行需要的基础算法和参数已经就位,下面读取一张本地图片,进行推理。
读取一只猫的图片,开始推理,正确推理出来是一只猫,本项目第一阶段目标(准确性验证)即完成。
在基本功能实现完成后,便需要对模型的推理性能进行优化,python 版本进行了一版优化,性能有不错的提升。
C++ 版本经过 5 个大版本的优化,将模型推理的延时从最初的 16923 ms 优化至297 ms。
最终经过模型的性能调优,手写的 resnet50 模型在 Intel CPU 上推理几乎没有卡顿感,而且精度也可以满足要求。
AI 视觉入门并不难,如果你也想学一下AI,可以下载该仓库试一试,祝你学有所得。
原网址: 访问
创建于: 2024-02-29 15:45:40
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论