去年 11 月的时候,给自己了一个目标,希望在未来的 3个月时间里,写满100篇关于从零入门AI视觉的算法、代码文字。
历经 3 个月,终于在今天 100 篇文章写完了,代码也全部调试完成,上传到 github 上开源给大家,有想要学习或入门 AI 的可以看看,地址:https://github.com/dongtuoc/cv_learning_resnet50
项目介绍
本项目在做什么
本项目旨在完成对 AI 的计算机视觉的入门学习,并且在 Intel CPU 上完成以 resnet50 为基础的神经网络的全部手写,以及性能优化。
首先通过对一些经典的传统计算机视觉算法进行实操,理解计算机视觉的含义;随后以 resnet50 神经网络为例子,系统的讲解一个 AI 模型的基础算法原理和相关背景知识。
最后通过本仓库中的代码实战,从零手写 resnet50 神经网络,完成任意一张图片的识别,以及神经网络模型的性能优化。
-
传统计算机视觉部分,会有灰度图、RGB、均值/高斯滤波器、利用 Canny 算子对图像进行边缘检测、利用大津算法对图像进行分割等小的实操项目。
-
AI 部分会有一个手写数字识别项目(Mnist) 作为引子,来理解一个 AI 模型的训练和推理过程。
-
AI 原理部分,会详细阐述和解析 resnet50 中用到的算法和背景知识。
-
实战部分用 python/C++ 两种语言完成 resnet50 模型的从零手写。
- 其中 resnet50 的所有核心算法和网络结构(包括Conv2d、AvgPool、MaxPool、fc、Relu、残差结构) 全部手写,不借用任何第三方库。
- 由于是自己手写的算法和模型结构,因此会有很大的自由度进行性能优化,性能优化是本项目最后进行的部分,会迭代多个版本,一步步将模型的性能调到比较不错的效果。
-
实战部分在完成手写算法的基础上,除了要保证网络精度可用(也就是任意给一张图片,经过预处理之后,Top1/Top5 可以正确的预测出图片) 之外,还会关注性能优化部分,这一点后面会有介绍。
为什么要全部手写核心算法
目前网上有很多教程,在教你手搭神经网络的时候,基本都是基于 torch 的 nn 模块或其他模块,用 nn.conv2d 就完成了卷积计算。
对于想深究算法和学习算法的同学,或者一些初学者而言,即使按照教程将神经网络搭建出来了,或这将图片推理出来了,依旧是云里雾里,不知其原理,始终浮于表面,心里学的也不踏实,这一点我在多年前初学的时候感受尤为明显。
事实上,nn.conv2d 是将 conv2d 的算法实现给封装起来了,我们看不到它的实现机制,很难学到里面的实现细节,跟别提如何在此基础上进行性能优化了(虽然该接口已经被优化过)。
于是便有了这个项目。
最初仅仅是想自己动手完成一个简单的 resnet50 的模型的手写。
随后有一些小伙伴联系我希望跟着学习,于是开始系统的写文章,结果越写越多,索性做了一个小册,通过小册的写作,激励我不断的维护和更新这个项目,截止到现在,还在不断的更新代码,为代码写注释,写相关的文章。
所以,你可以看到,本项目的代码部分是大家都可以下载学习的,但是仓库配套的 100 多篇文章是付费的。
该项目中的代码从2023年4月开始编写,2023年11月做成小册,陆续调试了很多次,所有代码都是我手动编写而成。
目前项目中所有代码已经完全跑通,精度也很OK,性能经过 5 个版本的迭代,也基本达到了不错的效果。
你可以学到什么
通过本项目,你可以一窥传统计算机视觉的经典算法,理解传统计算机视觉和基于深度学习的计算机视觉算法的联系和区别,深入理解 resnet50 中用到的所有算法原型、算法背景原理、resent50 的思想、resnet50 的网络结构、以及常见的神经网络优化方法。
你可以参考项目中的代码,真正运行一个 resnet50 神经网络,完成一张或多张图片的推理。
在项目的 new_version_with_notes 目录下是带有注释的版本,代码中关键的地方我会给出文字详解。
如果你把项目代码和配套的文章都阅读一遍,完全实操一遍,我觉得入门 AI 视觉并不是难事,同时关于 resnet50 这个经典模型,即使你是一个小白,完全实操一遍之后也可以出师了。
项目所涉及文章
该项目搭配有 100+ 篇背景知识、原理解析和代码实操相关的介绍文章, 花费了巨大的精力写成。
有两种办法可以阅读到这些文章:
-
在这里(如果跳转不了就右键,复制连接地址到浏览器打开)订阅。