1 移动端神经网络模型思考

1 实时网络

         代表网络有MobileNetV2和ShuffleNetV2

1.1 MobileNetV2

         MobileNetV2引入了两种结构Linear Bottleneck和 Inverted Residual Blocks,既能够去除高维度feature的冗余信息,又能够去除低维度feature的信息坍塌。

与MoblieNetV1的相同点:

  • 都采用了Depth-wise Convolution和Point-wise Convolution组合的方式(Depth-wise Separable Convolution)来提取特征。该操作可以成倍减少时间复杂度和空间复杂度。

与MoblieNetV1的不同点:

  • 在Depth-wise Separable Convolution前面添加一个Point-wise Convolution。通过PW操作升维,在高维特征空间中提取特征。
  • 去掉Depth-wise Separable Convolution后面的ReLU,等价于一个Linear Bottleneck结构。

和ResNet的相同点:

  • 都采用了1×1 -> 3×3 -> 1×1的模式。
  • 都使用了Shortcut操作将输入输出相加。

和ResNet的不同点:

  • ResNet通过标准卷积提取特征,MoblieNetV2通过DW卷积提取特征。
  • ResNet先降维,卷积,再升维,而MoblieNetV2先升维,卷积,再降维(即ResNet是沙漏形,而MobileNetV2是纺锤形)。

1.2 ShuffleNetV2

四个准则

  • G1:通道宽度均衡可以最小化MAC。
  • G2:增加组卷积会增加MAC。
  • G3:网络碎片化降低了并行度。
  • G4:元素操作是不可忽略的。

ShuffleNetV1
         ShuffleNetV1采用了pointwise组卷积和类似bottleneck的结构。另外引入一个channel shuffle操作使得不同组的通道信息流通。
         由上述4个准则可知,pointwise组卷积和bottleneck结构增加MAC,这违反了G1和G2。使用过多的组数违反了G3。逐元素相加违反了G4。
         因此,为了实现较高的模型容量和效率,关键问题是如何保持大量且同样宽的通道,既没有密集卷积也没有太多的分组。

ShuffleNetV2
         在每个单元的开始,输入通道数为c的feature通过channel split分成了2个分支,按照准则G3,一个分支作为identity,另一个分支由3个输入输出通道数相同的卷积组成(满足准则G1)。两个1×1卷积不再是group-wise的了,一部分原因是准则G2,另一部分原因是channel split操作已经分成了两组。卷积后,两个分支concat操作,因此输出通道数和输入通道数保持相同(满足准则G1)。随后引入channel shuffle使得两个分支的通道信息流通。
         值得注意的是,ShuffleNetV2去掉了Add操作,元素操作比如ReLU和depth-wise convolutions只在一个分支中存在。并且3个连续的操作Concat、Channel Shuffle和Channel Split被合并成一个元素操作。按照准则G4,这些改变对精度是有帮助的。
         对于带有下采样的模块,需要稍微修改一下模块,移除掉channel split操作。输出的通道数增加一倍。

2 实时检测

         代表网络有Light-Head R-CNN和ThunderNet。这两个网络主要是two-stage的检测网络。

2.1 Light-Head R-CNN

         使用薄的feature map和简单的R-CNN子网络(池化和单个全连接组成),使得网络的head尽可能的轻。
Basic feature extractor
         对于L设置来说,用ResNet来提取特征,对于S设置来说,用Xception-like来提取特征。
R-CNN subnet
         采用一个2048维的全连接层,后面接2个并行的全连接层来预测分类和回归。

2.2 ThunderNet

         ThunderNet的优化目标是二阶段检测器中计算开销大的结构。在backbone部分,设计了轻量级网络SNet,在detection部分,借鉴Light-Head R-CNN的思路,并进一步压缩RPN和R-CNN子网络。为了避免性能的衰退,设计了2个高效的结构CEM和SAM来改善性能。

3 实时分割

         代表网络有BiSeNet和DFANet

3.1 BiSeNet

实时语义分割主要有三种做法来加速模型:

  • 通过crop或者resize限制输入尺寸,减少计算复杂度。但是这种方法会导致空间细节的丢失。
  • 剪枝网络浅层的通道。但是这种方法会减少空间容量。
  • drop模型的最后阶段。但是这种方法丢弃了最后阶段的下采样,导致感受野不足以覆盖大的目标。
    Bilateral Segmentation Network
             基于对过去工作的分析,提出了Bilateral Segmentation Network,引入了2个组件Spatial Path和Context Path,分别用来解决空间信息的丢失和感受野的不足。为了在速度不降低的情况下提升精度,还引入了FFM和ARM结构,分别进行两个分支的融合和精炼预测结果。

3.2 DFANet

实时语义分割的两种方法:

  • 使用多个分支来进行多尺度的特征抽取并且保留图像的空间细节。但是这种方法缺乏对由并行分支结合而成的高级特征的处理,另外,并行分支的特征缺乏信息交流,还有,在高分辨率图像上额外添加分支对速度有影响。
  • 使用空间金字塔池化(SPP)模块来处理高级特征。但是这种方法非常耗时。

         受到以上两种方法的启发,作者提出对网络输出进行上采样,然后用另一个子网络对特征进行精炼。这种做法不同于SPP模块,feature maps在更大的分辨率上进行精炼同时能够学到亚像素的细节。但是这种方法,随着整个结构深度的增长,高维度特征和感受野通常会出现精度损失。
         为了进一步提升精度,作者提出stage-level的方法为语义理解提供低级特征和空间信息。因为所有的子网络有相似的结构,stage-level方法通过conat相同分辨率的层精炼产生多阶段的上下文信息。

    原文作者:深度学习模型优化
    原文地址: https://www.jianshu.com/p/16b47b6732aa
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞