计算机系统应用教程网站

网站首页 > 技术文章 正文

细粒度物体检测算法的升级揭秘

btikc 2024-09-06 18:01:52 技术文章 8 ℃ 0 评论

EasyDL是百度大脑的定制化模型训练和服务平台,用户通过EasyDL可以低成本地训练自己的深度学习模型,从而获得效果优异的定制化AI服务。自上线以来,EasyDL的用户规模和使用场景迅速增长,也收到了深度学习业内人士的赞赏和青睐。在众多模型使用场景中,小目标物体的检测比较常见,一般的目标检测算法往往效果不理想;因此,EasyDL团队针对小目标物体的检测进行了专项优化,并取得了令人瞩目的效果提升。

自AlexNet在2012年ImageNet比赛上展露头角以来,计算机视觉各个方向和神经网络的联系变得越发紧密,物体检测也不例外。2014年的RCNN[1]是代表之一,它在传统的Selective Search基础上,利用AlexNet来提取特征进行分类。随后在2016年,完全依靠神经网络完成端到端的识别和训练的FasterRCNN[2]也同样证明神经网络在物体检测任务上的巨大优势。本文我们会先简单介绍FasterRCNN的检测方案,然后针对各种后续改进,尤其是小目标检测的改进内容,进行分类介绍。

FasterRCNN检测方案使用CNN网络来提取特征图(feature map),然后在特征图的每个单元(cell)上基于锚框(anchor box)去做是否有物体的二分类任务,及物体相对于锚框位移的回归任务。这个阶段被称作Region Proposal Network(RPN)。一些方法把这里的二分类任务加上关心的类别直接完成整个检测任务,如YoloV1[3],被称为单阶段(single stage)的检测方法。

而FasterRCNN在RPN拿到候选框(Region of Interest, RoI)之后,会把特征图上所有候选框位置的区域抠出来,然后利用线性插值把它们调整到相同大小。这个操作被称为RoI pooling。经过RoI pooling之后,原来特征图上的不同候选区都有了相同的大小,我们在后面去接卷积层和全连接层的头部网络(head network)就可以预测最终的物体类别和物体位置了。所以FasterRCNN被称为两阶段(two stage)方法,RoI pooling就是连接这两个阶段的枢纽。


除了上面所说的主要网络结构外,FasterRCNN还有一些重要的训练和预测的细节:在准备训练数据时,会先将真实的标注框和网络锚框做匹配,匹配的原则是两者的IoU要大于阈值(0.5),且IoU大者优先。由于会有大量的锚框匹配不到真实框,所以实际训练时会对匹配不到真实框的负例锚框做采样,保证它和匹配到真实框的正例锚框比例均衡。在第一阶段和第二阶段里,一般分类的损失函数用交叉熵,框回归的损失函数用Smooth L1。在RPN预测候选框和第二阶段预测检测框的时候,还会对输出结果做非极大值抑制(NMS)以减少输出框数,并过滤大部分的背景框。可以看到在FasterRCNN中包含主体的CNN网络、锚框和RPN网络、RoI pooling、分类和回归损失函数、标注框和锚框匹配采样、NMS等各个组件。


2016年,研究人员提出了SSD(Single Shot MultiBox Detector)[4]的单阶段检测模型,使得检测的速度大大提升,并且精度更高。检测速度提升来自于它去除了FasterRCNN里的RoI pooling和第二个阶段,因为当时还没有GPU能实现高效的RoI pooling。精度的提升来自于它采用了不同尺度的多个特征图,如下图所示。不同尺度的特征图上每个cell的感受野各有不同,因而更适合用来预测不同尺寸的物体。SSD仍然采用了锚框的方式(文章中称为 default box),在6个不同尺寸的特征图上针对锚框做出预测,并对所有的预测结果做NMS后处理得到最终的预测框。在YoloV2[5]中,也采用了这种多尺度特征图的方式。


随着检测技术的发展,SSD模型也暴露了自己的缺点,虽然它利用多尺度特征来预测不同尺寸的物体,但是对于小目标的检测通常不佳。一般来说小目标的检测结果来自最底层的特征图,比如上图里的Conv5_3 layer。但是它处于网络的前几层,提取的语义特征并不丰富,可能没办法提取到物体的抽象特征。因而学者们就如何将高层丰富的语义特征融合进底层特征图进行了尝试。2017年,有研究者提出了DSSD(Deconvolutional Single Shot Detector)[6],网络结构如下图。DSSD是在SSD的基础上,加入了Deconvolution模块,将高层语义信息丰富的特征图放大尺寸,然后和底层位置信息丰富的特征图相加,得到更好的特征用来预测小目标的物体。


2017年的另一项工作FPN(Feature Pyramid Networks)[7]就更著名了,它的思路跟上面类似。作者启发于在传统物体检测方法中,图像金字塔是一个非常重要的手段,而且在深度学习方法流行之后多尺度的测试仍然能够有效地提升检测效果。而且SSD中多尺度特征处理已经初步验证了在CNN特征层上做多尺度的有效性。FPN总体上分为两个部分。第一个是自底向上的部分:如在ResNet的网络里不同大小的特征图会分为不同的stage,每个stage的最后一层特征被选为相应级别(level)的特征。第二个部分是自顶向下的过程和侧向连接,它采用上采样的方式将顶层的特征图放大到上一个级别特征图的大小,然后与之融合。融合后的特征便拥有了底层特征的位置信息和顶层特征的语义信息,能够更好地完成小目标检测任务。FPN能够流行的另一个原因是它应用场景非常广泛,既能应用在两阶段的FasterRCNN中,也可以用在单阶段检测方法如RetinaNet[8]中,还可以应用在实例分割MaskRCNN[9]中。


------分割线

FPN虽然带来了检测效果上的提升,但也带来了计算量更多的问题(额外的上采样和跳层计算)。SNIP中的实验发现基于更大分辨率图像(RetinaNet中通常训练尺寸为(1333,800),此处放大至(2000, 1400))训练的模型可以提高对小目标物体的检测,但对中大物体的检测反而会受到负面影响。训练数据中那些尺寸非常大或非常小的object会影响训练效果,因此这篇文章限定了不同尺寸的object在训练过程中的梯度回传。

SNIP[10]借鉴了Multi-Scale Training(MST)的思想,multi-scale training/testing最早见于[11],训练时,预先定义几个固定的尺度,每个epoch随机选择一个尺度进行训练。测试时,生成几个不同尺度的feature map,对每个Region Proposal,在不同的feature map上也有不同的尺度,我们选择最接近某一固定尺寸(即检测头部的输入尺寸)的Region Proposal作为后续的输入。在[12]中,选择单一尺度的方式被Maxout(element-wise max,逐元素取最大【cascade rcnn中就是】)取代:随机选两个相邻尺度,经过Pooling后使用Maxout进行合并,如下图所示。


常见的是multi-scale training只是从多个尺度中随机挑选一个尺度去训练,实际中还是单个尺度的训练。而multi-scale test则是对单张图片进行预测后一起进入NMS阶段。

在MST方法中,由于训练数据中尺寸极大或极小的目标会影响实验结果,因此SNIP的做法就是只对尺寸在指定范围内的目标回传损失(该范围需接近预训练模型的训练数据尺寸);也就是说训练过程实际上只是针对这些目标进行的,这样就能减少domain-shift带来的影响。又因为训练过程采用了类似MST的做法,所以每个目标在训练时都会有几个不同的尺寸,那么总有一个尺寸在指定的尺寸范围内,因此很难出现漏掉目标的情况。


为了能对多尺度物体能进行更精准的识别并且能够降低计算压力,SNIPER[16]另辟蹊径,对每个尺度大类下都维护一个重点关注区域(chips)。chips是图片的某个scale上的一系列固定大小的(比如KxK个像素)的以恒定间隔(比如d个像素)排布的小窗(window),每个window都可能包含一个或几个objects。


从原图也可以看出,原图中有一大部分的背景区域(没被postive chip覆盖的区域)被丢弃了,而且实际上网络真正输入的是chip(比原图分辨率小很多),这对于减少计算量来说很重要。这个地方很巧妙,在不同的scale上截取相同大小的chip,而且包含的是不完全相同的目标。这个方式很接近RCNN。对较小的目标起到一种zoom in的作用,而对较大的目标起到一种zoom out的作用。而对于网络来说,输入的还是固定大小的chip,这样的结构更加接近于分类问题网络的拓扑。由于训练时使用的是较低分辨率的chip,SNIPER能够摆脱对较高分辨率图像的依赖。所以batch也可以做的很大,比如可以做到每张卡20的batch。

目前主流的目标检测方法大体分为两类:single-stage和two-stage。然而还有另一类方法,虽然不是主流,但依然能取得SOTA的性能,这就是anchor-free的方法,代表算法有CornerNet、ExtremeNet、FSAF(CVPR2019)等。Anchor free based method一般采用bottom-up的思路,先生成带有类别信息和位置信息的feature map。CornerNet[13]顾名思义,预测左上角和右下角来得到最后的bounding boxes。所以最基本的需要两个feature map表示对应的Corner,文中称为heatmap。如下图所示,两个heatmap分别表示top-left(左上角)和bottom-right(右下角)的corner,作者借鉴Associative Embedding method(NIPS2017)利用了两个embedding层做grouping操作,将属于同一个object的corner聚合都一起得到最后的bounding box。


模型的整体结构如下图,backbone采用hourglass network以得到高质量的feature map,接两个分支分别预测top-left Corner 和bottom-right Corner,两个分支的结构完全一样。


CornerNet-Lite[14]是CornerNet两种变形的组合:一个是CornerNet-Saccade,基于attention机制,从而并不需要对图片中的每个像素做详尽的处理。另一个是CornerNet-Squeeze,引入了新的复杂的backbone结构。结合这两个变形可以应用到两个重要情景中:在不降低准确率的情况下挺高效率,同时,在实时检测过程中提高了准确率,CornerNet-Saccade即适合做离线处理,也适用于实时的检测。

CornerNet-Saccade通过减少处理的像素的个数来提高inference的效率。利用一种类似于人眼扫视的注意力机制,首先经过一个下采样后的输入图片,生成一个attention map,然后再将其进行放大处理,接着进行后续模型的处理。这与之前原始的CornerNet在不同尺寸上使用全卷积是有区别的,CornerNet-Saccade通过选择一系列高分辨率的裁剪图来提高效率及准确率。

CornerNet-Squeeze通过减少每个像素的处理过程来加速inference,其结合了SqueezeNet及MobileNet的思想,同时,引入了一个新的backbone hourglass,利用了1x1的卷积,bottleneck层及深度分离卷积。

CornerNet珠玉在前,目标检测问题变成了一个标准的关键点估计问题。我们仅仅将图像传入全卷积网络,得到一个热力图,热力图峰值点即中心点,每个特征图的峰值点位置预测了目标的宽高信息。模型训练采用标准的监督学习,推理仅仅是单个前向传播网络,不存在NMS这类后处理。


CenterNet[15]相比较传统目标检测而言(缩放16倍尺度),使用更大分辨率的输出特征图(缩放了4倍)因此更有利于小目标检测。测试时可以使用flip增强,multiscale test增强的方式。其中flip的方式是直接将最后一层的feature map进行融合,MST则是通过nms的方式进行整合。

直观上,当我们看到一幅图片时,我们首先关注的是图像中比较醒目的影像。一般来说,这些醒目的影像往往在图中所占的比例比较大,而比例较小的目标往往会被我们忽略。数据集中也存在这种情况,很多图像中包含的小物体并没有被标出。另外,小目标所在区域较小,在提取特征的过程中,其提取到的特征也会非常少,这些都不利于我们对小目标的检测。

[17]通过分析COCO数据集,可以发现大部分的小目标都集中在一些少量的图片中。这就导致在训练的过程中,模型有一半的时间是学习不到小目标的特性的。另外,对于小目标,平均能够匹配的anchor数量为1个,平均最大的IoU为0.29,这说明很多情况下,有些小目标是没有对应anchor的,或者对应的anchor非常少,且即使有对应的anchor,他们的IoU也比较小,平均最大的IoU也才0.29。有如下两种改进方法:

1)对于数据集中含有小目标图片较少的情况,使用过度采样(oversample)的方式,即多次训练这类样本。

2)对于第二类问题,则是对于那些包含小物体的图像,将小物体在图片中复制多分,在保证不影响其他物体的基础上,人工增加小物体在图片中出现的次数,提升被anchor包含的概率。


目标检测近两年的进展放缓,但仍然有很多值得关注、值得深究的地方。结合现实条件来看,目标检测在实际运用场景中仍有很多优化空间。百度大脑EasyDL也将持续把更多与场景结合的、深入优化预训练的模型开放给用户,加速推动AI的产业落地。

参考文献

[1]. Ross Girshick, 2014, Rich feature hierarchies for accurate object detection and semantic segmentation

[2]. Shaoqing Ren, 2016, Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

[3]. Joseph Redmon, 2015, You only look once: Unified, real-time object detection

[4]. Wei Liu, 2016, SSD: Single Shot MultiBox Detector

[5]. Joseph Redmon, 2016, YOLO9000: Better, Faster, Stronger Joseph

[6]. Cheng-Yang Fu, 2017, DSSD : Deconvolutional Single Shot Detector

[7]. Tsung-Yi Lin, 2017, Feature Pyramid Networks for Object Detection

[8]. Tsung-Yi Lin, 2018, Focal Loss for Dense Object Detection

[9]. Kaiming He, 2018, Mask R-CNN

[10]. An Analysis of Scale Invariance in Object Detection – SNIP

[11].Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

[12].Object Detection Networks on Convolutional Feature Maps

[13].CornerNet: Detecting Objects as Paired Keypoints

[14].CornerNet-Lite: Efficient Keypoint Based Object Detection

[15].CenterNet :Objects as Points

[16].SNIPER: Efficient Multi-Scale Training

[17].Augmentation for small object detection

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表