高效神经网络设计I
这段时间比较关注高效网络设计,因此写下此文做相关记录。
关于高效神经网络设计,我发现了一篇文章总结的不错,我也是从这篇文章出发的。
如何重新设计网络?
我将设计网络分为了五个层次:
- 0、入门级,直接整体替换 backbone
例如将 VGG16 换为 mobilenet。
- 1、初级,减 channel,砍 block
即成比例地降低一个经典网络的 channel,例如 channel 数降低为之前的 1/2;或者 stage 的 block 重复数减小,例如将某个 stage 的 block 重复数从 8 减小为 6。
- 2、中级,替换 block
比如 mobilenetv2 出来了之后,整体将之前模型的 block 替换为 mobilenetv2 的 block;或者 shufflenetv2 出来之后,整体将之前模型的 block 替换为 shufflenetv2 的结构。
- 3、高级,从头开始设计,集众家之所长
即理解业界各个经典模型背后的 motivation 以及解决思路,不再拘泥于生搬硬套。将各个经典模型背后的设计思路吃透,了然于胸,下笔如有神。
- 4、科学家,设计出新的模块,为业界添砖加瓦,例如 depthwise separable convolutions,shuffle channel 等等。
设计思路
Depthwise separable convolutions
深度可分离卷积计做的一件是将普通的卷积操作分解为两步,这可以有效减少网络参数数量。
- 1.先在 2D 尺度做卷积,
- 2.再在通道尺度做卷积。
具体对比可参考此文:卷积神经网络中的 Separable Convolution
Low rank filter
目的:去除冗余,并且减少权值参数
方法:采用两个 K1 的卷积核替换掉一个 KK 的卷积核
参考此文:模型压缩中的低秩分解
Pointwise group convolution
pointwise convolution 和 channel shuffle 的组合
参考此文:ShuffleNet 阅读笔记
Dilated convolution
空洞卷积是卷积运算的一种方式,它增大了感受野却不丢失语义信息
避免网络分支太多,或者 group 太多
group 卷积就是将输入特征图的 channels Ci 差分为 g 个组,每组 Ci/g 个特征图
关于 group 参考此文:卷积神经网络 group 群卷积以及 group lasso
减少 element wise 的操作
即减少乘法操作
本文作者 : HeoLis
原文链接 : https://ishero.net/%E9%AB%98%E6%95%88%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E8%AE%BE%E8%AE%A1I.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
学习、记录、分享、获得