高效的CNN网络
参考B站
要求
- 参数量小,占用的内存低(一般小于5M,甚至不到1M)
- 速度快(视频处理,每秒30帧)
- 计算量低(flops)
- 性能和大模型相当
实现方法
卷积核的使用和设计
- 全连接和全局池化:全局池化代替全连接
- 池化与步长的设计:特征图的大小下降过快会影响性能,要平衡计算量和性能
- 小卷积:3x3卷积
- 1x1卷积:多用在瓶颈结构,1x1卷积进行降维
卷积方式的使用和设计
- 卷积拆分:3x3拆分成1x3和3x1两个部分
- 通道补偿
- 提高单层通道利用率:特征通道补偿,输入通道取反和输入通道进行concat,以原来一半的计算量便维持了原来的网络宽度
- 提高多层通道利用率:密集连接网络,DenseNet,每一层学习的通道数更少,计算量远低于普通网络
- 分组卷积:depth-wise convolution, squeeze net, condense net
剪枝
B站剪枝例子
- 常用的为通道级别的剪枝,剪除整个通道
- 根据卷积核的L1 norm(绝对值)判断是否需要裁减掉卷积核
- network slimming,根据BN的缩放因子确定通道是否重要
量化
从高精度到低精度,如32位到8位
- 权重量化
- 激活值量化
- 输入量化
- 误差量化
知识蒸馏
- Hinton: soft labels
- FitNet: 最小化特征层的距离
- ProjectNet: 同时训练一个大模型和一个小模型
- 蒸馏和量化相结合,teacher为全精度模型,student为低精度模型