一种推理优化新思路,对特征图进行[随机采样-插值]
使用CNN模型解决多种计算机任务时,往往通过增加网络的计算量来提高模型性能,性能的提高以庞大的计算量为代价,一定程度上妨碍了模型在资源受限的设备上部署。因此有很多学者着重于研究减少CNN的计算量,同时保持高性能。
在推理时,只对输入的部分特征进行计算是一种减少网络计算量有效的方法。由于feature map具有一定的稀疏性,可以通过预测feature map中值为0的坐标,只计算值不为0处的feature map的值以减少计算量。
相比于上面的方法,作者提出了一种更高效的方法:将要计算的feature map看作随机场(probability field),基于它们的概率随机采样feature map位置并计算它们的值,使用插值方法重建feature map其余位置处的值。
1.1 总体结构
设CNN中一个卷积层的输入feature map为,输出feature map为,可用如下公式表示卷积操作:
上式中的和分别表示feature map的高度和宽度,和分别表示输入feature map和输出feature map的通道数,表示权重;,表示feature map中的元素在空间上的坐标集合;用于构建进行卷积操作的窗口,比如对于的卷积,。
作者认为feature map在空间上存在冗余性,feature map中某个特定位置的值可以使用周围的点插值得到,因此在传统卷积中,通过卷积得到feature map中的所有值是一种浪费计算资源的做法。
作者提出了如下图所示的方法代替传统的卷积操作:
采样模块(sampling module)产生一个mask,表示为。在网络推理时,mask是二值的矩阵,值为1表示该位置处的feature map的值通过卷积计算得到,从而得到一个稀疏的feature map,记作,表示如下:
mask中值为0的点表示该位置处feature map的值由通过插值模块(interpolation module)得到,插值模块输出的中的值,有通过正常的卷积运算的得到的,还包含通过插值得到的,即:
若mask矩阵足够稀疏,导致中大部分元素都是由计算量较小的插值方法得到,使用上图中的模块替代CNN中的传统卷积能减少计算量。
1.2 随机采样模块
由于二值化的mask矩阵不可微,不能使用反向传播方法进行训练。因此在训练时使用如下公式表示:
在训练时,通过1个的卷积层和softmax操作得到。表示噪声,服从标准Gumbel分布。
表示温度参数,当接近0时,的值接近二值化。在训练过程中,的值会逐渐衰减,即,其中表示初始值,表示衰减系数,表示迭代次数。在训练过程中,逐渐接近0,逐渐接近于“非0即1”的状态,便于推理过程中使用。
由于在训练时不是二值化的矩阵,因此在训练时,使用下面的公式计算:
使用下面的公式计算:
上面2个公式中的表示元素相乘。
为了保证的稀疏性,在训练时构造如下损失函数:
上式中的表示第个采样-插值模块,表示1范数。
最终的损失函数为:
上式中的表示用于特定视觉任务的损失函数,用于控制不同类型损失函数的重要性。
1.3 插值模块
使用feature map中通过卷积计算得到的元素(即中的元素),计算中值为0的位置对应的feature map元素值,对于feature map中位置处的值,计算公式如下:
上式中的,是一个常数,值为,上述公式的含义是使用feature map中采样元素加权平均来计算feature map中未采样元素的值。为了进一步减少插值模块的计算量,只使用位置周围的采样元素的feature map值进行插值运算,即
上式中
可以使用多种方式选取权重值,作者给出了3种:
RBF Kernel
径向基函数(radial basis function, RBF)定义为:
上式中的和分别代表2个点的位置,是可学习参数。使用RBF Kernel得到的权重计算未采样点时,未采样点的值更多地由靠近它的采样点决定。
卷积
可以使用学习到的卷积核作为,为避免中分母为0,使用学习到的卷积核的绝对值。
平均池化
平均池化可看作一种特殊的卷积,对周围点赋予同样的权重。
作者默认使用RBF Kernel来确定的值。
1.4 Grid Prior
在未采样点周围区间内,可能不存在任何采样点,从而无法进行插值计算。为解决这一问题,定义一个步长为的等间距采样mask,记作。将上文提到的随机采样模块中的重新表示为,将和融合形成最终的,即:
使用融合得到的计算和。
随机采样-插值模块可以很方便地融合到Residual Block中,一个很直接的想法是对Residual Block中的每个卷积使用采样-插值的模式去实现,如下图中图(c)所示的方法:
作者认为由于conv3是的卷积,可以让conv2和conv3共用1个mask,即上图中图(b)所示的结构。图(a)中3个卷积共用1个mask,虽然能够减少计算量,但通过实验证明效果不如图(b)中的结构。因此作者使用图(b)的结构将随机采样-插值融合到Residual Block中。
3.1 目标检测任务
在COCO2017训练集上训练,使用带有FPN的Faster R-CNN作为检测器,Backbone为在ImageNet数据集上预训练过的ResNet-101,将ResNet-101的conv3到conv5中所有的卷积替换为deformable卷积,使用mmdetection框架实现,在8个GPU上使用SGD方法训练。
将采样-插值模块整合到Residual Block中,在实现时,令插值时的窗口尺寸,grid prior的步长,使用RBF kernel确定的值,RBF kernel中的初始化为3,并通过学习得到最终的值。
在COCO2017验证集上测试,结果如下表所示:
为了比较多种网络轻量化方法的差别,在上面的表格中从上到下列举了多种方法,它们依次是:
使用计算量较小的Backbone:使用ResNet-50作为Backbone,将输入图片resize成短边为1000个像素; Uniform Sampling:仍然使用ResNet-101作为Backbone,但输入图片分辨率依次降低,将输入图片进行resize,使得短边像素个数为{1000,800,600,500},相当于对图片进行降采样操作,从而降低计算量。 Deterministic Gumbel-Softmax:去掉1.2小节所述的公式中的噪声项,其他设置与本文所述方法一致,通过设置的权重控制的稀疏度,从而控制整个网络的计算量,依次设置的权重为{0.2,0.1,0.05,0.02}。 ReLU Gating:使用论文《More is less: A more complicated network with less inference complexity》中的方法。 使用本文中的方法,依次设置的权重为{0.2,0.1,0.05,0.02}。
为形象比较不同方法的性能和计算量,将上表中的内容表示为下图:
从上图中可以看出这篇论文方法的优越性。
3.2 语义分割任务
使用Cityscapes训练集训练网络,使用dilated FPN,Backbone为ResNet-50,使用deformable卷积替换conv3到conv5的所有卷积,分别设置conv4和conv5中卷积的dilation为2和4。基于TorchCV框架实现,在4个GPU上使用SGD方法训练。在训练时使用了数据增强技术,包括random scaling、random cropping和random horizontal flipping。采样模块和插值模块的设置与目标检测任务基本相同。
在Cityscapes验证集上评估结果,如下表所示:
同样是使用Uniform Sampling、Deterministic Gumbel-Softmax和本文中的方法进行比较。在Uniform Sampling方法中,设置输入图片短边像素为{1024,896,736,512}。在Deterministic Gumbel-Softmax和本文的方法中,依次设置的权重为{0.3,0.2,0.1,0.05}。
为形象比较不同方法的性能和计算量,将上表中的内容表示为下图:
从上图中可以看出在语义分割领域,这篇论文的方法依然有着很好的性能。
3.3 图像分类任务
使用ImageNet训练集训练ResNet-34网络,分别设置的权重为0.01和0.015,在ImageNet验证集上测试,和其他同样使用ResNet-34的轻量化网络对比,结果如下表所示:
上表中的最后一行表示不使用插值模块,而是将feature map中未采样的点直接设置为0,从结果上看移除插值模块对性能没有明显影响。作者认为在图像分类任务中,网络更专注提取全局特征,只要feature map中的关键特征被计算出来,全局特征不会受到太大影响,也不会影响性能。
针对feature map存在空间冗余性的特点,设计随机采样-插值模块,并将其应用在CNN的卷积层中,对卷积计算进行稀疏化,达到轻量化网络的效果;
通过实验验证了随机采样-插值模块在多种计算机视觉任务上的性能。
仅用于学习交流!
END
备注:部署
模型压缩与应用部署交流群
模型压缩、网络压缩、神经网络加速、轻量级网络设计、知识蒸馏、应用部署、MNN、NCNN等技术,
若已为CV君其他账号好友请直接私信。
微信号:aicvml
QQ群:805388940
微博知乎:@我爱计算机视觉
投稿:amos@52cv.net
网站:www.52cv.net
在看,让更多人看到