论文笔记: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 2 C                             k 2 C                                                               k                                     2                                              C                                          k^2C                           k2C                                 k                  2                        C                     k2C              k2C vs                                                     2                                     H                                     W                                     C                                           2 H W C                             2 H W C                                                  2                                  H                                  W                                  C                                          2HWC                           2HWC                           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                                                                             k 2 ∗ h ∗ w ∗ c i n ∗ c o u t g r o u p s                               g r o u p s k 2 ∗ h ∗ w ∗ c i n ​ ∗ c o u t ​ ​                                                                                                    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}                              groupsk2∗h∗w∗cin​∗cout​​                                                     k                        2                                                  h                                          w                                                   c                                i                        n                                                                   c                                o                        u                        t                                                   g                     r                     o                     u                     p                     s                                      groupsk2hwcincout               groupsk2hwcincout
    • 在对比普通卷积的乘法次数:
                                                                              k                                                         ′                                           2                                                                 ∗                                     h                                     ∗                                     w                                     ∗                                                     c                                                         i                                           n                                                                 ∗                                                     c                                                         o                                           u                                           t                                                                             k ′ 2 ∗ h ∗ w ∗ c i n ∗ c o u t                               k ′ 2 ∗ h ∗ w ∗ c i n ​ ∗ c o u t ​                                                                     k                                                       ′                                           2                                                                ∗                                     h                                     ∗                                     w                                     ∗                                                   c                                                       i                                           n                                                                ∗                                                   c                                                       o                                           u                                           t                                                                         k'^2 * h * w * c_{in} * c_{out}                              k′2∗h∗w∗cin​∗cout​                                     k                                                 2                                                  h                                    w                                            c                            i                     n                                                          c                            o                     u                     t                                      k2hwcincout               k2hwcincout
    • 二者相除,比例为                                                                 k                                     2                                                 /                                     g                                     r                                     o                                     u                                     p                                     s                                     ∗                                                 k                                                     ′                                           2                                                                     k 2 / g r o u p s ∗ k ′ 2                             k 2 / g r o u p s ∗ k ′ 2                                                               k                                     2                                              /                                  g                                  r                                  o                                  u                                  p                                  s                                  ∗                                               k                                                   ′                                        2                                                                   k^2 / groups * k'^2                           k2/groups∗k′2                                 k                  2                        /                  g                  r                  o                  u                  p                  s                                          k                                               2                                  k2/groupsk2              k2/groupsk2。如果用可分离卷积,一般k取3或5,而                                                                 k                                     ′                                                       k ′                             k ′                                                               k                                     ′                                                      k'                           k′                                 k                                             k              k一般取1,groups一般等于输入Feature Map的大小,比如128,256,这就导致这两个卷积的计算量严重不平衡
    • 因此可以减少group的个数,或者增加                                                     b                                     a                                     s                                     e                                     =                                                 c                                                     i                                           n                                                               /                                     g                                     r                                     o                                     u                                     p                                           b a s e = c i n / g r o u p                             b a s e = c i n ​ / g r o u p                                                  b                                  a                                  s                                  e                                  =                                               c                                                   i                                        n                                                           /                                  g                                  r                                  o                                  u                                  p                                          base = c_{in}/group                           base=cin​/group                           b                  a                  s                  e                  =                        c                          i                     n                               /                  g                  r                  o                  u                  p                     base=cin/group              base=cin/group这个值(对于可分离卷积来说,                                                                 c                                                     i                                           n                                                               =                                     g                                     r                                     o                                     u                                     p                                     ,                                     b                                     a                                     s                                     e                                     =                                     1                                           c i n = g r o u p , b a s e = 1                             c i n ​ = g r o u p , b a s e = 1                                                               c                                                   i                                        n                                                           =                                  g                                  r                                  o                                  u                                  p                                  ,                                  b                                  a                                  s                                  e                                  =                                  1                                          c_{in} = group, base = 1                           cin​=group,base=1                                 c                          i                     n                               =                  g                  r                  o                  u                  p                  ,                  b                  a                  s                  e                  =                  1                     cin=group,base=1              cin=group,base=1),这样就可以实现上述的要求1
    • base增大,意味着卷积核容量加大,表达能力提升,也可以降低                                                                 c                                                     i                                           n                                                                     c i n                             c i n ​                                                               c                                                   i                                        n                                                                   c_{in}                           cin​                                 c                          i                     n                                  cin              cin,也可以实现上述要求2。固定Base,改变group个数的卷积,我们称之为Variable Group Convolution
  • 基于Variable Group Conv. 本文针对性地设计了2种Block,如Fig. 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,避免频繁的内存交换
      在这里插入图片描述
               
                                       
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值