关于CenterNet移动端部署的思考(for ncnn)

参考 腾讯技术工程 公众号:https://mp.weixin.qq.com/s/PrkID3lnoDFVUxh-i3V2UQ

本文主要是参考 arlencai 大佬的博文,对于cneternet在ncnn平台移植的实操和分析,先mark一下,准备后续有空闲尝试将这一思路在nvidia的jetson平台上尝试部署,并进行系列优化(如硬件方面框架的tensorrt量化优化、网络层面的移动端部署替代,或者类似yolov5的CSP结构等方法改良尝试等)

一、背景

原文中,大佬主要是针对微信的“扫一扫”功能进行阐述,并针对这一方向进行下文中CenterNet网络在移动端中的目标检测(主要是指小目标检测,例如二维码)并提出,其难点在于如何自动地选择包含物体的图像帧,这离不开高效的移动端物体检测

二、问题

“扫一扫”识物是一种面向开放环境的通用物体检测——复杂多样的物体形态要求模型具有强的泛化性,移动端的计算瓶颈又要求模型保持高的实时性。“扫一扫”识物需要一个什么样的移动端检测(Class-wise or Object-ness)呢?
Class-wise 检测(即传统意义上的物体检测)的优势在于同时输出物体的位置和类别,然而开放环境下的物体类别很难准确定义和完整覆盖。
因此,我们将问题定义为Object-ness 检测(即主体检测):只关注是否为物体和物体的位置,并不关心物体的具体类别。Object-ness 的物体检测对多样化的物体具有更强的普适性,同时大大减轻模型的负担来保证其实时性。这是“扫一扫”识物相比于其他检测目标在移动端检测问题上定义的不同

三、选型

近几年物体检测算法日新月异,面对琳琅满目的检测模型,合适的才是最好的。

(这里原文是有个图的,但是分辨率是1080*653,放了7个模型的结构,其中包含faster-RCNN,SSD,YOLO,DuBOX,foveaBox,FCOS还有RetinaNet,放大看也巨模糊,其中yolo的也是针对v3的简化图,不包含v5的csp变种,分开放会影响文章可读性,就不放了,有对其中哪个网络有对比兴趣的,可以根据网络名称去查,下文主要就是讲为啥选择centerNet,也可以理解为CenterNet的优点。)

(1)One-stage

从模型的层次结构上,可分为两阶段(two-stage)和单阶段(one-stage)。

(a)Two-stage 检测器以 R-CNN 系列(Fast R-CNN [1]、Faster R-CNN [2]、Mask-RCNN[3])为代表,其模型的第一阶段输出粗糙的物体候选框(proposal)第二阶段进一步回归物体坐标和分类物体类别。Two-stage 检测器的优势在于:RoIPool 的候选框尺度归一化对小物体具有较好的鲁棒性;进一步的区域(region)分类对于较多类别的检测需求更为友好。(这里没提到缺点,按照个人经验斗胆补充下,是大多时候占用资源较多,而且慢

(b)One-stage 检测器以 YOLO 和 SSD 系列(YOLO V1-V3 [4-6]、SSD [7]、RetinaNet[8])为代表,其特点是全卷积网络(FCN)直接输出物体的坐标和类别,为移动端加速提供了便利。

以yolo v3作为例子,就是在卷积过程中直接采用了下采样,然后再用上采样进行填充,生成多组feature map(yolo是三组),最后对于feature map进行回归,这种方式的好处就是因为有pooling操作,处理的参数量少了,速度快乐,坏处就是对于小目标来说,pooling过程中会损失掉部分特征,例如yolo的极限像素就是8像素,小于8像素的就没办法识别了,实际中包含8像素的也是。

对于“扫一扫”识物中主体检测的应用场景,小物体和多类别的需求不如实时性来得强烈,因此我们选择 one-stage 的模型结构。(总结就是,实时性高的,还是one-stage首选

(2)Anchor-free

(a)锚点(anchor)是 R-CNN 系列和 SSD 系列检测方法的特点:在 one-stage 检测器中,通过滑动窗口(slide window)产生各式各样的 anchor 作为候选框;在 two-stage 检测器中,RPN 从 anchor 中挑选合适的候选框进行第二阶段的分类和回归。Anchor 为检测器提供物体的形状先验,可有效地降低检测任务的复杂度,但经验性的 anchor 参数会极大地影响模型的性能

经验性的anchor会影响模型的识别性能,这部分个人拙见,觉得主要是因为作者想引出anchor-free的一种写作技巧性引导,也就是centernet,而刻意加上的anchor的劣势,但是事实是,yolov3+之后都是K-mean聚类方式了,当然为了缩短训练的时间等也可以手动设置(少个聚类时间,基本没啥影响,建议还是自动聚类),所以相当于很大程度上削弱了anchor的弊端(也就是基本不手动设置),而且在此之前,有经验的算法开发也是会用聚类方式的。

对于anchor-free的优势来说,我个人还是觉得《CenterNet :Objects as Points》一文中的说法比较顺滑些–

“目标检测识别往往在图像上将目标用矩形框形式框出,该框的水平和垂直轴与图像的水平和垂直向平行。大多成功的目标检测器都先穷举出潜在目标位置,然后对该位置进行分类,这种做法浪费时间,低效,还需要额外的后处理。本文中,我们采用不同的方法,构建模型时将目标作为一个点——即目标BBox的中心点。我们的检测器采用关键点估计来找到中心点,并回归到其他目标属性,例如尺寸,3D位置,方向,甚至姿态。我们基于中心点的方法,称为:CenterNet,相比较于基于BBox的检测器,我们的模型是端到端可微的,更简单,更快,更精确。”

(b)无锚点(anchor-free)的检测器随着网络结构(如:FPN[9]、DeformConv [10])和损失函数(如:Focal Loss [8]、IOU Loss[11])的发展逐渐焕发出新的生机。其中,尺度鲁棒的网络结构增强模型的表达能力,训练鲁棒的损失函数解决样本的平衡和度量问题。(这句我没太读懂,怪怪的,不知道是不是语法出了问题)
Anchor-free 方法以 YOLOV1-V2 [4-5]及其衍生(DenseBox [12]、DuBox [13]、FoveaBox [14]、FCOS[15]、ConerNet [16]、CenterNet[17]等)为代表。他们抛开候选框的形状先验,直接分类物体的类别和回归物体的坐标。

(即不以box为检测单位,好处之一就是解决了同一物体在两个box中的这种状况,但是对于yolov3+最小能8个像素点的性能来说,这种优势又显得有些微弱,当然,以上分析是针对目标检测这一领域来说的,而centernet论文中(此处指《CenterNet :Objects as Points》一文,即GitHub上xingxingzhou的源码),陈述的主要是对于尺寸,3D位置以及姿态等方面,这些方面本人还未用代码进行过测试,故不随意添加主观臆断)

在“扫一扫”识物的应用场景中,复杂多样的物体形状对 anchor 的设计提出了巨大挑战,因此我们选择 anchor-free 的模型结构。

(3)Light-head

近一年来,anchor-free 的检测器日新月异。然而,在移动端的应用场景下,大部分 one-stage 且 anchor-free 的检测器仍存在以下不足:
(a)多输出(Multi-head):为了增强模型对多尺度物体的检测能力,大部分检测器(如:FoveaBox[14]、DuBox [13]、FCOS[15])普遍采用多头输出来提高模型的尺度鲁棒性。其中,低层特征满足小物体检测需求,高层特征应对大物体检测。然而,多头输出的网络结构对于移动端加速并不友好。
(b)后处理(Post-process):为了解决 anchor 先验缺失和 multi-head 结果整合的问题,大部分检测器都需依赖复杂的后处理,如:非极大值抑制(NMS)和各式各样的奇技淫巧(trick),但它们普遍不适合并行化加速。
在这里插入图片描述

综上,我们选取CenterNet作为“扫一扫”识物的移动端检测模型(见图 2)。CenterNet 是 one-stage 的 anchor-free 检测方法,single-head 的输出和高斯响应图的回归使其不依赖 NMS 的后处理。CenterNet 将目标检测问题变成一个标准的关键点估计问题:通过全卷积网络得到中心点的热力图(峰值点即中心点),并预测峰值点对应的物体宽高信息。
此外,我们引进了 TTFNet[18]中高斯采样、高斯加权和 GIOU Loss[19]等技术实现 CenterNet 的训练加速,仅需 5 小时即可在 4 块 Tesla P4 下完成 MS-COCO 的训练,这为模型调参和优化节省了大量的时间。

(这部分的大大节省,我也没大看懂,非要理解,那我只能说这部分应该是论文中常见的文学修饰了,先不说“不提数据集大小、训练输入尺寸以及batch-size、epoch等因素的训练速度都是耍流氓”这一原则,我寻思着4块 Tesla P4 GPU,只要显存不爆的情况下,训练5小时,时间应该比较一般水平了。。除非是训练远超常规等量级,不然大大节省这个词应该不需要,所以各位训练的时候如果低于或者高于这个时间也无碍)

三、优化

这部分个人认为全文精髓,具体效果还没试验,但是对于我这种小白来说,这部分的思路对我针对移动端的CenterNet优化这部分工作,提供了一种新思路,帮助很大。

针对移动端的检测需求,首先我们将 CenterNet 的骨干网络(backbone)从 ResNet18 更换为对移动设备更为友好的 ShuffleNetV2[20]。然而,仅仅依赖 backbone 带来的效能提升是有限的,对此我们进行针对性的模型优化。
(1)大感受野(Large RF)
从 ResNet 到 ShuffleNetV2 主要影响了模型的深度和感受野。在以热力图回归的 CenterNet 中,模型的感受野显得异常重要。如何在保持网络轻量的前提下提高模型的感受野呢?从 AlexNet 到 VGG,VGG 通过将大尺度的卷积核拆解为多个小尺度的卷积核(1 个 5x5→2 个 3x3):在相同感受野下,2 个 3x3 卷积的参数量和计算量均只有 1 个 5x5 的 18/25。然而,这在深度(depth-wise)卷积的时代并不适用。在 ShuffleNet 中,5x5 的 depth-wise 卷积获得两倍感受野,仅比 3x3 的 depth-wise 卷积增加极少的计算量(如图 3)。
因此,我们将 ShuffleNetV2 中所有的 depth-wise 卷积均替换为 5x5 卷积。因为缺少 ImageNet 预训练的 5x5 模型,我们取巧地将 3x3 的 ShuffleNetV2 预训练模型进行卷积核的零扩边(zero padding),得到 5x5 的大卷积核 ShuffleNetV2。
在这里插入图片描述

(2)轻检测头(Light Head)
CenterNet 的检测头使用类 U-Net[21]的上采样结构,可有效地融合低层细节信息,从而提高对小物体的检测性能。然而,CenterNet 的检测头并未针对移动端进行优化,因此我们对其进行 ShuffleNet 化改造(见图 4 红框)。
在这里插入图片描述

首先,将检测头的所有普通 3x3 卷积替换为 5x5 的 depth-wise 卷积,并将可形变卷积(DeformConv)也改造为 depth-wise 的可形变卷积。其次,参照 ShuffleNet 通道压缩的技巧,将 CenterNet 中多层特征的残差融合(residual)改造为通道压缩的连接融合(concat)。通过大感受野(Large RF)和轻检测头(Light Head),优化后的模型在 MS-COCO 数据库在计算量(FLOPs)、参数量(Parameters)和检测性能(mAP)均取得优异的结果,见表 1。
在这里插入图片描述

(3)金字塔插值(Pyramid Interpolation Module,PIM)
然而,可形变卷积(DeformConv)对移动端加速并不友好,因此我们需要重新设计 DeformConv 的替代品。DeformConv 可自适应地对多尺度信息进行抽取,在 MS-COCO 中的小物体检测起到巨大作用。“扫一扫”识物对小物体的检测需求并不是非常强烈,DeformConv 更多的是提供多样化的尺度特征。对此,我们借鉴图像分割方法 PSPNet[22](见图 5)的金字塔池化(Pyramid PoolingModule,PPM),提出了金字塔插值(Pyramid Interpolation Module,PIM)同时实现多尺度特征的融合和特征图的插值(见图 4 蓝框)。
PIM 中主要包括三条分支进行 2 倍上采样:空洞解卷积,卷积+上采样,全局平均池化+全连接。其中,“空洞解卷积”对应大尺度特征;“卷积+上采样”对应小尺度特征;“全局平均池化+全连接”对应全局特征。在 ShuffleNetV2 x0.5 的骨干网络下,表 2 对比了各种上采样方法对检测性能的影响,可见 PIM 有效地替代 DeformConv 在“扫一扫”识物中的作用。

在这里插入图片描述

图5:PSPNet的金字塔池化模块

(不同上采样这种思路在yolo中也有过出现,生成不同的feature map再进行融合,在移动端方面,比较成熟而且速度比较友好的人脸识别方面,也有过这种图像金字塔的方法调用,例如MTCNN网络中的人脸检测部分,采用的PRO网络。)

五、部署
通过以上优化,我们最终采用表 2 中最优结果作为“扫一扫”识物的移动端检测模型。该模型采用基于 pytorch 框架的 mmdetection 作为训练工具。在移动端部署上,我们采用 ncnn 框架,将 pytorch 模型转换为 onnx 模型再转换为 ncnn 模型,并在转换过程中将参数量化到 16bit。此外,为了进一步减小模型体积和加速,我们将网络中 conv/bn/scale 三个连续的线性操作融合为一个 conv 层,在不影响效果的同时可减少约 5%的参数量,并提速约 5%~10%。

最终,“扫一扫”识物的移动端检测模型仅 436 KB,在 iphone8 的 A11 CPU 上的单帧检测时间仅 15ms。

(这个提速效果很明显了,60+FPS,目前我在硬件性能更优的平台上res101和dla34的速度和这个差了很多,但是由于我还没测试,故先不做评价)

六、展望
目前“扫一扫”移动端检测只是开端,移动端物体检测的发展也才刚刚开始。抛开“扫一扫”识物的场景,CenterNet 在通用的物体检测上仍存在以下问题:
如何解决类别增加带来的检测头爆炸性增长?(我目前的检测类别大约在接近20类左右,应该属于类别比较多)
可形变卷积(DeformConv)是否存在更通用的替代品?(DCNv2,这个的确需要替代品,在针对tensorrt框架等大多移植的时候,存在着一定问题)
U-Net 式的上采样结构是否可进一步优化?
路漫漫其修远兮,在我们后续工作中将针对这些问题进行探索。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值