中心思想:
- 固定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
- 基于上述的2点要求,我们可以回顾Group卷积所需的乘法次数,参考Convolution & DepthWise Conv: