目标检测发展的22年
点击上方“ 迈微AI研习社 ”,选择“ 星标★ ”公众号
重磅干货,第一时间送达
本文详细总结了从传统手工提取特征到基于卷积神经网络方法的发展过程,核心围绕怎么在图像中找到对应位置的目标分类问题,从是否基于anchor-box分类各算法,精炼提取算法思想和改进过程、总结对比,给出了主要的应用场景和发展趋势。针对视觉2D到3D目标检测方法,再到自动驾驶场景的BEV下的3D目标检测,给出自动驾驶领域拓展实践:从BEV到占据栅格网络。 1
目标检测概述
-
什么是目标检测?
目标检测的任务是找出图像中所有感兴趣的目标(物体),确定他们的类别和位置。
作为计算机视觉的基本问题之一,目标检测构成了许多其它视觉任务的基础,例如实例分割,图像标注和目标跟踪等等;从检测应用的角度看:行人检测、面部检测、文本检测、交通标注与红绿灯检测,遥感目标检测统称为目标检测的五大应用。
机器视觉中关于目标检测有4大类任务:
-
分类(Classification):给定一张图片或一段视频判断里面包含什么类别的目标。
-
定位(Location):定位出这个目标的的位置。
-
检测(Detection):即定位出这个目标的位置并且知道目标物是什么。
-
分割(Segmentation):分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题。
这4大类任务结果如图所示:
我们要解决的目标检测任务,是一个分类问题和回归问题的叠加,分类是区分目标属于哪个类别,回归用来定位目标所在的位置。
1.2 具体实现过程
1.3 核心问题:怎么得到ROI?
-
滑窗 (预选anchor)
-
Region proposal
-
CNN 提取特征
计算机视觉中的目标检测任务就围绕着这个核心问题展开:
-
如何提取目标区域ROI特征:
-
传统方法:手工设计特征
-
CNN方法:卷积运算提取
-
-
预选框怎么确定
-
基于proposal方式( 两阶段网路):滑窗、选择性搜索算法Selective Search、RPN、
-
不基于proposal方式( 一阶段网路):直接产生物体的类别概率和位置坐标值
-
基于anchor锚点方式:
-
不基于anchor锚点方式:将网络对目标边界框的检测转化为一对关键点的检测
-
2术语anchor boxes是指预定义的框集合,其宽度和高度被选择以匹配数据集中目标的宽度和高度。提议的anchor boxes包含可以在数据集中找到的目标大小的可能组合。这自然应该包括数据中存在的不同纵横比和比例。通常选择 4-10 个anchor boxes作为图像中不同位置的提议。
目标检测发展的22年
2.1 传统目标检测算法:手工设计特征
-
选取感兴趣区域,选取可能包含物体的区域
-
对可能包含物体的区域进行特征提取
-
对提取的特征进行检测分类
2.1.1 Viola Jones Detector
VJ[1] (Viola Jones)检测器采用滑动窗口的方式以检查目标是否存在窗口之中,该检测器看起来似乎很简单稳定,但由于计算量庞大导致时间复杂度极高,为了解决该项问题,VJ检测器通过合并三项技术极大提高了检测速度,这三项技术分别是:1)特征的快速计算方法-积分图,2)有效的分类器学习方法-AdaBoost,以及3)高效的分类策略-级联结构的设计。
2.1.2 HOG Detector
HOG[2](Histogram of Oriented Gradients)检测器于2005年提出,是当时尺度特征不变性(Scale Invariant Feature Transform)和形状上下文(Shape Contexts)的重要改进,为了平衡特征不变性(包括平移,尺度,光照等)和非线性(区分不同的对象类别),HOG通过在均匀间隔单元的密集网格上计算重叠的局部对比度归一化来提高检测准确性,因此HOG检测器是基于本地像素块进行特征直方图提取的一种算法,它在目标局部变形和受光照影响下都有很好的稳定性。HOG为后期很多检测方法奠定了重要基础,相关技术被广泛应用于计算机视觉各大应用。
2.1.3 DPM Detector
作为VOC 2007-2009目标检测挑战赛的冠军,DPM[3] (Deformable Parts Model)是目标检测传统算法中当之无愧的SOTA(State Of The Art)算法。DPM于2008年提出,相比于HOG,DPM作了很多改进,因此该算法可以看作HOG的延申算法。DPM算法由一个主过滤器(Root-filter)和多个辅过滤器(Part-filters)组成,通过硬负挖掘(Hard negative mining),边框回归(Bounding box regression)和上下文启动(Context priming)技术改进检测精度。作为传统目标检测算法的SOTA,DPM方法运算速度快,能够适应物体形变,但它无法适应大幅度的旋转,因此稳定性差。
2.1.4 局限性
基于手工提取特征的传统目标检测算法主要有以下三个缺点:
-
识别效果不够好,准确率不高
-
计算量较大,运算速度慢
-
可能产生多个正确识别的结果
从手工设计特征到CNN提取特征
图片链接:https://pic2.zhimg.com/80/v2-ae8a4d6f0ded77d731f179f361254db1_1440w.webp
2.2 Anchor-based中的two-stage目标检测算法
二阶段检测算法主要分为以下两个阶段 Stage1- 预选框 从图像中生成region proposals Stage2- 目标分类 从region proposals生成最终的物体边框。
2.2.1 RCNN
【简介】 RCNN[4]由Ross Girshick于2014年提出,RCNN首先通过选择性搜索算法Selective Search从一组对象候选框中选择可能出现的对象框,然后将这些选择出来的对象框中的图像resize到某一固定尺寸的图像,并喂入到CNN模型(经过在ImageNet数据集上训练过的CNN模型,如AlexNet)提取特征,最后将提取出的特征送入到SVM分类器来预测该对象框中的图像是否存在待检测目标,并进一步预测该检测目标具体属于哪一类。
论文链接:https://openaccess.thecvf.com/content_cvpr_2014/papers/Girshick_Rich_Feature_Hierarchies_2014_CVPR_paper.pdf
代码链接:https://github.com/rbgirshick/rcnn
【性能】 RCNN算法在VOC-07数据集上取得了非常显著的效果,平均精度由33.7%(DPM-V5, 传统检测的SOTA算法)提升到58.5%。相比于传统检测算法,基于深度学习的检测算法在精度上取得了质的飞跃。
【不足】 虽然RCNN算法取得了很大进展,但缺点也很明显:重叠框(一张图片大2000多个候选框)特征的冗余计算使得整个网络的检测速度变得很慢(使用GPU的情况下检测一张图片大约需要14S)。
为了减少大量重叠框带来的冗余计算,K. He等人提出了SPPNet。
2.2.2 SPPNet
【简介】 SPPNet[5]提出了一种空间金字塔池化层(Spatial Pyramid Pooling Layer, SPP)。它的主要思路是对于一张图像分成若干尺度的图像块(比如一副图像分成1份,4份,8份等),然后对每一块提取的特征融合在一起,从而兼顾多个尺度的特征。SPP使得网络在全连接层之前能生成固定尺度的特征表示,而不管输入图片尺寸如何。当使用SPPNet网络用于目标检测时,整个图像只需计算一次即可生成相应特征图,不管候选框尺寸如何,经过SPP之后,都能生成固定尺寸的特征表示图,这避免了卷积特征图的重复计算。
论文链接:https://link.springer.com/content/pdf/10.1007/978-3-319-10578-9_23.pdf
代码链接:https://github.com/yueruchen/sppnet-pytorch
【性能】 相比于RCNN算法,SPPNet在Pascal-07数据集上不牺牲检测精度(VOC-07, mAP=59.2%)的情况下,推理速度提高了20多倍。
【不足】 和RCNN一样,SPP也需要训练CNN提取特征,然后训练SVM分类这些特征,这需要巨大的存储空间,并且多阶段训练的流程也很繁杂。除此之外,SPPNet只对全连接层进行微调,而忽略了网络其它层的参数。
为了解决以上存在的一些不足,2015年R. Girshick等人提出Fast RCNN。
2.2.3 Fast RCNN
【简介】 Fast RCNN[6]网络是RCNN和SPPNet的改进版,该网路使得我们可以在相同的网络配置下同时训练一个检测器和边框回归器。该网络首先输入图像,图像被传递到CNN中提取特征,并返回感兴趣的区域ROI,之后再ROI上运用ROI池化层以保证每个区域的尺寸相同,最后这些区域的特征被传递到全连接层的网络中进行分类,并用Softmax和线性回归层同时返回边界框。
论文链接:https://openaccess.thecvf.com/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf
代码链接:https://github.com/rbgirshick/fast-rcnn
【性能】 Fast RCNN在VOC-07数据集上将检测精度mAP从58.5%提高到70.0%,检测速度比RCNN提高了200倍。
【不足】 Fast RCNN仍然选用选择性搜索算法来寻找感兴趣的区域,这一过程通常较慢,与RCNN不同的是,Fast RCNN处理一张图片大约需要2秒,但是在大型真实数据集上,这种速度仍然不够理想。
那么问题来了: “我们可以使用CNN模型来直接生成候选框吗?”,基于此,Faster RCNN的提出完美回答这一问题。
☆ 2.2.4 Faster RCNN
【简介】 Faster RCNN[7]是第一个端到端,最接近于实时性能的深度学习检测算法,该网络的主要创新点就是提出了区域选择网络用于申城候选框,能几大提升检测框的生成速度。该网络首先输入图像到卷积网络中,生成该图像的特征映射。在特征映射上应用Region Proposal Network,返回object proposals和相应分数。应用Rol池化层,将所有proposals修正到同样尺寸。最后,将proposals传递到完全连接层,生成目标物体的边界框。
论文链接:https://arxiv.org/pdf/1506.01497.pdf
代码链接:https://github.com/jwyang/faster-rcnn.pytorch
【性能】 该网络在当时VOC-07,VOC-12和COCO数据集上实现了SOTA精度,其中COCO mAP@.5=42.7%, COCO mAP@[.5,.95]=21.9%, VOC07 mAP=73.2%, VOC12 mAP=70.4%, 17fps with ZFNet
【不足】 虽然Faster RCNN的精度更高,速度更快,也非常接近于实时性能,但它在后续的检测阶段中仍存在一些计算冗余;除此之外,如果IOU阈值设置的低,会引起噪声检测的问题,如果IOU设置的高,则会引起过拟合。
2.2.5 FPN
【简介】 2017年,T.-Y.Lin等人在Faster RCNN的基础上进一步提出了特征金字塔网络FPN[8](Feature Pyramid Networks)技术。在FPN技术出现之前,大多数检测算法的检测头都位于网络的最顶层(最深层),虽说最深层的特征具备更丰富的语义信息,更有利于物体分类,但更深层的特征图由于空间信息的缺乏不利于物体定位,这大大影响了目标检测的定位精度。为了解决这一矛盾,FPN提出了一种具有横向连接的自上而下的网络架构,用于在所有具有不同尺度的高底层都构筑出高级语义信息。FPN的提出极大促进了检测网络精度的提高(尤其是对于一些待检测物体尺度变化大的数据集有非常明显的效果)。
论文链接:http://openaccess.thecvf.com/content_cvpr_2017/papers/Lin_Feature_Pyramid_Networks_CVPR_2017_paper.pdf
代码链接:https://github.com/jwyang/fpn.pytorch
【性能】 将FPN技术应用于Faster RCNN网络之后,网络的检测精度得到了巨大提高(COCO mAP@.5=59.1%, COCO mAP@[.5,.95]=36.2%),再次成为当前的SOTA检测算法。此后FPN成为了各大网络(分类,检测与分割)提高精度最重要的技术之一。
2.2.6 Cascade RCNN
论文链接:https://openaccess.thecvf.com/content_cvpr_2018/papers/Cai_Cascade_R-CNN_Delving_CVPR_2018_paper.pdf
代码链接:https://github.com/zhaoweicai/cascade-rcnn
【简介】 Faster RCNN完成了对目标候选框的两次预测,其中RPN一次,后面的检测器一次,而Cascade RCNN[9]则更进一步将后面检测器部分堆叠了几个级联模块,并采用不同的IOU阈值训练,这种级联版的Faster RCNN就是Cascade RCNN。通过提升IoU阈值训练级联检测器,可以使得检测器的定位精度更高,在更为严格的IoU阈值评估下,Cascade R-CNN带来的性能提升更为明显。Cascade RCNN将二阶段目标检测算法的精度提升到了新的高度。
【性能】 Cascade RCNN在COCO检测数据集上,不添加任何Trick即可超过现有的SOTA单阶段检测器,此外使用任何基于RCNN的二阶段检测器来构建Cascade RCNN,mAP平均可以提高2-4个百分点。
小结:
2.3 Anchor-based中的one-stage目标检测算法
一阶段目标检测算法不需要region proposal阶段,直接产生物体的类别概率和位置坐标值,经过一个阶段即可直接得到最终的检测结果,因此有着更快的检测速度。
2.3.1 YOLO v1
没有侯选框:直接对全分类+位置回归
论文链接:https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Redmon_You_Only_Look_CVPR_2016_paper.pdf
代码链接:https://github.com/abeardear/pytorch-YOLO-v1
【简介】 YOLO v1[10]是第一个一阶段的深度学习检测算法,其检测速度非常快,该算法的思想就是将图像划分成多个网格,然后为每一个网格同时预测边界框并给出相应概率。例如某个待检测目标的中心落在图像中所划分的一个单元格内,那么该单元格负责预测该目标位置和类别。
【性能】 YOLO v1检测速度非常快,在VOC-07数据集上的mAP可达52.7%,实现了155 fps的实时性能,其增强版性能也很好(VOC-07 mAP=63.4%, 45 fps, VOC-12 mAP=57.9%),性能要优于DPM和RCNN。
【不足】 相比于二阶段的目标检测算法,尽管YOLO v1算法的检测速度有了很大提高,但精度相对教低(尤其是对于一些小目标检测问题)。
2.3.2 SSD
论文链接:https://arxiv.org/pdf/1512.02325
代码链接:https://github.com/amdegroot/ssd.pytorch
【简介】 SSD[11]算法的主要创新点是提出了Multi-reference和Multi-resolution的检测技术。SSD算法和先前的一些检测算法的区别在于:先前的一些检测算法只是在网络最深层的分支进行检测,而SSD有多个不同的检测分支,不同的检测分支可以检测多个尺度的目标,所以SSD在多尺度目标检测的精度上有了很大的提高,对小目标检测效果要好很多。
【性能】 相比于YOLO v1算法,SSD进一步提高了检测精度和速度(VOC-07 mAP=76.8%, VOC-12 mAP=74.9%, COCO mAP@.5=46.5%, mAP@[.5,.95]=26.8%, SSD的精简版速度达到59 fps)。
2.3.3 YOLO v2
论文链接:https://openaccess.thecvf.com/content_cvpr_2017/papers/Redmon_YOLO9000_Better_Faster_CVPR_2017_paper.pdf
代码链接:https://github.com/longcw/yolo2-pytorch
【简介】 相比于YOLO v1,YOLO v2[12]在精度、速度和分类数量上都有了很大的改进。在速度上(Faster),YOLO v2使用DarkNet19作为特征提取网络,该网络比YOLO v2所使用的VGG-16要更快。在分类上(Stronger),YOLO v2使用目标分类和检测的联合训练技巧,结合Word Tree等方法,使得YOLO v2的检测种类扩充到了上千种。下图2-2展示了YOLO v2相比于YOLO v1在提高检测精度(Better)上的改进策略。
【性能】 YOLO v2算法在VOC 2007数据集上的表现为67 FPS时,mAP为76.8,在40FPS时,mAP为78.6。
【不足】 YOLO v2算法只有一条检测分支,且该网络缺乏对多尺度上下文信息的捕获,所以对于不同尺寸的目标检测效果依然较差,尤其是对于小目标检测问题。
2.3.4 RetinaNet
论文链接:https://openaccess.thecvf.com/content_ICCV_2017/papers/Lin_Focal_Loss_for_ICCV_2017_paper.pdf
代码链接:https://github.com/yhenon/pytorch-retinanet
【简介】 尽管一阶段检测算推理速度快,但精度上与二阶段检测算法相比还是不足。RetinaNet[13]论文分析了一阶段网络训练存在的类别不平衡问题,提出能根据Loss大小自动调节权重的Focal loss,代替了标准的交叉熵损失函数,使得模型的训练更专注于困难样本。同时,基于FPN设计了RetinaNet,在精度和速度上都有不俗的表现。
【性能】 RetinaNet在保持高速推理的同时,拥有与二阶段检测算法相媲美的精度(COCO mAP@.5=59.1%, mAP@[.5, .95]=39.1%)。
2.3.5 YOLO v3
论文链接:https://arxiv.org/pdf/1804.02767.pdf
代码链接:https://github.com/ultralytics/yolov3
【简介】 相比于YOLO v2,YOLO v3[14]将特征提取网络换成了DarkNet53,对象分类用Logistic取代了Softmax,并借鉴了FPN思想采用三条分支(三个不同尺度/不同感受野的特征图)去检测具有不同尺寸的对象。
【性能】 YOLO v3在VOC数据集,Titan X上处理608×608图像速度达到20FPS,在COCO的测试数据集上mAP@0.5达到57.9%。其精度比SSD高一些,比Faster RCNN相比略有逊色(几乎持平),比RetinaNet差,但速度是SSD、RetinaNet和Faster RCNN至少2倍以上,而简化后的Yolov3 tiny可以更快。
【不足】 YOLO v3采用MSE作为边框回归损失函数,这使得YOLO v3对目标的定位并不精准,之后出现的IOU,GIOU,DIOU和CIOU等一系列边框回归损失大大改善了YOLO v3对目标的定位精度。
2.3.6 YOLO v4
论文链接:https://arxiv.org/pdf/2004.10934
代码链接:https://github.com/Tianxiaomo/pytorch-YOLOv4
【简介】 相比于YOLO v4,YOLO v4[15]在输入端,引入了Mosaic数据增强、cmBN、SAT自对抗训练;在特征提取网络上,YOLO v4将各种新的方式结合起来,包括CSPDarknet53,Mish激活函数,Dropblock;在检测头中,引入了SPP模块,借鉴了FPN+PAN结构;在预测阶段,采用了CIOU作为网络的边界框损失函数,同时将NMS换成了DIOU_NMS等等。总体来说,YOLO v4具有极大的工程意义,将近年来深度学习领域最新研究的tricks都引入到了YOLO v4做验证测试,在YOLO v3的基础上更进一大步。
【性能】 YOLO v4在COCO数据集上达到了43.5%AP(65.7% AP50),在Tesla V100显卡上实现了65 fps的实时性能,下图2-3展示了在COCO检测数据集上YOLO v4和其它SOTA检测算法的性能对比。
2.3.7 YOLO V5
代码链接:https://github.com/ultralytics/yolov5
【简介】 目前YOLO V5公布了源代码,但尚未发表论文;与YOLO V4有点相似,都大量整合了计算机视觉领域的State-of-the-art,从而显著改善了YOLO对目标的检测性能。相比于YOLO V4,YOLO V5在性能上稍微逊色,但其灵活性与速度上远强于YOLO V4,而且在模型的快速部署上也具有极强优势。
【性能】 。如下图2-4展示了在COCO检测数据集上YOLO v5和其它SOTA检测算法的性能对比。
2.3.8 Anchor-based目标检测算法局限性
基于Anchor的目标检测算法主要有以下四大缺点:-
Anchor的大小,数量,长宽比对于检测性能的影响很大(通过改变这些超参数Retinanet在COCO benchmark上面提升了4%的AP),因此Anchor based的检测性能对于anchor的大小、数量和长宽比都非常敏感。
-
这些固定的Anchor极大地损害了检测器的普适性,导致对于不同任务,其Anchor都必须重新设置大小和长宽比。
-
为了去匹配真实框,需要生成大量的Anchor,但是大部分的Anchor在训练时标记为负样本,所以就造成了样本极度不均衡问题(没有充分利用fore-ground)。
-
在训练中,网络需要计算所有Anchor与真实框的IOU,这样就会消耗大量内存和时间。
小结
2.4 Anchor-Free中的目标检测算法
基于Anchor的物体检测问题通常被建模成对一些候选区域进行分类和回归的问题,在一阶段检测器中,这些候选区域就是通过滑窗方式产生Anchor box,而在二阶段检测器中,候选区域是RPN生成的Proposal,但是RPN本身仍然是对滑窗方式产生的Anchor进行分类和回归。基于Anchor的检测算法:由于Anchor太多导致计算复杂,及其所带来的大量超参数都会影响模型性能。近年的Anchor free技术则摒弃Anchor,通过确定关键点的方式来完成检测,大大减少了网络超参数的数量。
2.4.1 CornerNet
论文链接:http://openaccess.thecvf.com/content_ECCV_2018/papers/Hei_Law_CornerNet_Detecting_Objects_ECCV_2018_paper.pdf
代码链接:https://github.com/princeton-vl/CornerNet
【简介】 CornerNet[16]是Anchor free技术路线的开创之作,该网络提出了一种新的对象检测方法,将网络对目标边界框的检测转化为一对关键点的检测(即左上角和右下角),通过将对象检测为成对的关键点,而无需设计Anchor box作为先验框。
【性能】 实验表明,CornerNet在COCO数据集上实现了42.1%AP,该精度优于所有现有的单阶段检测网络。下图2-3展示了在COCO检测数据集上CornerNet和其它SOTA检测算法的性能对比。
【不足】 CornerNet只关注边缘和角点,缺乏目标内部信息,容易产生FP;该网络还是需要不少的后处理,比如如何选取分数最高的点,同时用offset来微调目标定位,也还需要做NMS。
2.4.2 CenterNet
论文链接:https://openaccess.thecvf.com/content_ICCV_2019/papers/Duan_CenterNet_Keypoint_Triplets_for_Object_Detection_ICCV_2019_paper.pdf
代码链接:https://github.com/Duankaiwen/CenterNet
【简介】 与CornerNet检测算法不同,CenterNet[17]的结构十分简单,它摒弃了左上角和右下角两关键点的思路,而是直接检测目标的中心点,其它特征如大小、3D位置、方向,甚至姿态可以使用中心点位置的图像特征进行回归,是真正意义上的Anchor free。该算法在精度和召回率上都有很大提高,同时该网络还提出了两个模块:级联角池化模块和中心池化模块,进一步丰富了左上角和右下角收集的信息。
【性能】 相比于一阶段和二阶段检测算法,CenterNet的速度和精度都有不少的提高,在COCO数据集上,CenterNet实现了47.0%的AP,比现有的一阶段检测器至少高出4.9%。下图2-4展示了在COCO检测数据集上CenterNet和其它SOTA检测算法的性能对比。
【不足】 在训练过程中,同一类别中的如果某些物体靠的比较近,那么其Ground Truth中心点在下采样时容易挤到一块,导致两个物体GT中心点重叠,使得网络将这两个物体当成一个物体来训练(因为只有一个中心点了);而在模型预测阶段,如果两个同类物体在下采样后的中心点也重叠了,那么网络也只能检测出一个中心点。
2.4.3 FSAF
论文链接:http://openaccess.thecvf.com/content_CVPR_2019/papers/Zhu_Feature_Selective_Anchor-Free_Module_for_Single-Shot_Object_Detection_CVPR_2019_paper.pdf
代码链接:https://github.com/hdjang/Feature-Selective-Anchor-Free-Module-for-Single-Shot-Object-Detection
【简介】 FSAF[18]网络提出了一种FSAF模块用于训练特征金字塔中的Anchor free分支,让每一个对象都自动选择最合适的特征。在该模块中,Anchor box的大小不再决定选择哪些特征进行预测,使得Anchor的尺寸成为了一种无关变量,实现了模型自动化学习选择特征。
【性能】 下图2-5展示了在COCO检测数据集上FSAF算法和其它SOTA检测算法的性能对比。
2.4.4 FCOS
论文链接:https://openaccess.thecvf.com/content_ICCV_2019/papers/Tian_FCOS_Fully_Convolutional_One-Stage_Object_Detection_ICCV_2019_paper.pdf
代码链接:https://github.com/tianzhi0549/FCOS
【简介】 FCOS[19]网络是一种基于FCN的逐像素目标检测算法,实现了无锚点(Anchor free),无提议(Proposal free)的解决方案,并且提出了中心度Center ness的思想。该算法通过去除Anchor,完全避免了Anchor的复杂运算,节省了训练过程中大量的内存占用,将总训练内存占用空间减少了2倍左右。
【性能】 FCOS的性能优于现有的一阶段检测器,同时FCOS还可用作二阶段检测器Faster RCNN中的RPN,并且很大程度上都要优于RPN。下图2-6展示了在COCO检测数据集上FCOS算法和其它SOTA检测算法的性能对比。
2.4.5 SAPD
论文链接:https://arxiv.org/pdf/1911.12448
代码链接:https://github.com/xuannianz/SAPD
【简介】 SAPD[20]论文作者认为Anchor point的方法性能不高主要还是在于训练的不充分,主要是注意力偏差和特征选择。因而作者提出了两种策略:1)Soft-weighted anchor points对不同位置的样本进行权重分配 2)Soft-selected pyramid levels,将样本分配到多个分辨率,并进行权重加权。而在训练阶段,作者前6个epoch采用FSAF的方式,而后6个epoch会将特征选择的预测网络加入进行联合训练。
【性能】 下图2-6展示了在COCO检测数据集上SAPD算法和其它SOTA检测算法的性能对比。
3
常用数据集及评价指标
3.1 常用数据集
3.1.1 四大公共数据集
Pascal VOC[21],ILSVRC[22],MS-COCO[23],和OID[24]数据集是目标检测使用最多的四大公共数据集,至于这四大数据集的介绍,此处不一一展开,大家可根据下方给出的链接了解:-
PASCAL VOC数据集详细介绍可参考: https://arleyzhang.github.io/articles/1dc20586/
-
ILSVRC数据集详细介绍可参考: https://cloud.tencent.com/developer/article/1747599
-
MS-COCO数据集详细介绍可参考: https://blog.csdn.net/qq_41185868/article/details/82939959
- Open Images(QID)数据集详细介绍可参考: https://bbs.easyaiforum.cn/thread-20-1-1.html
下图3-1展示了这四大检测数据集的样例图片及其标签
下表3-1展示了这四大检测数据集的数据统计结果:
3.1.2 其它数据集
检测任务包含了很多种,其中比较常见的检测任务有行人检测,脸部检测,文本检测,交通灯与交通标志检测,遥感图像目标检测。
3.2 常用评价指标
目标检测常用的评价指标有:交并比,准确率,精度,召回率,FPR,F1-Score,PR曲线-AP值,ROC曲线-AUC值,和mAP值和FPS。
3.2.1 交并比(IOU)
IOU = 两个矩形交集的面积 / 两个矩形并集的面积
如上图3-2,假设A是模型检测结果,B为Ground Truth,那么IOU = (A ∩ B) / (A ∪ B),一般情况下对于检测框的判定都会存在一个阈值,也就是IOU的阈值,一般将IOU值设置为大于0.5的时候,则可认为检测到目标物体。
3.2.2 准确率/精度/召回率/F1值/FPR
True positives (TP,真正): 预测为正,实际为正True negatives (TN,真负): 预测为负,实际为负False positives(FP,假正): 预测为正,实际为负False negatives(FN,假负): 预测为负,实际为正
3.2.3 PR曲线-AP值
模型精度,召回率,FPR和F1-Score值无法往往不能直观反应模型性能,因此就有了PR曲线-AP值 和 ROC曲线-AUC值
PR曲线就是Precision和Recall的曲线,我们以Precision作为纵坐标,Recall为横坐标,可绘制PR曲线如下图3-3所示:
评估标准:如果模型的精度越高,且召回率越高,那么模型的性能自然也就越好,反映在PR曲线上就是PR曲线下面的面积越大,模型性能越好。我们将PR曲线下的面积定义为AP(Average Precision)值,反映在AP值上就是AP值越大,说明模型的平均准确率越高。
3.2.4 ROC曲线-AUC值
ROC曲线就是RPR和TPR的曲线,我们以FPR为横坐标,TPR为纵坐标,可绘制ROC曲线如下图3-4所示:
评估标准:当TPR越大,FPR越小时,说明模型分类结果是越好的,反映在ROC曲线上就是ROC曲线下面的面积越大,模型性能越好。我们将ROC曲线下的面积定义为AUC(Area Under Curve)值,反映在AUC值上就是AUC值越大,说明模型对正样本分类的结果越好。
3.2.5 mAP
Mean Average Precision(mAP)是平均精度均值,具体指的是不同召回率下的精度均值。在目标检测中,一个模型通常会检测很多种物体,那么每一类都能绘制一个PR曲线,进而计算出一个AP值,而多个类别的AP值的平均就是mAP。
评估标准:mAP衡量的是模型在所有类别上的好坏,属于目标检测中一个最为重要的指标,一般看论文或者评估一个目标检测模型,都会看这个值,这个值(0-1范围区间)越大越好。
划重点!!!
一般来说mAP是针对整个数据集而言的,AP则针对数据集中某一个类别而言的,而percision和recall针对单张图片某一类别的。
3.2.6 FPS
Frame Per Second(FPS)指的是模型一秒钟能检测图片的数量,不同的检测模型往往会有不同的mAP和检测速度,如下图3-5所示:
目标检测技术的很多实际应用在准确度和速度上都有很高的要求,如果不计速度性能指标,只注重准确度表现的突破,其代价是更高的计算复杂度和更多内存需求,对于行业部署而言,可扩展性仍是一个悬而未决的问题。因此在实际问题中,通常需要综合考虑mAP和检测速度等因素。本小节参考目标检测中的评价指标有哪些[25
4应用场景和发展趋势
4.1 5大应用场景
1 行人检测 2 人脸检测 3 文本检测 4 交通信号检测 5 遥感目标检测4.2 7大发展趋势
1 轻量型目标检测 2 与AutoML结合的目标检测 3 领域自适应的目标检测 4 弱监督目标检测 5 小目标检测 6 视频检测 7 信息融合目标检测5
课程拓展
从2D检测 -> 3D检测 -> BEV检测 -> Occupancy Net
自动驾驶的视觉感知算法主要经历了四个阶段
- 2D检测
-
3D检测
-
BEV检测
-
Occupancy Net
直接输出车辆框在图像上的位置和大小(x,y,w,h)
PV视角 |
BEV (鸟瞰图) |
这个结果自动驾驶系统是不能直接用的,自动驾驶系统需要的是BEV(鸟瞰图)视角下物体的的位置
缺少了深度D或者高度H!!!
输入360度图像,直接给出BEV下的预测结果
对比:
2d检测:检测图像在2D上的位置->变换到bev坐标系->拼接多个相机的bev结果
Mono 3d检测:检测图像在3D上的位置->拼接多个相机的bev结果
3d检测:检测物体在bev上位置
Occupancy Net: 预测物体在BEV上的占用情况
GitHub地址 https://github.com/Charmve/OccNet-Course
《自动驾驶感知算法:从BEV到占据网络》视频、课件、源代码
GitHub地址 https://github.com/Charmve/OccNet-Course
推荐阅读
(点击标题可跳转阅读)
由于微信公众号试行乱序推送,您可能不再能准时收到迈微AI研习社的推送。为了第一时间收到报道, 请将“迈微AI研习社”设为 星标账号 ,以及常点文末右下角的“ 在看 ”。 迈微AI研习社
微信号: MaiweiE_com
GitHub: @Charmve
CSDN、知乎: @Charmve
投稿: yidazhang1@gmail.com
主页: github.com/Charmve
如果觉得有用,就请点赞、转发 吧!