论文笔记:VarGNet: Variable Group Convolutional Neural Network for Efficient Embedded Computing

中心思想:

  • 固定group convolution中每个group的channel个数,而不是遵循现有的做法:固定group的个数
  • 各层之间的计算策略由于group channel个数的固定,使得模型在硬件端更容易优化

设计满足嵌入式端上网络的几种思路:两个方向

  • 设计出算力需求少的网络(减少乘加次数,MAdds),如shufflenet v1/v2, mobilenet v1/v2
  • 从FPGA(硬件)、编译器方面入手,优化卷积等操作的计算方式
    但是上述的两个发展方向,往往是背道而驰的。如果单纯降低MAdds,整体的latency就会下降;而如果单独对编译器/硬件进行优化,则使得网络的优化比较局限(因为硬件优化往往是针对性的)
  • 这里提出的VarGNet则从两方面同时入手:最大程度地匹配数据的layout,从而使得一次卷积操作中,所需的数据都在on-chip memory中,降低on-chip/ off-chip memory的通信时间开销

Vargnet的改进思路

  • 一个现象:若在网络中各层的计算量是平衡的,则网络更容易优化
  • 基于MobileNet中的可分离卷积,本文提出了固定每个group中的通道数,自动调整group个数的vargnet
  • 这样做的优势有2方面:
    • 便于编译器优化(因为每组卷积操作具有更相似的数据layout)
    • MobileNet中,可分离卷积实际上group个数就等于输入channel,与之相比,variable group convolution(指的是固定每个group中的channel个数的方式)能够增大网络容量,从而使得整体的网络channel个数更少,缓解了off-chip memory的通信成本
    • 对于MobileNet V2中的Inverted Residual Block,先将输入的通道数通过pointwise卷积放大了6倍,然后进行depthwise。由于计算模式有限,这样的操作对编译器不友好。因此先将输入通道为C的feature map通过group based conv将通道数变成2C,然后再通过depthwise变成C
  • 具体思路来自于卷积操作中的2个重要性质:
    • 卷积核在整个卷积过程中会被多次使用(Feature Map中的每个坐标都需要),而Feature Map只会用一次
    • 卷积核的内存占用远比Feature Map小。一次卷积操作中,内存占用分别为: k 2 C k^2C k2C vs 2 H W C 2HWC 2HWC(因为要存结果)
  • 因此要求:1. 各层的计算强度尽可能均衡,降低总延时;2. 输入Feature Map尽可能少(减少内存的调度)
    • 对于1. 可以增加可分离卷积中depthwise的比例
    • 对于2. 可以减少Feature Map的channel个数
  • 可变组卷积:
    • 基于上述的2点要求,我们可以回顾Group卷积所需的乘法次数,参考Convolution & DepthWise Conv:
      k 2 ∗ h ∗ w ∗ c i n ∗ c o u t g r o u p s \frac{k^2 * h * w * c_{in} * c_{out}}{groups} groupsk2hwcincout
    • 在对比普通卷积的乘法次数:
      k ′ 2 ∗ h ∗ w ∗ c i n ∗ c o u t k'^2 * h * w * c_{in} * c_{out} k2hwcincout
    • 二者相除,比例为 k 2 / g r o u p s ∗ k ′ 2 k^2 / groups * k'^2 k2/groupsk2。如果用可分离卷积,一般k取3或5,而 k ′ k' k一般取1,groups一般等于输入Feature Map的大小,比如128,256,这就导致这两个卷积的计算量严重不平衡
    • 因此可以减少group的个数,或者增加 b a s e = c i n / g r o u p base = c_{in}/group base=cin/group这个值(对于可分离卷积来说, c i n = g r o u p , b a s e = 1 c_{in} = group, base = 1 cin=group,base=1),这样就可以实现上述的要求1
    • base增大,意味着卷积核容量加大,表达能力提升,也可以降低 c i n c_{in} cin,也可以实现上述要求2。固定Base,改变group个数的卷积,我们称之为Variable Group Convolution
  • 基于Variable Group Conv. 本文针对性地设计了2种Block,如Fig. 1所示
    论文笔记:VarGNet: Variable Group Convolutional Neural Network for Efficient Embedded Computing_第1张图片
    • 对于Normal Block而言,这样设计的好处是,当channel数变大的时候,也可以同时Load一个depthwise(variable group conv)和一个pointwise的kernel,减少片上内存与片下内存的交换频次
    • 对于Downdsample BLock而言也是类似
    • Fig. 2为一个feature map中的一个点(k * k * c),经过Normal BLock的计算流程。总的来说优势在于最频繁使用的卷积核一只放在SRAM中,而且中间的计算结果(第一个Variable的值也在),有效地利用SRAM,避免频繁的内存交换
      论文笔记:VarGNet: Variable Group Convolutional Neural Network for Efficient Embedded Computing_第2张图片

你可能感兴趣的:(论文笔记)