文章同步发于 github 仓库和 csdn 博客,最新版以
github
为主。如果看完文章有所收获,一定要先点赞后收藏。毕竟,赠人玫瑰,手有余香.
更多干货文章和面经,点击查看我的公众号-嵌入式视觉,扫码关注我的公众号!
本文内容为 cv
算法工程师成长子路上的经典学习教材汇总,对于一些新兴领域则给出了较好的博客文章链接。本文列出的知识点目录是成系统且由浅至深的,可作为 cv
算法工程师的常备学习路线资料。部分学习资料存在离线 PDF
电子版,其可在 github仓库-cv_books 中下载。
课程学习方法,三句话总结:
图片来源
github
仓库 DeepLearning Tutorial
关于科研和研发的思考,可参考文章-中国人民大学赵鑫:AI 科研入坑指南。
PDF
电子书下载方式在文章首页。C++
示例代码。C++
库接口参考标准文档,官方文档,包含各个函数定义及使用 example
。C++
编程技巧。Python
基础、函数、高级特性、函数式编程、模块、面向对象编程、面向对象高级编程、错误、调试和测试、IO
编程、进程和线程、正则表达式、常用内建模块、常用第三方模块、图形界面、网络编程、异步 IO
等内容。电子书可在github仓库-cv_books 中下载。Python
面向对象编程、装饰器、模块、异常处理等内容。PDF
电子版,内容较为基础且通俗易懂,适合快速了解数据结构与算法的基础知识,但深度不够,示例代码为 Python
。java
代码,同时 github
仓库提供 C/C++/GO/Python
等代码。Python
,仓库简洁,阅读体验不错,无任何广告,适合刚学完数据结构与算法基础知识的同学。leetcode
高频题图解,题解分析很多,部分题目有动画分析,提供 Python/Java/C++
实现,但也存在部分题解分析废话较多,不够精简的问题。105
道高频面试算法题目,go
代码实现。leetcode
高频题题解,全书代码默认使用 C++11
语法编写,题解为文字性描述,题解分析较短且不够通俗易懂。本书的目标读者是准备去硅谷找工作的码农,也适用于在国内找工作的码农,以及刚接触 ACM
算法竞赛的新手。PDF
电子版,内容很全,很适合打下扎实的基础。PDF
电子版。PPT
、代码资料。1,VGGNet 拥有 5 段 卷积,每一段有 2~3 个卷积层,同时每段尾部会连接一个最大池化层用来缩小图片尺寸,每段内的卷积核数量相同,越靠后的段的卷积核数量越多:64-128-256-512-512。ResNet 网络拥有 4 段卷积, 每段卷积代表一个 残差学习
Blocks
,根据网络层数的不同, Blocks 的单元数量不同,例如 ResNet18 的 Blocks 单元数量分别为2、2、2 和 2。越靠后的段的卷积核数量越多:64-128-256-512,残差学习Blocks
内的卷积核通道数是相同的。
2,ResNet v2 创新点在于通过理论分析和实验证明恒等映射对于残差块的重要性,根据激活函数与相加操作的位置关系,我们称之前的组合方式(ResNet)为“后激活(post-activation)”,现在新的组合方式(ResNet v2)称之为“预激活(pre-activation)”。使用预激活有两个方面的优点:1)
f
变为恒等映射,使得网络更易于优化;2)使用BN
作为预激活可以加强对模型的正则化。
PDF
电子版,且提供较为清晰的代码,适合快速入门,教程目录结构清晰明了。PDF
电子版。PDF
电子版。成系统的介绍了数字图像的原理及应用,内容多且全、深度也足够,非常适合深入理解数学图像原理,可挑重点看。PDF
电子书,官方代码为 MXNet
框架,也存在 PyTorch
代码实现书籍。
Papers with code
是由Meta AI Research
团队主导的一个开放资源的社区,汇集了深度学习论文、数据集、算法代码、模型以及评估表。Jetson Zoo
,是一个开源目录,其中包含在NVIDIA Jetson
硬件平台上开发指南以及参考案例分享汇总。模型库资源里包括图像分类、目标检测、语义分割和姿势估计等方向的实践分享,提供开源代码和开发指南文章的链接。Model Zoo
包含了机器学习各领域的算法框架及预训练模型资源汇总,其中包括TensorFlow
、PyTorch
、Keras
、Caffe
等框架,作者是Jing Yu Koh
构建。- MediaPipe 是一个为直播和流媒体提供跨平台、可定制的机器学习解决方案的框架。MediaPipe 提供了包括人脸检测、人脸网格、虹膜识别、手部关键点检测、人体姿态估计、人体+人脸+手部组合整体、头发分割、目标检测、Box 跟踪、即时运动追踪、3D 目标检测等解决方案。
Deci
旨在使用AI
构建更好的AI
,使深度学习能够发挥其真正的潜力。借助该公司的端到端深度学习加速平台,人工智能开发人员可以为任何环境(包括云、边缘或移动)构建、优化和部署更快、更准确的模型。借助Deci
的平台,开发人员可以在任何硬件上将深度学习模型推理性能提高3
到15
倍,同时仍然保持准确性。平台除了能够显示每个模型的准确性之外,还可以轻松选择目标推理硬件并查看模型的运行时性能结果,例如各种硬件的吞吐量、延迟、模型大小和内存占用。但是模型加速模块的demo
是需要注册账户和购买的。
网络结构碎片化更多是指网络中的多路径连接,类似于
short-cut
,bottle neck
等不同层特征融合,还有如FPN
等结构。拖慢并行的一个很主要因素是,运算快的模块总是要等待运算慢的模块执行完毕。
1,量化是指用于执行计算并以低于浮点精度的位宽存储张量的技术,或者说量化就是将神经网络的浮点算法转换为定点。 量化模型对张量使用整数而不是浮点值执行部分或全部运算。
2,量化简单来说就是将浮点存储(运算)转换为整型存储(运算)的一种模型压缩技术。
3,虽然精心设计的
MobileNet
能在保持较小的体积时仍然具有与GoogleNet
相当的准确度,不同大小的MobileNet
本身就表明——也许一个好的模型设计可以改进准确度,但同类模型中仍然是更大的网络,更好的效果!
4,权重值域调整是另一个机器学习过程,学习的目标是一对能在量化后更准确地运行网络的超参数
min/max
。
Neon
是ARM
平台的向量化计算指令集,通过一条指令完成多个数据的运算达到加速的目的,或者说Neon
是 ARM 平台的SIMD
(Single Instruction Multiple Data,单指令多数据流)指令集实现。常用于AI、多媒体等计算密集型任务。
Winograd
是一种快速卷积算法,适用于小卷积核,可以减少浮点乘法的次数。
1,为了尽可能地提高 MAC阵列
的利用率以及卷积运算效率,阵列控制模块会根据第一卷积参数矩阵的行数和第一卷积数据阵列的行数来确定第一乘法累加窗口的列数。
2,SNPE
开发流程:
Cascade RCNN
作为 baseline
,以 Res2Net101
作为 Backbone
;Albumentation
库做数据集增强-用在模型训练中;MST
Multi-scale training/testing)的升级版-SNIP
方法(Scale Normalization for Image Pyramids),用在 baseline
模型训练和测试中:解决模板大小尺度不一的问题;DCN
可变性卷积网络-用在 baseline
模型的 backone
中;soft-NMS
:解决目标互相重叠的问题;HTC
模型预训练, Adam
优化算法可以较好的适应陌生数据集,学习率热身(warm-up
)来稳定训练过程。4,SNIP
论文解读:
SNIP
非常 solid
地证明了就算是数据相对充足的情况下,CNN
仍然很难使用所有 scale
的物体。个人猜测是由于 CNN 中没有对于 scale invariant 的结构,CNN 能检测不同 scale 的“假象”,更多是通过CNN 来通过 capacity
来强行 memorize
不同 scale
的物体来达到的,这其实浪费了大量的 capacity
,而 SNIP
这样只学习同样的 scale 可以保障有限的 capacity 用于学习语义信息。论文的关键贡献:发现现在的 CNN 网络无法很好的解决 scale invariance 的问题,提出了一个治标不治本的方法。
5,高效模型设计(模型压缩)方法:
一般而言,高效模型的设计有 6 大基本思路:1)轻量级架构、2)模型裁剪、3)模型搜索、4)低精度量化、5)知识蒸馏、6)高效实现。
6,网络深度与宽度的理解及意义
更多理解参考知乎网络宽度对深度学习模型性能有什么影响?
在一定的程度上,网络越深越宽,性能越好。宽度,即通道(channel
)的数量,网络深度,及 layer
的层数,如 resnet18
有 18
层网络。注意我们这里说的和宽度学习一类的模型没有关系,而是特指深度卷积神经网络的(通道)宽度。
网络深度的意义
:CNN 的网络层能够对输入图像数据进行逐层抽象,比如第一层学习到了图像边缘特征,第二层学习到了简单形状特征,第三层学习到了目标形状的特征,网络深度增加也提高了模型的抽象能力。网络宽度的意义
:网络的宽度(通道数)代表了滤波器(3
维)的数量,滤波器越多,对目标特征的提取能力越强,即让每一层网络学习到更加丰富的特征,比如不同方向、不同频率的纹理特征等。7,所有 Inception
模型都具有一个重要的性质——都是遵循 拆分-变换-合并(split-transform-merge
) 的设计策略。
8,对于某种指令,延迟 latency
主要关注单条该指令的最小执行时间,吞吐量 throughout
主要关注单位时间内系统(一个 CPU
核)最多执行多少条该指令。因为 AI
计算的数据量比较大,所以更关注吞吐量。
9,CPU
高性能通用优化方法包括:
10,卷积性能优化方式:卷积的计算方式有很多种,通用矩阵运算(GEMM
)方式有良好的通用性,但是仅使用 GEMM
无法实现性能最优。除 GEMM
外,常用的优化方法还包括滑窗(Sliding Window
)、快速傅里叶变换(Fast Fourier Transform, FFT
)、Winograd
等。不同的方法适合不同的输入输出场景,最佳的办法就是对算子加入逻辑判断,将不同大小的输入分别导向不同的计算方法,以最合适的方法进行卷积计算。
GEMM
方法比较,但是一般当输入小于 32 × 32 32\times 32 32×32 时,可以考虑采用滑窗的优化方式。Winograd
是存在已久的性能优化算法,在大多数场景中,Winograd
算法都显示了较大的优势,其用更多的加法运算代替部分乘法运算,因为乘法运算耗时远高于加法运算。Winograd
适用于乘法计算消耗的时钟周期数大于加法运算消耗的时钟周期数的场景,且常用于 3 × 3 3\times 3 3×3 卷积计算中。对于 CPU
,一般来说,一次乘法计算消耗的时间是一次加法计算消耗时间的 6
倍。FFT
方法不适合卷积核较小的 CNN
模型。11,下图展示了如何在英伟达 GPU
架构发展史以及单块 GPU
上纵向扩展以满足深度学习的需求(截止2020年)。
deep compression
是解决存储问题,对于速度问题几乎没获得改善;CNN
模型的存储空间问题,主要还是在全连接层,若要改善 inference
速度,需要在卷积层下功夫。13,Deep Compression
论文介绍的神经网络压缩方法,可分为三步: