最近搞了一段时间的模型压缩,有些经验想和各位童鞋分享下,想哪说哪,不严谨的地方欢迎大家随时拍砖。
目前卷积神经网络已经在计算机视觉领域取得了长足的进步,但是由于目前业内认为越深网络效果越好,所以卷积神经网络参数巨大,并且计算卷积层和全连接层需要大量的浮点矩阵乘法,导致计算开销也非常大,虽然有的网络可以在GPU上实时运行,但是这种庞然大物无法直接应用于手机等嵌入式设备中,所以我们需要对卷积神经网络进行裁剪使神经网络可以在手机跑起来。如果想要在手机上跑深度学习模型有两个关键点,一个是模型参数要少,另一个是运行时间短,目前来说有很多paper只关注模型压缩却不考虑模型加速,我主要想从模型加速这块来分享下我的一些经验和踩过的坑。
先说我的结论吧,以下都是我尝试过的以及接下来要尝试的一些方向,各位童鞋有不同看法欢迎在下面留言。
1.对每个卷积层的channel进行减枝
2.对每个卷积层的channel加权重
3.蒸馏网络(student network 如何逼近 teacher network)(softmax 逼近和特征层逼近)
4.Group Convolution(Mobilenet, ShuffleNet, Interleaved Group Convolution)
5.Densenet 相关
卷积神经网络主要包括卷积层和全连接层,卷积层占的运算量大而全连接层占的参数多,如果想要加速卷积神经网络,主要是对卷积层进行优化。对于卷积层我认为有spatial和channel两个维度,通常大家都是对spatial维度做文章,主要有Atrous Convolution, deconvolution,subpixel convolutions等等&