从LeNet5到AlexNet,再到VGGNet,主要以卷积、池化、全链接构成,层数不断加深,参数不断增多。
Inception系列相较于VGGNet,参数量更少,精度更高,得益于Inception Module的多尺度设计和特征融合思想,以宽度取胜。
不规则卷积的引入,不仅可以让采样视野大于常规卷积,还可以自由调节感受野的形状,适应更加灵活的目标尺度,例如 可变形卷积 deformable convolutional networks
注意力机制(attention)的引入,基本思想就是让系统学会注意力 – 关注重点信息,同时忽略无关信息。包括空间域注意力、通道域注意力、层域注意力、混合域注意力等
CV领域新范式,目前基于Transformer的CV模型已经成为了新的SOTA。Transformer关注全局信息,能建模更加长距离依赖关系,避免了CNN中存在的归纳偏好问题,但复杂度较高。
在另一方面,如果我们能够将浮点型存储的模型转化为8bit甚至4bit、2bit存储时,不仅模型所占空间大幅度减小,计算量也会降低。所以在实际工程应用中,量化(Quantization)是很常见的做法。
许多论文和实验证明,我们经常使用的神经网络模型都是过参数化的,即一个训练好的模型,其内部许多参数都是冗余的,如果能够使用适当的方法将这些参数删除掉,对模型的最终结果是几乎没有影响的。而剪枝(Pruning)就是很好的的例子。
剪枝和量化都是从模型速度和存储方面来进行性能优化的,也就是说他们可以降低模型计算量,却无法提高模型精度。那么如何能够直接使用一个很小的网络,得到更好的精度,就显得十分重要,这时知识蒸馏(Knowledge Distilling)就起到了关键作用。
目前知识蒸馏的方法大致可以分为以下三种
Response based distillation:教师模型对学生模型的输出进行监督
最早的知识蒸馏算法 KD,由 Hinton 提出,训练的损失函数中除了 gt loss 之外,还引入了学生模型与教师模型输出的 KL 散度,最终精度超过单纯使用 gt loss 训练的精度。这里需要注意的是,在训练的时候,需要首先训练得到一个更大的教师模型,来指导学生模型的训练过程。(PaddleClas基于此提出了SSLD知识蒸馏法)
Feature based distillation:教师模型对学生模型的中间层 feature map 进行监督
Heo 等人提出了 OverHaul [8], 计算学生模型与教师模型的 feature map distance,作为蒸馏的 loss,在这里使用了学生模型、教师模型的转移,来保证二者的 feature map 可以正常地进行 distance 的计算。(PP-OCRv2基于此方法大幅度提升了识别精度)
Relation based distillation:对于不同的样本,使用教师模型和学生模型同时计算样本之间 feature map 的相关性,使得学生模型和教师模型得到的相关性矩阵尽可能一致
关系知识蒸馏(RKD)迁移教师模型得到的输出结果间的结构化关系给学生模型,不同于之前的只关注个体输出结果,RKD 算法使用两种损失函数:二阶的距离损失(distance-wise)和三阶的角度损失(angle-wise)。在最终计算蒸馏损失函数的时候,同时考虑 KD loss 和 RKD loss。最终精度优于单独使用 KD loss 蒸馏得到的模型精度。
神经网络结构自动搜索流程
神经网络结构自动搜索可以看作是AutoML的一个子领域,简单来说,给定数据集输入和基本配置,它就能够针对该数据集找到最适合的神经网络结构,并且给出最佳的超参数。
skimage:图像处理和计算机视觉算法的集合工具包
opencv:图像处理和计算机视觉算法的集合工具包
imgaug:图像数据增强工具
NumPy:科学计算基础软件包,可以存储和处理大型矩阵及其运算,最常用的科学计算库之一
SciPy:科学计算核心库,基于NumPy;主要有助于解决线性代数、概率论和积分计算等任务
Pandas:提供诸多高级数据结构和分析工具,适用于绝大多数数据类竞赛
Scikit-learn:基于NumPy和SciPy的数据处理库,最常见的机器学习和数据挖掘任务算法工具之一
Albumentations:图像数据增强工具
Augmentor:图像数据增强工具
Matplotlib:创建二维图表和图形库,目前很多流行的绘图库都是基于它构建(例如seaborn)
VisualDL:飞桨可视化分析工具,拥有丰富的图表和图形,为飞桨训练提供最直观地可视化帮助,进而实现高效模型优化* paddledetection, paddleclas, paddleseg, mmdetection, detectron等:各大平台开源的快速上手的训练框架