轻量化模型总结
目的
保证模型精度的前提下尽量减小模型的参数量,达到加速模型,方便模型部署的目的
主流方法
- 基于神经网络架构搜索的自动化设计神经网络技术
- 网络结构不变的模型压缩
- 模型剪裁和稀疏化
- 模型量化
- 模型蒸馏
- …
- 人工设计轻量化模型
- SqueezeNet
- MobileNet
- …
人工设计轻量化模型
-
- 主要思路
- 1*1卷积代替3*3卷积
- 降低3*3卷积输入数据的通道数量
- 在网络的后端进行降采样,保证模型具有较大激活图,可以提高模型精度
- 主要结构为如下
- 主要思路
-
- 主要思路
- 深度可分离卷积:由Depthwise卷积和Pointwise卷积组成,是传统卷积运算运算量的八分之一到九分之一
- 主要结构
- 主要思路
-
- 主要思路
- 反转残差结构,使用先升维后降维的策略,提高梯度的传播效率,具有更好的内存使用效率,同时提高深度可分离卷积输入的通道数,但是会引入特征破坏(特征由高维向低维映射出现损失)的问题
- 线性瓶颈结构,取消Relu,解决如上结构带来的特征破坏问题
- 主要结构
- 主要思路
-
- 主要思路
- 深度可分离卷积
- 组卷积:对于某一个channel层,其对应的输入channle只占所有输入channel的固定一部分,组卷积相比PointWise卷积可以降低计算量
- 通道随机打乱操作:解决组卷积带来的通道固定问题
- 主要结构
- 主要思路
-
-
主要思路:与其他论文主要关注FLOPs相比,该论文基于memory access cost(MAC),模型并行化程度,运算平台等因素及ShuffleNet提出如下观点:
- 相等的channel width 可以减小MAC
- 过多的组卷积增加了MAC
- 模型分支数量会影响并行度
- 计算FLOPs时只考虑卷积中的乘法操作,但是Element-wise操作(ReLU,单位加,偏置)也很耗时
-
基于如上观点提出如下的结构
Channel Shuffle:将input channel 分成两个分支,分别为b和c-b,其中一个分支无操作,另一个包含三个卷积,最后concat操作代替add操作(符合以上第一、三、四观点)
c-b分支输入输出channel数相同,且不使用组卷积,Channel Split具有相似作用(符合第一、第二观点)
ReLU,Depthwise Conv 只会出现在一个branch中,同时连续的Concat,Channel Shuffle及Channel Split操作模型可以合成一个element-wise操作(符合第四观点)
-
-
- 主要思想
- 特征冗余对深度学习模型非常重要,提出一种计算量更小的冗余特征生成方式,Ghost Module,包含普通卷积操作及线性操作,并参考MobileNetV2提出Ghost Bottleneck结构
- 主要结构
- 主要思想
总结
GhostNet论文中各个模型实验结果
各个论文观点:
- 特征复用有助于精度提高
- 深度可分离卷积
- 残差结构可以提高精度
- Bottleneck结构若先膨胀后收缩需弃用ReLU
- 输入输出channle数相同时,MAC最小
- 深度学习中特征是冗余的,channel缩减因子可以获得较好的结果
- 组卷积可以降低模型参数量及计算量,但是会提高MAC