作者 | Bbuf

编辑 | 杨晓凡

下面要介绍的论文发于2019,题为「Localization-aware Channel Pruning for Object Detection」

axriv地址为:https://arxiv.org/abs/1911.02237。

通道剪枝是深层模型压缩的重要方法之一。现有的大多数通道剪枝方法主要集中在分类任务上,很少有人对目标检测的通道剪枝进行系统的研究。目标检测和分类不同,因为它不仅需要语义信息还需要定位信息。

这篇论文基于先进的分类模型剪枝算法DCP(Zhuang等人在2018发表),提出了一种定位感知辅助网络以找出具有分类和回归关键信息的通道,以便在进行通道剪枝后执行目标检测,从而节约大量的参数和计算资源。为了捕获定位信息,论文首先设计了具有上下文感知的ROIAlign层的辅助网络,该层可以通过像素对齐获得默认框的精确定位信息,并在剪枝浅层时扩大默认框的感受野。然后,继续构造了一种用于目标检测任务的损失函数,倾向于保留分类和回归关键信息的通道。大量的实验证明了论文提出的方法的有效性。

在MSCOCO上,基于ResNet-50的SSD剪枝掉了70%的参数,而精度下降幅度不大,在相同剪枝幅度下表现出了SOAT性能。

研究背景

从AlexNet赢得ImageNet比赛:ILSVRC以来,卷积神经网络(CNN)已广泛应用于各种计算机视觉任务如图像分类,目标检测,语义分割等。在这些领域,基于深度学习的方法都实现了最先进的性能。

但是,深层模型通常具有大量参数,不仅存储困难并且需要的计算资源过重,因此难以在资源受限的设备(如移动端)上部署。为了使CNN在资源受限的设备上可用,有很多关于模型压缩的研究,其目的都是在不显著减少性能的情况下减少模型冗余。

其中通道剪枝是重要的方法之一,其核心思想就是剪掉冗余通道来降低模型大小,并且无需特殊软硬件即可实现快速推理。为了确定要保留的通道,现有的基于重建方法通常将原始模型和剪枝后的模型的特征图之间的重建误差最小化。但是,由于中间特征图和最终输出的性能之间存在差距,因此重构得好的特征图可能并不是最佳的。

为了减少特征图间的重构误差,可能会错误的保留信息冗余通道。为了找到模型中起关键作用的通道,DCP引入了一个可以监督模型最终性能的的判别感知损失函数。它通过一个对整个特征图起作用的全连接层构建了判别感知损失函数。但是DCP算法的损失函数是为分类任务设计的。由于目标检测网络使用分类网络作为骨干网络,因此使用DCP训练目标检测网络的一种常见做法就是对在分类数据上训练的模型剪枝后再用作检测的特征提取网络。

但是,这两个任务所需要的信息并不完全相同。分类任务需要强大的语义信息,而目标检测任务不仅需要语义信息,还需要定位信息。因此,由于分类和目标检测任务的特征学习任务不匹配,现有的训练方案可能不是最佳的。

基于此,这篇论文提出了一种定位感知通道剪枝(LCP)方法,该方法直接进行通道剪枝以进行目标检测。在论文中,提出了一种用于目标检测任务的可感知定位信息的辅助网络。首先,论文设计了一个具有上下文感知ROIAlign层的辅助网络,该层可以通过像素对齐获得默认框的精确定位信息,并在对浅层进行剪枝时扩大默认框的感受野。然后,论文构造了目标检测任务的损失函数,该函数倾向于保留包含分类和回归关键信息的通道。

方法

论文提出的辅助网络主要由两个部分组成。首先,上下文ROIAlign层旨在提取框的特征。然后,针对目标检测任务设计了一个可以保留关键通道的损失函数。辅助网络搭建好后,使用辅助网络的定位感知损失函数进行通道剪枝。Figure1展示了论文的整体框架。

上下文 ROIAlign 层

对于目标检测任务,如果直接在整个特征图上预测边界框,则会有大量的参数和不必要的噪声。因此,提取感兴趣区域(RoI)的特征很重要,可以更好的用于分类和回归。要获得精确的定位信息并找出对于分类和回归最关键的通道,ROIAlign层是一个很好选择,它可以正确地将提取的特征和输入对齐。ROAlign层使用双线性插值法计算每个ROI四个规定采样点的真实值,随后对这四个点使用平均或最大池化。这个过程如Figure2所示:

但是从Figure3我们可以看到,检测器生成的默认框(Anchor)并不总是完全覆盖到目标,默认框有时候会大于标注(GT)框,有时候会小于GT框。因此,如果仅仅提取默认框的特征(尤其是在剪枝阶段),则感受野很可能不够。为了解决这个问题,论文提出了上下文ROIAlign层,引入了更多的语义信息。

为了更好的描述算法,需要先给一些定义。对于一个训练实例, 代表GT框A的坐标, 表示和A匹配的默认框B的坐标。同时,用 F 代表特征图 代表 区域的特征。 操作代表ROIAlign层。首先,利用公式(1)计算A和B的交并比(IOU):

如果 大于预先设定的阈值,则B是正样本,反之B是负样本。如果B是正样本,我们计算包含A和B的最小的凸多边形C(这个思路和GIoU Loss的思路一致),如下:

其中是C的坐标。最后上下文ROIAlign层的输出可以表示为:

现在,就可以获得默认框B的精确特征了,如Figure4所示。

通道裁剪损失的构建

构建上下文ROIAlign层之后,就需要构建目标检测任务的损失函数了,以便使用辅助网络损失函数的梯度进行模型剪枝。在通道剪枝阶段,我们使用交叉熵和CVPR 2019的GIoU Loss来构建辅助网络的损失。将GIoU用作框回归损失是可解释的。它不仅考虑了重叠区域还考虑了非重叠区域,这更好的反映了框的重叠信息。两个任意形状的A和B的GIoU定义为:

其中 , 和 可以用等式(1)到等式(5)计算出来。Figure5是GIoU的示意图。

然后,使用 表示第i个预测框和GT框的GIoU值, 表示第 个预测框的交叉熵。那么,在剪枝阶段, 表示分类损失, 表示回归损失, 表示辅助网络的感知定位损失。最后在剪枝阶段的正样本损失被定义为下面的等式:

其中m是一个常系数。

定位感知的通道剪枝

构建了辅助网络和定位感知损失后,就可以对网络进行逐层剪枝了。整个模型的剪枝算法如Algorithm1所示。为了更好的描述本文的通道剪枝算法,先给出一些定义。考虑一个有L层的CNN网络,现在开始修建第l层,W表示网络的第l+1层的卷积核,*代表卷积操作算子。进一步使用代表原始网络模型第l+1层的输出特征图。这里N,H,Y分别代表输出特征图的通道数和长宽。最后,使用 和 代表剪枝网络的分类和回归损失。为了找到对网络最有效的通道,应该对辅助网络和剪枝网络进行微调,并将微调后的损失定义为它们的损失之和,即:

为了最大程度的减少一个层的重建误差,论文引入了和DCP算法类似的重建损失,可以将其定义为原始模型和剪枝后的模型之间的特征图的欧几里得距离。

其中 , C 代表选择的通道, 代表以 为索引的子矩阵。考虑到重建误差,辅助网络的定位感知损失,可以指定通道剪枝的规则如下:

其中 是一个常量, 是选择的通道数量。直接优化等式(13)是一个NP难问题。论文仍然沿用DCP算法中的贪心策略,通过考虑等式(13)的梯度来执行通道剪枝。具体来说,第k个通道的重要性被定义为:

然后保留前i个最重要的通道,移除剩余的通道。在这之后,被选择的通道进一步使用SGD算法来优化。 被更新为:

其中 代表学习率。在我们更新了 之后,对单个网络层的剪枝就完成了。

实验

论文在2D目标检测算法SSD上评估定位感知通道剪枝方法的性能。包括ThiNet和DCP在内的几种最先进的方法作为基准线。为了验证该方法的有效性,论文分别使用了VGG和ResNet来提取特征。

数据集和评判标准

所有的Baseline方法都在PASCAL VOC2007和2012数据集上报告结果。论文使用VOC2007和VOC2012的训练验证集的并集作为训练集,其中包含16551张图像和20类标注好目标框的目标组成。为了确认论文方法的有效性,这里首先和基于VGG-16的ThiNet做比较,因为DCP论文的作者没有发布VGG16的版本。在这之后,将本文的方法和基于ResNet-50的ThiNet做比较。然后在PASCAL VOC上进行了消融实验。为了更充分的证明这个方法的有效性,还在MSCOCO 2017数据集上进行了实验。使用mAP值来评价模型表现。

实现细节

论文的实验基于输入大小为300*300的SSD。将VGGNet和ResNet用作实验的特征提取网络。对于ThiNet,将其实现为支持SSD目标检测。三种方法为每一层剪枝相同数量的通道。下面详细介绍一下其它常见参数。

对于VGGNet,使用不带BN的VGG-16,并从conv1-1到conv5-2剪枝SSD。每次剪枝网络层时,都会对网络进行10个epoch的微调,学习率从0.001开始,并且在第5个epoch衰减10倍。在模型剪枝完成后,会对模型重新训练60k次,同时学习率从0.0005开始,并且在30k次和45k次衰减10倍。对于ResNet-50,对conv1-x到conv4-x进行剪枝。每次剪枝后进行15个epoch的微调,初始学习率设置为0.001并且在第5和第10个epoch衰减10倍。剪枝完成后,会对模型重新训练120k次,学习率从0.001开始并且在80k次和100k次的之后衰减10倍。对于辅助损失,m的值设为50。

在PASCAL VOC上的实验结果

在PASCAL VOC上,本文将VGG-16从conv1-1剪枝到conv5-3,压缩率为0.75,速度快4倍。结果如Table1所示。

从结果可以看出,论文的方法在相同的加速比下达到了最佳性能。像ThiNet这样基于重构的方法准确率下降了很多。但对于LCP,目标检测的性能不会有太大的下降。即证明了本文的算法保留了真正有助于提高最终性能的通道。然后继续在ResNet-50上进行了实验,结果如Table2所示。

从结果来看,无论是修剪75%还是修剪50%,LCP都能获得最佳性能,这进一步证明本方法可以保留包含分类和回归的关键通道信息。此外,当修剪比率为0.7时,ThiNet优于DCP,这表明在分类模型上剪枝进行目标检测不是最佳方法。

在MS COCO上的实验结果

在MS COCO上的实验结果如Table3和Table4所示,进一步证明本方法的有效性。

消融研究

梯度研究

在这一节中,将VGG-16从conv1-1到conv5-3进行剪枝,压缩比为0.75,且在PASCAL VOC数据集上进行测试。然后计算剪枝过程中三种损失所产生的梯度的百分比,如Figure6所示。

可以看出回归损失的梯度在剪枝过程中起着重要作用,这反映了定位信息是必要的。重建误差所产生的的梯度仅仅在浅层中起作用,而定位感知损失产生的梯度在每一层的通道剪枝过程中都有贡献。

组成研究

这一节中,为了验证论文提出的ROIAlign的重要性和上下文感知ROIAlign层的重要性,进行了消融实验,结果如Table5所示,证明了论文提出的这两个点的有效性。

损失函数分析

为了探索几个损失函数在剪枝过程中的重要性,也做了消融研究,并在Table6中报告了实验结果。

预测可视化

论文中提出的方法将基于VGG-16的SSD剪枝掉了75%的参数。

从Figure7中可以发现,剪枝后的模型和原始模型预测很接近,而ThiNet的预测却差得很多。实验证明,本文的方法为边界框回归保留了更多有效定位信息。

结论

论文提出了一种定位感知的辅助网络,该网络可以让我们直接进行通道修剪以进行目标检测。首先论文设计了具有上下文感知的ROIAlign层的辅助网络,该层可以通过像素对齐获得默认框的精准位置信息,并在剪枝网络浅层时扩大默认框的感受野。然后,论文构造了一个用于目标检测的损失函数,该函数倾向于保留包含分类和回归关键信息的通道。

可视化结果显示该方法保留了更多的定位信息,而且大量的实验证明了该方法的有效性。这种方法可以被应用到多种目标检测算法中以降低计算量,提高模型推理的速度。

检测多边形是否重叠_只要保留定位感知通道,目标检测模型也能剪枝70%参数相关推荐

  1. yolov3为什么对大目标检测不好_从YOLOv1到YOLOv3,目标检测的进化之路

    引言:如今基于深度学习的目标检测已经逐渐成为自动驾驶,视频监控,机械加工,智能机器人等领域的核心技术,而现存的大多数精度高的目标检测算法,速度较慢,无法适应工业界对于目标检测实时性的需求,这时YOLO ...

  2. python实现目标识别眼镜_用Python快速实现YOLO目标检测

    文章也同步更新到微信公众号:R语言和Python学堂想获取本文完整代码和数据的下载链接,可关注微信公众号"R语言和Python学堂",并回复发文日期"20181223&q ...

  3. 机器学习_深度学习毕设题目汇总——目标检测B

    下面是该类的一些题目: 题目 典型恶劣天气条件下高铁周界入侵目标检测 图模型融合时空特征的视觉显著性目标检测算法研究 基于SAR图像的舰船目标检测方法研究 基于三维点云分析的智能汽车目标检测方法研究 ...

  4. CVPR2020 | 阿里结构感知3D目标检测,KITTI BEV 排行榜第一!

    本文转载自机器之心. 阿里巴巴达摩院在自动驾驶 3D 物体检测方面又有新成果发布.近日,计算机视觉顶会 CVPR 2020 接收论文结果发布,达摩院一篇名为<Structure Aware Si ...

  5. mask rcnn属于dnn么_基于OpenCV DNN的 MaskRCNN 目标检测与实例分割

    这里主要记录基于 OpenCV 4.x DNN 模块和 TensorFlow MaskRCNN 开源模型的目标检测与实例分割 的实现. MaskRCNN 不仅可以检测图片或视频帧中的物体边界框,还可以 ...

  6. pytorch 对抗样本_【天池大赛】通用目标检测的对抗攻击方法一览

    目标检测对抗攻击 赛题:1000张图,在图上贴补丁,最多不超过10个,导致检测框失效就算得分. 比赛链接:https://tianchi.aliyun.com/competition/entrance ...

  7. tensorflow遥感图像分类_在线讲座 | 高分辨率遥感图像目标检测和场景分类研究进展...

    近年来,深度学习技术驱动的高分辨率遥感图像目标检测和场景分类取得了重大研究进展.由于深度学习的快速发展,导致相关研究进展很难被跟进,特别是对于刚踏入该领域的研究者而言.● 该领域的研究还面临哪些挑战和 ...

  8. 目标检测扩(六)一篇文章彻底搞懂目标检测算法中的评估指标计算方法(IoU(交并比)、Precision(精确度)、Recall(召回率)、AP(平均正确率)、mAP(平均类别AP) )

    ​ 基本在目标检测算法中会碰到一些评估指标.常见的指标参数有:IoU(交并比).Precision(精确度).Recall(召回率).AP(平均正确率).mAP(平均类别AP)等.这些评估指标是在评估 ...

  9. IDA-3D:基于立体视觉的深度感知3D目标检测网络(CVPR2020)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 标题:IDA-3D: Instance-Depth-Aware 3D Object Detection ...

最新文章

  1. 三星台积电大笑 LG弃自研CPU英特尔代工遭重创
  2. 机器学习 数据量不足问题----1 做好特征工程 2 不要用太多的特征 3 做好交叉验证 使用线性svm...
  3. python基础第三章选择结构答案-python3 学习笔记(二)选择结构、循环结构
  4. protobuf在go中的应用
  5. 04_NoSQL数据库之Redis数据库:set类型和zset类型
  6. IOS仿微信朋友圈的日期处理
  7. JAVA简单的SWING及AWT
  8. MSComm控件过程中内存溢出和GetOneDimSize出错的问题
  9. oracle中decode的用法(例子)
  10. 《Java并发编程实战》【第四部分 高级主题】
  11. 《Java核心技术 卷12》读书笔记
  12. GooFlow入门使用
  13. centeros 下载及安装
  14. 百胜中国供应链管理中心正式开工落户上海嘉定;百度发布第六代量产无人车 | 美通企业日报...
  15. WebView 截取长图
  16. 实验五 FBG团队亮相
  17. 深度学习 GAN生成对抗网络-1010格式数据生成简单案例
  18. 解决谷歌浏览器切后台会停止游戏
  19. 【通讯术语】VoLTE
  20. 【大数据处理技术】实验10

热门文章

  1. (1)封装 (2)static关键字 (3)继承
  2. 500 Internal Server Error
  3. oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)
  4. POJ 3415 (后缀数组)
  5. 分享 ASP.NET WebForm 另外一种开发方式,逃离服务器控件
  6. 对step文件进行信息抽取算法
  7. ABP应用层——参数有效性验证
  8. 实验三 密码破解技术 201521410010
  9. 二十六. Python基础(26)--类的内置特殊属性和方法
  10. 51nod 1435 位数阶乘