网站首页 > 技术文章 正文
作者 | 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层的辅助网络,该层可以通过像素对齐获得默认框的精准位置信息,并在剪枝网络浅层时扩大默认框的感受野。然后,论文构造了一个用于目标检测的损失函数,该函数倾向于保留包含分类和回归关键信息的通道。
可视化结果显示该方法保留了更多的定位信息,而且大量的实验证明了该方法的有效性。这种方法可以被应用到多种目标检测算法中以降低计算量,提高模型推理的速度。
- 上一篇: 用动态数据修剪加速深度学习 动态数据变化视频制作
- 下一篇: 离线强化学习的单次修剪 离线训练模型
猜你喜欢
- 2024-11-13 五大基本算法 五大基本算法是什么
- 2024-11-13 高级程序员必备:分治算法分享 分冶算法
- 2024-11-13 最快速的寻路算法 Jump Point Search
- 2024-11-13 手机实时人工智能之「三维动作识别」:每帧只需9ms
- 2024-11-13 模型压缩 | 无需"精雕细琢","随机剪枝"足矣!(ICLR 2022)
- 2024-11-13 决策树算法的剪枝策略:优化模型的关键路径
- 2024-11-13 基于Python的决策树分类器与剪枝 利用python建立决策树模型
- 2024-11-13 离线强化学习的单次修剪 离线训练模型
- 2024-11-13 用动态数据修剪加速深度学习 动态数据变化视频制作
- 2024-11-13 刷新滤波器剪枝的SOTA效果,腾讯优图论文入选NeurIPS2020
你 发表评论:
欢迎- 11-13第一次养猫的人养什么品种比较合适?
- 11-13大学新生活不适应?送你舒心指南! 大学新生的不适应主要有哪些方面
- 11-13第一次倒班可能会让人感到有些不适应,以下是一些建议
- 11-13货物大小不同装柜算法有哪些?怎么算?区别有哪些?
- 11-13五大基本算法 五大基本算法是什么
- 11-13高级程序员必备:分治算法分享 分冶算法
- 11-13最快速的寻路算法 Jump Point Search
- 11-13手机实时人工智能之「三维动作识别」:每帧只需9ms
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)