就近年提出的四个轻量化模型进行学习和对比,四个模型分别是:MobileNet、SqueezeNet、ShuffleNet。
M表示输入特征的通道数,N表示输出特征的通道数。卷积核大小为K*K,输出特征图大小为F*F.
1.普通卷积网络的计算量: K*K*M*N*F*F.
普通卷积网络的参数量:K*K*M*N
2.MobileNet
采用名为 depth-wise separable convolution 的卷积方式代替传统卷积方式,以达到减少网络权值参数的目的。
通过采用 depth-wise convolution 的卷积方式,达到:1. 减少参数数量 2. 提升运算速度。
第一步 Depth-wise convolution, 即逐通道的卷积,一个卷积核负责一个通道,一个通道只被一个卷积核「滤波」;第二步,Pointwise convolution,将 depth-wise convolution 得到的 feature map 再「串」起来,注意这个「串」是很重要的。
mobileNet计算量: K*K*M*F*F+M*N*F*F
mobileNet参数量:K*K*M+M*N
mobileNet与普通卷积操作的计算量比值:
3.分组卷积(group Convolution)
分组大小为G
分组卷积的参数量=(K*K*M/G*N/G)*G
分组卷积的计算量= (K*K*M/G*F*F*N/G)*G
4.Shufflenet
shuffle 具体来说是 channel shuffle,是将各部分的 feature map 的 channel 进行有序的打乱,构成新的 feature map,以解决 group convolution 带来的「信息流通不畅」问题。
Shufflenet计算量:相当于把分组卷积里每组卷积之间的channel进行shuffle,参数量与计算量类似分组卷积。
5.Squeezenet
首先 squeeze 层,就是 1*1 卷积,其卷积核数要少于上一层 feature map 数,这个操作从 inception 系列开始就有了,并美其名曰压缩,个人觉得「压缩」更为妥当。
Expand 层分别用 1*1 和 3*3 卷积,然后 concat,这个操作在 inception 系列里面也有。
Squeezenet计算量:先用1*1的卷积核(个数少于输入通道)进行压缩,然后进入两个并行的1*1,3*3的卷积,结果再concat,参数和运算量正常计算。