小型CNN总结:ShuffleNet、MobileNet v1,
推荐的文章包括: ShuffleNet,mobilenet v1,v2,Xception
Xception、MobileNet将普通2D卷积分解为depthwise conv和pointwise conv
其中有个细节是Xception和ShuffleNet都提到depthwise conv之后不接ReLU激活函数比用ReLU激活函数好,MobileNet-v2的depthwise conv还是用了ReLU的,只不过后面接的1X1降维没用,因为它梭子型中间有冗余嘛,可以承担ReLU带来的风险
MobileNet-v2的Inverted residuals就是把两头宽,中间窄的沙漏型结构变成了两头窄,中间宽的梭子型结构,因为depthwise conv嘛,resonable
这几个网络在大幅降低计算量的同时基本保持了精度,然而此时主要矛盾就发生了转化,占据计算量的主体由3x3的卷积核变成了1x1的卷积核(90%以上),所以ShuffleNet对它也分组了,然而这带来了新的问题也就是group conv 本来就存在的一个问题,只不过现在激化了,就是group之间信息交流不足的问题,ShuffleNet的解决方法就很巧妙了,这篇文章总结一下就是:发现问题(pointwise conv计算量占主体),解决问题(pointwise conv计算也分组),引入了新问题(group之间信息交流不足),解决新问题(channel shuffle)
小模型参数量比较小,正则化加入要谨慎,比如weight decay需要适当小一点,shufflenet采用了weight decay随训练逐渐减少至0的训练策略,mobilenet对于depthwise卷积则没有使用正则化
需要注意的是:理论计算量flops和实际的运算效率是两码事,后者还和其他很多因素相关,所以有些很注重落地的公司会对此做很多优化,比如face++的shufflenet以及shufflenet-v2
说起这个笔者有幸和shufflenet以及shufflenet-v2的一作,ResNet二作zhangxiangyu(face++模型组leader)交流过一个小时,十分温文尔雅的大神,对他以及这个公司十分膜拜
说到这个笔者还有幸和SE-net作者胡杰(Momenta高级研发工程师)交流过很多问题,也是神一样的任务
说起这个笔者还有幸和孙剑大佬有过简短的交流
继续努力吧骚年!