1. 引言
目前路侧图像感知算法可分为Anchor-base和Anchor-free两大类,其中Anchor-base主要包括两阶段检测器如Faster Rcnn、Mask Rcnn等,单阶段检测器SSD,YOLO等算法。这些算法基于深度卷积网络搭建,一般分为骨干网络Backbone,瓶颈层Neck,检测头Head。其中Backbone主要用于特征提取,通过提取不同尺度,不同感受野,不同类别目标的特征,输入到Neck层;Neck层主要是将Backbone层提取的多层特征图进行融合加工,增加网络的表达能力;Head层主要用于预测目标的种类和位置。这些目标检测网络通过提取目标图像的深度特征进行分类预测。各类的主要代表方法如下:
分类名称 | 主要代表方法 |
Anchor-based之two-stage | RCNN,SPPNet,Fast RCNN,Faster RCNN,FPN,Cascade RCNN,Libra RCNN,Grid RCNN |
Anchor-based之one-stage | YOLOv1,SSD,YOLOv2,RetinaNet,YOLOv3,YOLOv4,YOLOv5 |
Anchor-free | CornerNet,CenterNet,FCOS,CPNDet,YOLOX,YOLOv6 |
2. 重要方法概述
2.1 R-CNN系列(two-stage)
Two stage目标检测算法先进行区域生成(region proposal,RPN)(一个有可能包含待检物体的预选框),再通过卷积神经网络进行样本分类。 任务:特征提取—>生成候选区域—>分类/定位回归。主要的twostage方法如下。
2.1.1 RCNN
RCNN的思路很简单:它首先通过选择性搜索来提取一组对象作为“提案(proposal)”并当做对象的候选框。然后将每个提案重新调整成一个固定大小的图像,再输入到一个在ImageNet上训练得到的CNN模型(如AlexNet)来提取特征。最后,利用线性SVM分类器对每个区域内的目标进行预测,识别目标类别。RCNN在VOC07测试集上有明显的性能提升,平均精准度(mean Average Precision,mAP)从33.7%(DPM-v5)大幅提高到58.5%。
虽然RCNN已经取得了很大的进步,但它的缺点是显而易见的:需要在大量重叠的提案上进行冗余的特征计算(一张图片超过2000个框),导致检测速度极慢(使用GPU时每张图片耗时14秒)。同年晚些时候,有人提出了SPPNet并克服了这个问题。
2.1.2 SPPNet
2014年,K. He等人提出了空间金字塔池化网络( Spatial Pyramid Pooling Networks,SPPNet)。以前的CNN模型需要固定大小的输入,例如AlexNet需要224x224图像。SPPNet的主要贡献是引入了空间金字塔池化(SPP)层,它使CNN能够生成固定长度的表示,而不需要重新调节有意义图像的尺寸。
利用SPPNet进行目标检测时,只对整个图像进行一次特征映射计算,然后生成任意区域的定长表示以训练检测器,避免了卷积特征的重复计算。SPPNet的速度是R-CNN的20多倍,并且没有牺牲任何检测精度(VOC07 mAP=59.2%)。
SPPNet虽然有效地提高了检测速度,但仍然存在一些不足:
第一,训练仍然是多阶段的。
第二,SPPNet只对其全连接层进行微调,而忽略了之前的所有层。而次年晚些时候出现Fast RCNN并解决了这些问题。
2.1.3 Fast RCNN
2015年,R.Girshick提出了Fast RCNN检测器,这是对R-CNN和SPPNet的进一步改进。Fast RCNN使我们能够在相同的网络配置下同时训练检测器和边界框回归器。在VOC07数据集上,Fast RCNN将mAP从58.5%( RCNN)提高到70.0%,检测速度是R-CNN的200多倍。
虽然Fast-RCNN成功地融合了R-CNN和SPPNet的优点,但其检测速度仍然受到提案检测的限制。然后,一个问题自然而然地出现了:“我们能用CNN模型生成对象提案吗?”之后的Faster R-CNN解决了这个问题。
2.1.4Faster RCNN
2015年,S.Ren等人提出了Faster RCNN检测器,在Fast RCNN之后不久。Faster RCNN是第一个端到端的,也是第一个接近实时的深度学习检测器(COCOmAP@.5=42.7%,COCOmAP@[.5,.95]=21.9%,VOC07mAP=73.2%,VOC12mAP=70.4%)。
图1 Faster RCNN结构
Faster RCNN的主要贡献是引入了区域提案网络(RPN)从而允许几乎所有的cost-free的区域提案。从RCNN到Faster RCNN,一个目标检测系统中的大部分独立块,如提案检测、特征提取、边界框回归等,都已经逐渐集成到一个统一的端到端学习框架中。
虽然Faster RCNN突破了Fast RCNN的速度瓶颈,但是在后续的检测阶段仍然存在计算冗余。后来提出了多种改进方案,包括RFCN和 Light head RCNN。
2.1.5Feature Pyramid Networks(FPN)
2017年,T.-Y.Lin等人基于Faster RCNN提出了特征金字塔网络(FPN)[21]。在FPN之前,大多数基于深度学习的检测器只在网络的顶层进行检测。虽然CNN较深层的特征有利于分类识别,但不利于对象的定位。
为此,开发了具有横向连接的自顶向下体系结构,用于在所有级别构建高级语义。由于CNN通过它的正向传播,自然形成了一个特征金字塔,FPN在检测各种尺度的目标方面显示出了巨大的进步。
在基础的FasterRCNN系统中使用FPN骨架可在无任何修饰的条件下在MS-COCO数据集上以单模型实现state-of-the-art的效果(COCOmAP@.5=59.1%,COCOmAP@[.5,.95]=36.2%)。FPN现在已经成为许多最新探测器的基本组成部分。
2.2 YOLO系列
2.2.1 YOLOv3
YOLOv3使用多标签分类(独立的logistic分类器)来适应包含许多重叠标签的更复杂数据集。其次,YOLOv3利用三种不同比例的feature map来预测边界盒。最后的卷积层预测三维张量:编码类的预测、对象性和边界框。第三,YOLOv3提出了一个更深入、更健壮的特征提取器,称为Darknet-53,灵感来自ResNet。
2.2.2YOLOv4
YOLOv4模型是一种单阶段的目标检测网络,该方法在图像检测中具有较好的检测效果,其结构如图1所示。与双阶段目标检测网络不同,YOLO网络引入Anchor-base思想,对图像进行三个尺度的预测,每个尺度下的特征点预测3个锚框。YOLOv4的骨干网络使用的CSPDarknet53结构,其主要由5层残差网络Res Block组成,以输入图像像素尺寸416*416为例,通过Res Block下采样降低特征尺寸,以方便提取图像数据的特征信息。Neck部分主要是由空间金字塔池化SPP模块和像素聚合网络PANet模块组成。SPP模块可以对不同尺寸的图像输出固定大小的特征图,通过空间金字塔池化可以增加网络的感受野。PANet模块通过融合自底向上和自顶向下两个路径增加模型的表征能力。Head部分主要是三个YOLO的检测头部分,其主要作用是得到输出之后,与真实的数据标注值比较,计算出模型的损失,主要包含目标框定位损失、置信度损失、分类损失,通过损失函数求导进行反向传播来更新模型。
图2yolov4结构
YOLOv4是提出了多种方法,包括mosaic、dropblock、mish激活、SAT自对抗训练;使用FPN+PAN的结构,基于scale YOLO 设计了CSPDarknet53,YOLOv4-tiny等优秀的模型;同时作者对同时期主流的方法都进行测试,包括labelsmooth,SAM(空间注意力),高斯YOLO头,BiFPN,weightshortcut等一系列的方法。在目前众多版本的YOLO模型中仍然保持较高的地位。
2.2.2 YOLOX
YOLOX及之后的YOLOv6、PPYOLOE等模型都是基于Anchor-free,这主要得益于simOTA标签分配算法的使用,simOTA通过iou确定top-k的值,再通过代价矩阵筛选前k个值做为正样本。同时提取decouple head解耦头,将分类任务与回归任务分离,有效提高AP值和收敛速度。
2.2.3YOLOv6
YOLOv6是对YOLOX的继续改进。YOLOv6引入RepVGG结构,提出了效率更高的EfficientRep,同样为了降低在硬件上的延时,在Neck上的特征融合结构中也引入了Rep结构。在Neck中使用的是Rep-PAN,重新设计出了一个更高效的解耦头结构,减少了一层卷积;前15轮使用topk为9的ATSS分配,通过先计算gt框与Anchor之间的距离,筛选前k个值为候选正样本,计算候选正样本与gt框之间的均值方差的和作为阈值,筛选iou大于阈值的候选框作为正样本;随着模型具备一定的学习能力,使用TOOD任务对齐分配,该方法主要将任务对齐指标作为分类的准则,加入到分类损失中。
损失函数方面使用siou作为iou损失;分类损失使用varifocal_loss,VFL提出了非对称的加权操作。正负样本有不平衡的问题,同样在正样本中也有不等权的问题,意思就是要更多的发现有价值的正样本,正样本和负样本权重计算方式不同,每个正负样本在计算loss时的权重都是不同的,达到了非对称的加权操作。
图3 YOLOv6结构
2.3 其他模型
2.3.1 SSD(Anchor-base)
SSD算法的主要优势体现在使用了多尺度的特征图来做检测,同时每个尺寸的特征图都会设计不同尺度和长宽比的Anchor,这些思想都影响之后出现的目标检测模型。高分辨率的特征图用来预测小目标,低分辨率预测大目标,多尺度的Anchor设计也使这些Anchor-base网络的预测精度更加的高。
图4 SSD结构
2.3.2 CenterNet(Anchor-free)
与CornetNet算法相比,CentrtNet结构更加简洁,它摒弃了左上和右下角关键点预测的思路,而是直接预测检测目标的中心点,其他特征如大小,3D位置,方向,甚至姿态可以使用中心点位置的图像特征进行回归,是真正意义上的Anchor free。CenterNet的输出包含三部分,其中heatmap每张图会表示一个类别,将预测中心点与gt中心点使用高斯核绘制到同一张特征图下,使用focalloss 计算gt与预测的差异。由于输出步长会导致离散误差的出现,所以使用一个输出头预测每个中心点的局部偏移量。另外一个输出头将预测目标框的宽高。
图5 CenterNet结构
2.3.3 FCOS(Anchor-free)
· FCOS网络是一种逐像素的目标检测算法,由于不需要先验框,大大降低了样本量和参数量,计算量也大大降低。FCOS对于小目标检测的效果也不错,通过多尺度检测,增加了可以预测的框的数量。FCOS采用了resnext和fpn作为模型的backbone,并设计centerness分支用来预测用于锚点相对于检测框的中心性。另外的分支分别为分类分支和回归分支。FCOS第一次使用了FPN结构,并成为后期目标检测模型的基本单元。
图6 Fcos结构
目标检测进展
目标检测算法的改进主要基于三个方面。特征提取网络(Backbone)对于目标检测模型性能的提升至关重要,一些经典的特征提取网络对目标检测任务精度起到了重要的推动作用,如AlexNet、VGG、GoogLeNet、ResNet、DenseNet、SENet等等。随着卷积神经网络的发展,业界不断涌现出了一些新的特征提取网络,性能更是步步攀升。一些先进的特征提取网络被应用于目标检测模型的特征提取Backbone,使得目标检测模型的精度与速度不断提升,比如STDN,DSOD,TinyDSOD和DenseNet等等。作为当时实力分割的SOTA算法,Mask RCNN采用了ResNeXt作为网络的Backbone。高效的特征表示是提升目标检测性能的关键,近年来,许多研究学者在特征提取网络中加入一些Trick去提高网络的特征提取能力。而用于提高网络表征能力的两项最重要的方法便是:1)高效的特征融合 和2)学习出具备大感受野的高分辨率特征表示。目标检测中边界框的回归策略。目标定位的改进。目标定位改进:1)包围框提精。2)改进loss函数用于较精确定位
3.1 特征提取网络
特征提取网络由最开始的VGG19,Inception,resnet101,到后续提出的Darknet53,CSPDarknet,这些网络都倾向于设计更多的分支以及更多融合支路来提高算法的表达能力。随着算力的提高,以transform为提取层的目标检测网络也开始兴起,DETR就是一款典型的目标检测模型。最近一年来,基于硬件部署设计REPVGG结构也得到广泛应用,目前工业主流应用的目标检测模型都是基于此开发。YOLOv6的EfficientNet,百度设计的PPYOLO等算法,通过在部署时对REP模块进行整合,在不增加资源及延时的情况下,有效提高了模型的检测精度。
图7 REPVGG结构
RepVGGBlock是一种简单又强力的CNN结构,在训练时使用了性能高的多分支模型,而在推理时使用了速度快、省内存的单路模型,也是使得模型更具备速度和精度的均衡。下图展示了RepVGG的部分结构,在Block中分别加入了identity和 1×1branches.丰富的支路组合有利于提高模型的表征能力,同时残差的引入也避免了模型过拟合,使得网络更加易于收敛。在模型推理阶段,通过融合策略将所有网络层转化为3×3卷积,便于模型的部署和加速。
3.2特征融合层
主流特征融合是以FPN为基础,陆续人们提出了BiFPN,PAN,GFPN等更加复杂的融合层。FPN旨在对CNN骨干网络提取的不同分辨的多尺度特征进行融合。FPN通过对不同尺度的特征进行上采样融合,将高维度信息传递,使得语义信息增强。PAN在FPN的基础上,通过自下而上的结构将高分辨率的细节信息也传递到低分变率层,使得低维定位信息得到增强。BiFPN通过增加残差结构,进一步增强特征的表征能力;移除单输入边的节点,BiFPN认为,输入边的节点没有特征融合,移除能减少计算量;最后加入权值融合,在级跳结构中加入可训练的权重,调节每个尺度的贡献度。GFPN由阿里达摩院提出,设计了一种小骨干网络,大neck的结构,在FPN中增加跳层以及跨尺度连接,使模型能充分进行高层与底层的信息交互,有效提高了模型精度。
图8 FPN结构
3.3 预测输出层
模型的输出层主要通过anchor设计来定位中心点和边界,从这一点来说,Anchor-base与Anchor-free都是基于Anchor-point设计的。目前主流的输出层都是以直接预测中心点位置,边界框位置和类别为主,但也也有一些比如FCOS预测边界的中心度,centernet输出heatmap层。以YOLOv3-5为代表通过3个输出头预测一个255通道的信息,也就是说分类预测与位置回归公用一个分支,Decouple解耦头的提出,以YOLOXYOLOv6为代表的Anchor-free成为现在的顶流,这些模型将分类任务与回归任务进行分离,有效提高了模型的检测精度
图10 解耦头结构
3.4 正负样本分配
YOLOv3正负样本定义(可能的问题:多个目标被分配到一个anchor,cnchor重写2.数据集类别尺寸分别过小,anchor分配不均衡)。1.每一个目标都只有一个正样本,max-iou matching策略,匹配规则为IOU最大(没有阈值),选取出来的即为正样本;2.IOU<0.2(人为设定阈值)的作为负样本;3.除了正负样本,其余的全部为忽略样本。比如drbox与gtbox的IOU最大为0.9,设置IOU小于0.2的为负样本。那么有一个IOU为0.8的box,那么这个box就是忽略样本,有一个box的IOU为0.1,那么就是负样本;同样的drbox与gtbox的IOU最大为0.4,那么它也是正样本。4.正anchor用于分类和回归的学习,正负anchor用于置信度confidence的学习,忽略样本不考虑。
YOLOv4正负样本定义,YOLOv4采用了不同于YOLOv3的multi anchor策略,即只要大于IoU阈值的anchor box,都统统视作正样本,换言之,那些原本在YOLOv3中会被忽略掉的样本,在YOLOv4中则统统成为了正样本,不难看出,YOLOv4的正样本会略微多于YOLOv3,对性能的提升也自然会有一些帮助。GT需要利用max iou原则分配到不同的预测层yolo-head上去,然后在每个层上单独计算正负样本和忽略样本。不存在某个GT会分配到多个层进行预测的可能性,而是一定是某一层负责的。
YOLOv5正负样本定义。yolov5输出有3个预测分支,每个分支的每个网格有3个anchor与之对应。没有采用IOU最大的匹配方法,而是通过计算该boundingbox和当前层的anchor的宽高比,如果最大比例大于4(设定阈值),则比例过大,则说明匹配度不高,将该bbox过滤,在当前层认为是背景;计算这些box落在哪个网格内,同时利用四舍五入规则,找出最近的两个网格,将这三个网格都认为是负责预测该bbox的,所以理论上最多一个gt会分配9个正样本anchor,最少为3个(因为引入了相邻两个网格)。
YOLOx采用的simOTA算法进行样本分配。simOTA通过iou确定top-k的值,再通过代价矩阵筛选前k个值做为正样本。
YOLOv6在训练的前期采用了ATSS分配方法,后面采用TOOD的分配方法。前15轮使用topk为9的ATSS分配,通过先计算gt框与Anchor之间的距离,筛选前k个值为候选正样本,计算候选正样本与gt框之间的均值方差的和作为阈值,筛选iou大于阈值的候选框作为正样本;随着模型具备一定的学习能力,使用TOOD任务对齐分配,该方法主要将任务对齐指标作为分类的准则,加入到分类损失中。
3.5 损失函数
目标框位置的损失函数L1 Loss,梯度值为1或-1,在接近准确值时,会以learning_rate在准确值附近波动,比较难获得准确效果;L2 Loss,在距离准确值较远的地方梯度值较大,训练初期收敛难度大,容易受到噪声的干扰;Smooth L1 Loss,克服了以上两种损失函数的缺点,但将x,y,h,w作为独立的变量的看待,割裂了他们之间的相对关系;IoU Loss,考虑重合面积,可以较好的反应预测框和真实框的接近程度,但是但二者不相交时,损失值恒为1
;GIoU Loss,考虑了不重合部分的面积对于损失的影响;DIoU Loss,考虑了中心点的偏移,即两个框中心的距离与两个框最远距离的比值;CIoU Loss,考虑了长和宽的比值;SIOULoss,考虑损失函数的收敛方向,加快收敛。
分类损失使用softmax,但考虑一个物体多类别的情况,交叉熵损失被使用。随着retinanet的提出,用来解决正负难易样本平衡的focalloss被广泛的应用。varifocal_loss损失函数,VFL提出了非对称的加权操作,认为正负样本不应该平等的对待。任务对齐Task-aligned Loss考虑了任务对齐,通过显示增加对齐的得分,降低不对齐的得分来提高分类的精度。
目标检测难点问题
· 针对交通道路场景下的目标检测,主要有以下问题:
· 待检测目标尺寸很小,导致占比小,检测难度大;
· 待检测目标尺度变化大,网络难以提取出高效特征;
· 待检测目标所在背景复杂,噪音干扰严重,检测难度大;
· 待检测目标与背景颜色对比度低,网络难以提取出具有判别性的特征;
· 各待检测目标之间数量极度不均衡,导致样本不均衡;
· 检测算法的速度与精度难以取得良好平衡。