shuffleNet v1 v2笔记

ShuffleNet v1

ShuffleNet v1是由旷视科技在2017年底提出的轻量级可用于移动设备的卷积神经网络。

该网络创新之处在于,使用pointwise group convolution还有channel shuffle,保证网络准确率的同时,大幅度降低了所需的计算资源。

在近期的网络中,pointwise convolution的出现使得所需计算量极大的增多,于是作者提出了pointwise group convolution来降低计算量,但是group与group之间的几乎没有联系,影响了网络的准确率,于是作者又提出了channel shuffle来加强group之间的联系。在一定计算复杂度下,网络允许更多的通道数来保留更多的信息,这恰恰是轻量级网络所追求的。

从Fig.1(a)中我们可以看出组卷积会导致每个组的输出仅与组内特征相关,没有组间相互交流,会导致精度下降。(b)和(c)中的操作,是将组与组之间的信息进行重新排序,让各组之间信息混合,实际上(c)就是网络中的一个shuffle unit。

shuffleNet v1中的shuffle unit类似于ResNet中的bottleneck unit(Fig.2(a)),(b)为一个标准的shuffle unit,将1x1的pointwise group convolution后加入channel shuffle,再进行depthwise convolution,最后再进行一次pointwise group convolution,需要注意的是,在第二个pointwise group convolution后,不添加ReLu层,而是在Add之后才添加,我认为这是防止信息损失过量。(c)中为步长为2的shuffle unit,可用于降采样。 通过使用depthwise convolution以及pointwise group convolution,shuffleNet可以在一定计算资源限制得情况下,竟可能的增加通道信息,提高准确率。

shuffleNet v1 v2笔记_第1张图片

论文中的实验结果显示,在其他网络中,准确率随着组数group增大而提高到一定程度后,准确率开始下降,这可以说明,组数过多导致组内信息太少,丢失精度。而对于shuffleNet来说,在小网络中,组数越多,反而相较其他网络来说,准确率越高。

 

 

ShuffleNet v2

论文中提出了FLOPs不能作为衡量目标检测模型运行速度的标准,因为MAC(Memory access cost)也是影响模型运行速度的一大因素。

论文地址:https://arxiv.org/abs/1807.11164

shuffleNet v1 v2笔记_第2张图片

上图可以看出,相同FLOPs的模型,速度上可能会差别很大。

由此,作者通过实验得出4个设计小模型的准则:

 

(1)卷积操作时,输入输出采用相同通道数可以降低MAC。

以1*1的卷积操作为例,hw为输入特征图,c1和c2为输入输出通道数,B为FLOPs

MAC=hw(c_{1}+c_{2})+c_{1}c_{2}

B=hwc_{1}c_{2}

通过均值不等式可以得出,MAC\geq 2\sqrt{hwB}+\frac{B}{hw}

\sqrt{c_{1}^{2}-c_{2}^{2}} = 0时,即c_{1}=c_{2}时,MAC取得最小值。

 

(2)过多的组,会导致MAC增加

通过公式转换可以得出:

B=hwc_{1}c_{2}/g

MAC=hw(c_{1}+c_{2})+c_{1}c_{2}/g

MAC=hwc_{1}+Bg/c_{1}+B/hw

当FLOPs、通道数、特征图不变时,组数g的增加,会增加MAC。

 

(3)分支数量过少,模型速度越快

shuffleNet v1 v2笔记_第3张图片

(4)element-wise操作导致速度的消耗,远比FLOPs上体现的多。

shuffleNet v1 v2笔记_第4张图片

 

根据以上四点准则,作者在shuffleNet V1的基础上提出了修改。

shuffleNet v1 v2笔记_第5张图片

Fig.3 (a)(b)为shuffleNet V1中的结构,(c)(d)中为shuffleNet V2中的结构。

具体结构如下表:

shuffleNet v1 v2笔记_第6张图片

通过Github上非官方提供的代码,正在尝试使用shuffleNet V2 + SSD进行目标检测,暂时发现准确率高于mobileNet V2,性能方面还需要进一步改善,正在尝试使用模型剪枝。

你可能感兴趣的:(深度学习)