分享一篇ECCV 2020 的论文:Spatially Adaptive Inference with Stochastic Feature Sampling and Interpolation

论文:

https://arxiv.org/abs/2003.08866

代码:

https://github.com/zdaxie/SpatiallyAdaptiveInference-Detection

0.动机

使用CNN模型解决多种计算机任务时,往往通过增加网络的计算量来提高模型性能,性能的提高以庞大的计算量为代价,一定程度上妨碍了模型在资源受限的设备上部署。因此有很多学者着重于研究减少CNN的计算量,同时保持高性能。

在推理时,只对输入的部分特征进行计算是一种减少网络计算量有效的方法。由于feature map具有一定的稀疏性,可以通过预测feature map中值为0的坐标,只计算值不为0处的feature map的值以减少计算量。

相比于上面的方法,作者提出了一种更高效的方法:将要计算的feature map看作随机场(probability field),基于它们的概率随机采样feature map位置并计算它们的值,使用插值方法重建feature map其余位置处的值。

1.随机采样-插值模块

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,记作














。将上文提到的随机采样模块中的






重新表示为











,将


























融合形成最终的






,即:

使用融合得到的






计算



















2.将随机采样-插值整合至Residual Block

随机采样-插值模块可以很方便地融合到Residual Block中,一个很直接的想法是对Residual Block中的每个卷积使用采样-插值的模式去实现,如下图中图(c)所示的方法:

作者认为由于conv3是






的卷积,可以让conv2和conv3共用1个mask,即上图中图(b)所示的结构。图(a)中3个卷积共用1个mask,虽然能够减少计算量,但通过实验证明效果不如图(b)中的结构。因此作者使用图(b)的结构将随机采样-插值融合到Residual Block中。

3.实验

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中的关键特征被计算出来,全局特征不会受到太大影响,也不会影响性能。

4.总结

  • 针对feature map存在空间冗余性的特点,设计随机采样-插值模块,并将其应用在CNN的卷积层中,对卷积计算进行稀疏化,达到轻量化网络的效果;

  • 通过实验验证了随机采样-插值模块在多种计算机视觉任务上的性能。

仅用于学习交流!

END

备注:部署

模型压缩与应用部署交流群

模型压缩、网络压缩、神经网络加速、轻量级网络设计、知识蒸馏、应用部署、MNN、NCNN等技术,

若已为CV君其他账号好友请直接私信。

我爱计算机视觉

微信号:aicvml

QQ群:805388940

微博知乎:@我爱计算机视觉

投稿:amos@52cv.net

网站:www.52cv.net

在看,让更多人看到  

一种推理优化新思路,对特征图进行[随机采样-插值]相关推荐

  1. PixelShuffle特征图的上采样的方法

    PixelShuffle是一种上采样方法,可以对缩小后的特征图进行有效的放大.可以替代插值或解卷积的方法实现upscale PixelShuffle PixelShuffle(像素重组)的主要功能是将 ...

  2. FPN:特征图金字塔网络

    1. 论文简介 论文名:Feature Pyramid Networks for Object Detection 论文地址 :FPN 论文作者:Tsung-Yi Lin, Piotr Dollar, ...

  3. FPN(特征图金字塔网络)理论基础与具体实现

    论文地址:Feature Pyramid Networks for Object Detection 项目地址:FPN_pytorch 0x00 前言 我们在做目标检测和超分辨率重建等问题的时候,我们 ...

  4. 卷积神经网络推理特征图可视化查看,附录imagenet类别和编号对应查询表。通过观察法进行深度学习可解释研究

    CNN模型虽然在图像处理上表现出非常良好的性能和准确性,但一直以来都被认为是一个黑盒模型,人们无法了解里面的工作机制. 针对这个问题,研究人员除了从理论层面去寻找解释外,也提出了一些可视化的方法直观地 ...

  5. 【读点论文】Image Style Transfer Using Convolutional Neural Networks(将卷积特征图提取语义信息,融合内容和风格的做法)

    Image Style Transfer Using Convolutional Neural Networks 以不同风格呈现图像的语义内容是一项困难的图像处理任务.可以说,以前的方法的一个主要限制 ...

  6. CNN可视化技术总结(一)--特征图可视化

    导言: 在CV很多方向所谓改进模型,改进网络,都是在按照人的主观思想在改进,常常在说CNN的本质是提取特征,但并不知道它提取了什么特征,哪些区域对于识别真正起作用,也不知道网络是根据什么得出了分类结果 ...

  7. Model Pruning Based on Quantified Similarity of Feature Maps-基于特征图量化相似度的模型修剪

    高精度的CNN模型往往具有巨大的参数,这些参数通常存储在高维张量中. 然而,很少有方法能够计算出存储在高维张量中的参数的冗余信息,这导致缺乏对CNN压缩的理论指导.本文提出了一种在三维张量中发现冗余信 ...

  8. 深度学习实战——模型推理优化(模型压缩与加速)

    忆如完整项目/代码详见github:https://github.com/yiru1225(转载标明出处 勿白嫖 star for projects thanks) 目录 系列文章目录 一.实验思路综 ...

  9. 【总结】Keras+VGG16特征图可视化,帮助你深入理解VGG16

    Keras+VGG16特征图可视化 一.VGG16结构理解 1. 可视化结构图 2. VGGNet各级别网络结构图 3. VGG16网络结构图 二.Keras实现VGG16 代码实现 三.VGG16特 ...

最新文章

  1. 怎么将织梦图集模型编辑器改为文章编辑器?
  2. 深入浅出python机器学习_9.1.5_通过数据预处理提高模型的准确率_MinMaxScaler
  3. 程序员在35-40岁之后真的就是死胡同吗?
  4. MySQL基础之DML语句
  5. ng-repeat part2 - How li ng-repeat=nameF in Ionames{{nameF}}/li is parsed
  6. 软件测试有没有测试大纲文档,系统测试大纲(范例).docx
  7. tablayout支持改变选中文字大小,支持左右滑动,支持viewpager,支持三角可移动指示器...
  8. 用table展示树形结构数据_复习一下数据结构(二)——2.2 树形索引(23树)
  9. Crashing Balloon ZOJ1003
  10. 遗传算法解决车辆路径问题
  11. Unreal Engine UE4虚幻引擎,生成Cubemap(HDR高动态范围贴图)
  12. java is alphabetic_java中的java.lang.Character类 – 方法| 2 - Break易站
  13. linux飞信机器人,linux 使用飞信机器人
  14. 这就是数学的魅力?QWQ
  15. 快速矩阵乘法的研究——下
  16. 服务器中使用Top命令后,参数解释
  17. 我的大学(2001-2005,从文艺青年到2B青年)
  18. 电脑不用,不用电脑,你还会写字吗?
  19. mfp服务器控制中心,固网HP-1008MFP驱动
  20. 无线路由器磊科NW711做WiFi信号中继器

热门文章

  1. sql server链接远程服务器上的csv文件_批量监控联想服务器硬件状态工具
  2. python staticmethod规范_Python Staticmethod可以调用另一个本地方法吗?
  3. esp32找不到com端口_玩转GPIO之ESP32点灯大法(MicroPython版)
  4. opencv python教程-OpenCV4 Python 最新中文版官方教程来了(附下载)
  5. 前大灯是近光灯还是远光灯_大快人心!仙游交警启动监控抓拍滥用远光灯车辆!...
  6. kali安装nessus_漏洞扫描工具Nessus指南
  7. 深度学习attention原理_深度原理学习–Redis集群
  8. 查找树的指定层级_阿里面试,问了B+树,这个回答让我通过了
  9. android compress函数,Linux Kernel(Android) 加密算法小结(cipher、compress、digest)
  10. 十进制转化为二进制_使用Windows 10内置计算器,将十进制数快速转换为二进制数,试试...