学习了哪些知识,计算机视觉才算入门? - 知乎

历时 3 个月,终于把我自己编写的入门计算机视觉的代码开源了,想入门 AI 计算机视觉的朋友查看下面的github链接,欢迎星标。

去年 11 月的时候,定了一个目标,希望在未来 3 个月的时间里,写满 100 篇关于从零入门 AI 视觉的算法解析和代码调试的文章。

历经 3 个月,终于在今天把 100 篇文章写完了,代码也全部调试完成。

已经把代码上传到了 github 上,有想要学习或入门 AI 视觉的小伙伴可以看看,地址:

https://github.com/dongtuoc/cv_learning_resnet50

1、项目介绍

本项目主要是为了帮助想入门学习 AI 视觉的小伙伴快速上手。

项目首先对一些经典的传统计算机视觉算法进行实操,随后以 resnet50 神经网络为例子,系统的讲解了 CV 模型中的基础算法和背景知识。

最后通过本仓库中的代码实战,从零手写了 resnet50 模型,并且完成任意一张图片的识别,以及完成模型的性能优化。

传统计算机视觉部分

在传统计算机视觉部分,会有灰度图、RGB、YUV、均值/高斯滤波器、利用 Canny 算子对图像进行边缘检测、利用大津算法对图像进行分割等小项目。

AI 部分

在 AI 部分,首先会有一个手写数字识别项目(6_Mnist) 作为引子,用来理解一个 AI 模型的训练和推理过程。

最后,用 python 和 C++ 两种语言完成了 resnet50 模型的从零手写。

其中 resnet50 的所有核心算法和网络结构(包括Conv2d、AvgPool、MaxPool、fc、Relu、残差结构) 全部手写,不借用任何第三方库。

由于是自己手写的算法和模型结构,因此会有很大的自由度进行性能优化。

性能优化是本项目最后进行的部分,会迭代多个版本,一步步将模型的性能调到比较不错的效果。

2、为什么要全部手写核心算法

目前网上有很多教程,在教你手搭神经网络的时候,基本都是基于 torch 的 nn 模块或其他模块,用 nn.conv2d 就完成了卷积计算。

对于想深究算法和学习算法的同学,或者一些初学者而言,即使按照教程将神经网络搭建出来了,或这将图片推理出来了,依旧是云里雾里,不知其原理。

知识点浮于表面,心里学的也不踏实,这一点我在多年前初学的时候感受尤为明显。

事实上,nn.conv2d 是将 conv2d 的算法实现给封装起来了,我们看不到它的实现机制。

很难学到里面的实现细节,跟别提如何在此基础上进行性能优化了(虽然该接口已经被优化过)。

于是便有了这个项目。

最初仅仅是想自己动手完成一个简单的 resnet50 的模型的手写。随后有一些小伙伴联系我希望跟着学习,于是开始系统的写文章。

结果文章越写越多,索性做了一个系统的小册,同时不断的维护和更新这个项目。截止到现在,基本完成了代码的开发和调试,同时还为代码写了详细的注释。

所以,非常欢迎你不断试用该仓库代码,并且提出的你的建议。

另外,本仓库搭配了 100 多篇相关知识的介绍和代码使用的文章,如果你感兴趣,可以来这里看看

目前项目中所有代码已经完全跑通,模型推理的精度也 OK,性能经过 5 个版本的迭代,也基本达到了不错的效果。

3、这个仓库你可以学到什么

通过本项目,你可以一窥传统计算机视觉的经典算法,理解传统计算机视觉和基于深度学习的计算机视觉算法的联系和区别。

深入理解 resnet50 中用到的所有算法原型、算法背景原理、resent50 的思想、resnet50 的网络结构、以及常见的神经网络优化方法。

你可以参考项目中的代码,真正运行一个 resnet50 神经网络,完成一张或多张图片的推理。

在项目的 new_version_with_notes 目录下是带有注释的版本,代码中关键的地方我会给出文字详解。

如果你把项目配套文章都阅读一遍,代码实操一遍,我觉得入门 AI 视觉并不是很难。

同时关于 resnet50 这个经典模型,即使你是一个小白,实操过后也会有很大的收获。

项目所涉及文章

该项目搭配的 100+ 篇背景知识、原理解析和代码实操相关的介绍文章,有两种办法可以阅读到这些文章:

4、我是如何实现从零手写 resnet50 的

模型获取

使用 torchvision 从已经预训练好的模型中,将 resnet50 每一层的权值保存到仓库中,所保存的权值文件会在后续被加载进来,参与卷积、全连接、BN层的计算。

在 model 目录下,运行以下脚本,即可将参数保存到 model/resnet50_weight 中。

$ python3 resnet50_parser.py

代码实现

在保存完权值后,利用 python / C++ 语言,分别实现 Conv2d, BatchNorm, Relu, AvgPool, MaxPool, FullyConnect(MatMul) 等核心函数。

按照 resent50的网络结构, 将以上算法搭起来。

  • 模型文件参考 model/resnet50.onnx.png 和 model/resnet50_structure.txt
  • 手工搭建 resnet50 的网络结构参考 我手工搭建的模型, Python 版本

推理

代码实现完成后,意味着模型运行需要的基础算法和参数已经就位,下面读取一张本地图片,进行推理。

读取一只猫的图片,开始推理,正确推理出来是一只猫,本项目第一阶段目标(准确性验证)即完成。

优化

在基本功能实现完成后,便需要对模型的推理性能进行优化,python 版本进行了一版优化,性能有不错的提升。

C++ 版本经过 5 个大版本的优化,将模型推理的延时从最初的 16923 ms 优化至297 ms。

最终经过模型的性能调优,手写的 resnet50 模型在 Intel CPU 上推理几乎没有卡顿感,而且精度也可以满足要求。

AI 视觉入门并不难,如果你也想学一下AI,可以下载该仓库试一试,祝你学有所得。


原网址: 访问
创建于: 2024-02-29 15:45:40
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论