一、轻量化
1.1 轻量化网络
网络名称 | 记忆点 | 备注 |
MobileNetV1 | 深度可分离卷积替换传统卷积 | 计算量和参数量下降为原来的1/Dk^2(Dk为卷积核kernel size,一般为3,所以计算量约为1/9) |
深度卷积的激活函数是Relu6 | ||
下采样是通过3x3的深度卷积 | stride=2 | |
MobileNetV2 | Linear Bottelneck | 最后的Relu6换成了Linear |
Inverted Residuals | 1.点卷积扩充通道,再做深度卷积,再通过点卷积压缩通道。这样的好处是3x3卷积在更深的通道上可以提取到更丰富的特征。 2.对于stride=1的Block加入Residual结构,stride=2的resoution变了,因此不添加。 | |
MobileNetV3 | NAS | 网络的架构基于NAS实现的MnasNet platform-aware NAS + NetAdapt |
SE | squeeze and excitation 注意力机制 | |
模型的后半段使用h-swish | swish(x) :f(x) = x * sigmoid(βx) h-swish是因为sigmoid函数在端上计算耗时而提出的改进方案。h-swish的梯度是更好计算的。 | |
末端调整 | Avg提前,好处是计算量减小。 | |
ShuffleNetV1 | 1x1分组卷积 | 传统的深度可分离卷积的Flops: c1,c2表示输入输出通道。c1*c2 >> 9,所以深度可分离卷积的瓶颈在于1x1卷积。 对point-wise covolution分组之后的Flops:g表示分组数,可以看到明显改善了点卷积的瓶颈。 但是这样会造成channle的信息流通不畅,精度下降。 |
channle shuffle | 打通channel之间的信息。 可以看出实际上的shuffle是特征图展开后做了一个转置,操作很简单。 | |
结构 | (a) MobileNet, (b) ShuffleNet v1,(c) ShuffleNet v1降采样情况 | |
ShuffleNetV2 | 四大设计理念 |
|
结构 | (a) ShuffleNet v1 ,(b)ShuffleNet v1 降采样, (c)ShuffleNet v2,(d)ShuffleNet v2 降采样
|
1.2 知识蒸馏
基础知识点 | 知识记忆点 | 备注 |
知识蒸馏 | 原理 |
|
MINIST上的成果 | ||
理解温度参数T | 简单来讲,引入温度参数T是在神经层输出的logits上,在softmax之前。温度参数的作用就是让模型分概率分布之间的差距缩小,不仅仅关注正确的分类,也关注类别之间的相对关系,表达出更为丰富的信息。当T升高,非正确类别之间蕴含的的信息会更突出,与此同时类别概率的相对大小是不会改变的。 | |
蒸馏的过程 | ||
损失函数的设计 |
1.3 剪枝
基础知识点 | 记忆点 | 备注 |
Learning both Weights and Connections for Efficient Nerual Networks(剪枝开山论文) | 结构化剪枝和非结构化剪枝 |
|
基本思路 |
| |
实验结果 | 在Imagenet数据集上,Alexnet剪枝后的参数只有未剪前的1/9。但是精度几乎不变。最好的方法是L2正则化+迭代式剪枝。 | |
Flops&MAC | FLOPS:每秒浮点数计算量 MAC:内存访问成本 计算机在计算的时候需要把数据加载到内存中再进行计算,这个过程是耗时的。分组卷积是对MAC消耗很高的算子。 一般而言,在内存访问速度快的设备上,更关注FLOPs,而在嵌入式设备上,更关注MAC。 | |
Learning Efficient Convolution Networks Through Network Slimming(结构化剪枝,用BN层判断通道的重要性) | 基本思路 | 因为当前的CNN在卷积层之后往往都会跟着BN层,而BN层的参数α代表着对于通道值的缩放。所以如果α很小的话那么这个通道的值就相对也比较小。因此可以根据BN层的参数α来进行剪枝。
|
实验结果 | ImageNet上的VGG,剪掉了82.5%参数量,保持精度不变。 |