作者研究了anchor-free 策略在轻量级目标检测模型中的适用性。作者增强了Backbone结构,设计了Neck的轻量化结构,提高了网络的特征提取能力。改进了标签分配策略和损失函数,使训练更加稳定和高效。
通过这些优化,创建了一个新的实时物体检测系列架构,名为PP-PicoDet,它在移动设备上实现了优越的物体检测性能。与其他流行的模型相比,该模型架构在准确性和延迟之间实现了更好的权衡。PicoDet-S只有0.99M参数,mAP值为30.6%,与YOLOX-Nano相比,mAP提高了4.8%,同时移动CPU延迟降低了55%,与NanoDet相比,mAP提高了7.1%。当输入尺寸为320时,在移动ARM CPU上达到123 FPS(使用Paddle Lite时达到150 FPS)。PicoDet-L仅3.3M参数的mAP值为40.9%,mAP值提高了3.7%,比YOLOv5s快44%。如图1所示,本文模型远远优于轻量级目标检测的最新结果。
1简介
目标检测被广泛应用于许多计算机视觉任务中,包括自主驾驶、机器人视觉、智能交通、工业质量检测、目标跟踪等。
两阶段模型通常会带来更高的性能。然而,这种消耗计算资源的网络限制了部署的需求。为了克服这一问题,轻量级物体检测器的研究越来越受到关注,旨在设计高效的物体检测。
YOLO系列的目标检测器已经流行起来,因为它们只是考虑资源约束的一小部分工作。与两阶段模型相比,YOLO系列具有更高的效率和高精度。但是,YOLO系列没有解决以下问题:
- 采用不同的数据集需要手动重新设计Anchor boxes;
- 由于生成的Anchor 多为负值,容易导致正、负样本不平衡问题。
近年来,许多工作都致力于开发更高效的探测器体系结构,如Anchor-Free检测器。
FCOS解决了Ground-truth标签内的重叠问题。与其他Anchor-Free检测器相比,不存在复杂的超参数调节。然而,大多数Anchor-Free检测器都是大型检测器;
在少数情况下,NanoDet和YOLOX-Nano是Anchor-Free检测器和移动检测器。问题是轻量Anchor-Free检测器通常不能很好地平衡精度和效率。因此,在这项工作中,受到FCOS和GFL的启发,作者提出了一种改进的移动友好和高精度Anchor-Free探测器,名为PP-PicoDet。总的来说,主要贡献如下:
- 采用CSP结构构建CSP-PAN作为Neck。CSP-PAN通过1×1卷积对Neck各分支的输入通道数进行统一,显著提高了特征提取能力,减少了网络参数。将3 × 3深度可分卷积扩大到5 × 5深度可分卷积,以扩大感受野;
- 标签分配策略是目标检测的关键。这里使用SimOTA动态标签分配策略,并优化了一些计算细节。具体地说,使用了Varifocal Loss (VFL)和GIoU Loss来计算cost matrix ,在不降低效率的前提下提高了精度;
- 进一步对ShuffleNetV2网络结构进行了改进,提出了一种新的Backbone,即Enhanced ShuffleNet (ESNet),其性能优于ShuffleNetV2;
- 提出了一种改进的一次性神经网络检测方法体系结构搜索(NAS) Pipeline,以自动找到最优的体系结构进行目标检测。直接在检测数据集上训练SuperNet,这带来了显著的计算节省和检测优化。本文的NAS方法生成的模型实现了更好的效率和准确性权衡。
2相关工作
目标检测是一项经典的计算机视觉挑战,旨在识别图像或视频中的目标类别和目标位置。现有的目标检测器,可以分为2类:
- Anchor-Based检测器
- Anchor-Free的检测器
两阶段检测器通常是基于Anchor的,从图像生成区域建议,然后从区域建议生成最终的边界框。为了提高目标定位的精度,FPN融合了多尺度的高级语义特征。两阶段探测器对目标定位精度较高,但在CPU或ARM设备上难以实现实时检测。
单阶段目标探测器也是基于Anchor的,具有较好的速度和精度平衡,因此在实践中得到了广泛的应用。SSD是用于检测多尺度物体的方法,虽然对小物体比较友好,但在精确度上没有竞争力。同时,YOLO系列(YOLOv1除外)在精度和速度上都表现良好。但是,它并没有解决在前面分析的一些问题。
Anchor-Free检测器的目的是消除Anchor Box,这是目标检测的一个重要改进。
- YOLOv1的主要思想是将图像分割成多个网格,然后在靠近物体中心的点上预测BBox。
- CornorNet检测边界框的一对角,而不将Anchor Box设计为先验框。
- CenterNet放弃左上角和右下角,直接检测中心点。
- FCOS首先以逐像素预测的方式重新制定目标检测,并提出中心分支。
Anchor-Free检测器解决了Anchor-Based检测器的一些问题,降低了存储成本,并提供了更精确的BBox计算。
之后的工作从不同方面进一步改进了目标检测器。ATSS提出了一种自适应训练样本选择,根据目标的统计特征自动选择正样本和负样本。Generalized Focal Loss (GFL)消除FCOS中的“中心”分支,将质量估计融合到类预测向量中,形成定位质量和分类的联合表示。
在移动端目标检测领域,人们一直致力于实现更准确、更高效的目标检测:
- 通过YOLOv4的压缩编译协同设计,YOLObile实现了移动端的实时物体检测。
- PP-YOLOTiny采用MobileNetV3 Backbone和基于PP-YOLO的TinyFPN结构。
- NanoDet使用ShuffleNetV2作为Backbone,使模型更轻,并使用ATSS和GFL提高精度;
- YOLOX-Nano是目前YOLOX系列中最轻的结构,使用动态标签分配策略SimOTA在可接受的参数内实现最佳性能。
手工设计的技术很大程度上依赖于专业的知识和繁琐的试验。近年来,NAS在发现和优化网络架构(如MobileNetV3、EfficientNet和Mnasnet)方面显示了很有前景的结果。因此,NAS可以是一个很好的选择,以产生一个更好的效率-精度平衡的检测器。一键式NAS方式通过共享相同的权重来节省计算资源。近年来,许多Oneshot NAS都在进行图像分类,如ENAS、SMASH等。
据作者所知,很少有人尝试开发用于物体探测的NAS。NAS-FPN用于搜索特征金字塔网络。DetNas第一次在ImageNet上训练SuperNet Backbone,然后在COCO上对SuperNet Backbone进行微调。MobileDets使用了NAS,并提出了一个扩展的搜索空间系列,以在移动设备上实现更好的延迟与精度的平衡。
3本文方法
首先展示NAS的搜索方法可以得到具有较好性能的Backbone,这有助于提高准确性和减少延迟。然后,提供了Neck和Head模块的增强策略。最后,描述了标签分配策略和其他进一步提高性能的策略。
3.1 Better Backbone
1、手工设计
经过多次实验发现ShuffleleNetV2在移动设备上比其他网络更稳定。为了进一步提高ShuffleleNetV2的性能,作者采用了PPLCNet的一些方法来增强网络结构,并建立了一个新的Backbone,即Enhanced ShuffleNet (ESNet)。图3详细描述了ESNet的ES块。SE模块很好地权衡了网络通道以获得更好的特性。因此,在所有块中添加SE模块。
与MobileNetV3一样,SE模块的2层激活函数分别为ReLU和H-Sigmoid。Channel Shuffle提供了ShuffleNetV2通道的信息交换,但也会导致融合特性的丢失。为了解决这个问题,增加了depthwise卷积和pointwise卷积,在stride=2时整合不同的通道信息(图3a)。
GhostNet的作者提出了一种新的Ghost模块,可以用更少的参数生成更多的特征图,以提高网络的学习能力。作者将Ghost模块添加到stride=1的块中,以进一步增强ESNet的性能(图3b)。
2、结构搜索
首次提出了目标检测器的one-shot搜索方法。由于不同任务之间的差距,配备了高性能分类Backbone的物体检测器可能不是最佳选择。这里不寻找更好的分类器,而是直接在检测数据集上训练和搜索检测SuperNet,这大大节省了计算量,优化了检测效果。
该搜索框架由2个步骤组成:
- 在检测数据集上训练One-shot SuperNet,
- 在训练后的SuperNet上使用进化算法(EA)进行架构搜索。
为了方便,在这里简单地使用通道搜索Backbone。具体来说,作者提供灵活的比率选项,以选择不同的通道比率。作者在[0.5,0.675,0.75,0.875,1]中随机粗略地选择比率。例如,0.5表示宽度按完整模型的0.5缩放。通道数可被8整除,可以提高硬件设备上的推理速度。
因此,首先用每个阶段块的通道数训练完整的模型,而不是使用原始模型中的通道数。所有的比例选项也可以保持通道数被8整除。所选的比率适用于每个块中的所有可读卷积。所有输出通道固定为完整模型。
为了避免繁琐的超参数调优,作者修复了架构搜索中的所有原始设置。对于训练策略,采用sandwich rule对最大子模型和最小子模型进行抽样,每个训练迭代随机抽样6个子模型。在训练策略中没有更多的额外trick,如蒸馏,因为不同的技术对不同的模型执行不一致,特别是检测任务。最后,在ImageNet数据集上对选定的架构进行再训练,然后在COCO上进行训练。
3.2 CSP-PAN和Detector Head
CSP结构广泛应用于YOLOv4和YOLOX Neck部分。这里也使用PAN结构获取多级特征图,使用CSP结构进行相邻特征图之间的特征连接和融合。在原有的CSP-PAN中,每个输出特征映射中的通道都与来自Backbone的输入保持一致。
对于移动端来说,通道数大的结构具有昂贵的计算成本。本文通过使用1×1卷积来解决这个问题。然后通过CSP结构使用自顶向下和自底向上的特征融合。缩小的特征导致更低的计算成本和无损的准确性。
此外,在CSP-PAN的顶部添加一个特征图scale以检测更多的目标。同时,除1×1卷积外,所有卷积都是深度可分离卷积。深度可分卷积通过5×5卷积扩展感受野。这种结构以更少的参数带来了相当大的精度提高。具体的结构如图2所示。
在detector head使用深度可分卷积和5×5卷积来扩展感受野。深度可分卷积的个数可以设置为2,4或更多。
总体网络结构如图2所示。Neck和Head都有4个scale branches。保持head的通道数与neck模块一致,并将分类和回归分支coupled起来。YOLOX使用了一个decoupled head,通道数更少,同时可以提高准确性。本文的coupled head在不减少通道数量的情况下性能更好,参数和推理速度与decoupled head几乎相同。
3.3 标签分配策略与损失
正样本和负样本的标签分配对目标检测有重要影响。大多数目标检测器使用固定的标签分配策略。这些策略很简单:
- RetinaNet 通过Ground Truth和Anchor Boxes直接将正样本和负样本划分出来;
- FCOS 以中心点在Ground Truth内部的Anchor为正样本;
- YOLOv4 和 YOLOv5 选择Ground Truth中心点及其相邻Anchor为正样本; * ATSS 根据Ground Truth附近最近Anchor的统计特征来确定正、负样本。
上述标签分配策略在全局训练过程中是不变的。SimOTA是一种标签分配策略,随着培训过程的不断变化,SimOTA在YOLOX中取得了很好的效果。
本文使用SimOTA动态标签分配策略来优化训练过程:
- 通过中心先验确定候选区域;
- 计算出候选区域中预测框与Ground truth的IoU;
- 将每个Ground truth的最大IoU相加得出参数κ。
cost 矩阵直接计算候选区域中所有预测框和Ground truth的损失。对于每个Ground truth,选择与最小κ损失对应的Anchor作为正样本。原SimOTA采用CE损失和IoU损失的加权和来计算cost 矩阵。为了使SimOTA中的cost与目标函数保持一致,作者使用Varifocal loss和GIoU loss的加权和作为cost矩阵。GIoU损失的权重为λ,实验表明,λ为6是最好的。具体公式是:
在检测器头部,利用Varifocal loss对分类预测和质量预测进行耦合。对于回归,用GIoU损失和Distribution Focal Loss。公式如下:
在上述公式中,表示Varifocal Loss ,表示GIoU Loss,表示Distribution Focal Loss 。
3.4 其他策略
近年来,越来越多的激活函数超越了ReLU。在这些激活函数中,HSwish是Swish激活函数的简化版本,计算速度更快,移动端也比较友好。于是作者将检测器的激活函数由ReLU改为H-Swish。在保持推理时间不变的情况下,性能显著提高。
与linear step learning rate decay 不同,cosine learning rate decay是学习率的指数衰减。余弦学习速度平稳下降,有利于训练过程,特别是当Batch-Size较大时。
过多的数据增强会增加正则化效果,使训练对轻量模型的收敛更加困难。因此,在本工作中,只使用随机翻转、随机裁剪和多尺度调整来增强训练中的数据。
4实验
4.1 SOTA结果对比
4.2 消融实验
1、CSP-PAN
首先得到与NanoDet相似的Base模型,Backbone采用ShuffleNetV2-1x ,Neck采用无卷积的PAN,Loss采用标准GFL Loss,标签分配策略采用ATSS。所有激活函数都使用LeakyRelu。得到的mAP(0.5:0.95)是25.3。
进一步,采用了CSP-PAN结构。特征图比例尺为3。(0.5:0.95)增加到28.1。最后,我们在CSP-PAN的顶部添加了一个特征scale。就像CSP-PAN的最终结构一样,参数的数量增加了不到50K。mAP(0.5:0.95)被进一步改进到29.1。
2、Loss
在前一节中,在相同配置下比较了Varifocal Loss (VFL)和Quality Focal Loss (QFL)的影响。两者的影响是相近的,Varifocal Loss仅略好于Quality Focal Loss。将QFL替换为VFL, mAP(0.5:0.95)从29.1提高到29.2。
3、Label Assignment Strategy
在前一节的相同配置下,用原始的SimOTA和修改的SimOTA替换ATSS。发现n越大效果越差。然后将参数n设置为10。ATSS的性能与原SimOTA几乎相同。修改的mAP (0.5:0.95) SimOTA达到30.0。
4、ESNet Backbone
5、H-Swish激活函数
最后,替换所有LeakyRelu为H-Swish激活函数,mAP(0.5:0.95)最终增加到30.6。
6、检测结果可视化
5参考
[1].PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices
文章转载于:集智书童
作者: ChaucerG
推荐阅读
更多嵌入式AI技术相关内容请关注嵌入式AI专栏。