目标检测是计算机视觉的一个非常重要的核心方向,它的主要任务目标定位和目标分类。
在深度学习介入该领域之前,传统的目标检测思路包括区域选择、手动特征提取、分类器分类。由于手动提取特征的方法往往很难满足目标的多样化特征,传统方法始终没能很好的解决目标检测问题。
深度学习兴起之后,神经网络可以从大量数据中自动学出强大的特征提取和拟合能力,因而涌现出很多性能优良的目标检测算法。
基于深度学习的目标检测方法大致可分为三类——双阶段目标检测、单阶段目标检测、基于transformer的目标检测,本文将分别介绍这三类方法。
常用数据集
VOC数据集
VOC数据集[1]是目标检测领域的常用数据集,共有约10,000张带有边界框的图片用于训练和验证,每张图片有像素级别的分割标注、边界框标注以及目标类别标注,其中包含车辆、家具、动物、人4个大类,20个小类。
该数据集被广泛用作目标检测、语义分割、分类任务的基准数据集。
COCO数据集
COCO[2]的全称是Microsoft Common Objects in Context,它是微软于2014年出资标注的数据集,与ImageNet竞赛一样,COCO目标检测竞赛也被视为是计算机视觉领域最受关注和最权威的比赛之一。
相比于规模较小的VOC数据集,COCO是一个大型、丰富的物体检测、分割数据集。这个数据集以scene understanding为目标,主要从复杂的日常场景中截取,并通过精确的segmentation进行目标位置的标定。
图像包括91类目标,328,000影像和2,500,000个label。提供的类别有80 类,有超过33 万张图片,其中20 万张有标注,整个数据集中个体的数目超过150 万个。
双阶段目标检测算法
相较于单阶段目标检测算法,双阶段目标检测算法先根据图像提取候选框,然后基于候选区域做二次修正得到检测点结果,检测精度较高,但检测速度较慢。
这类算法的开山之作是RCNN[3],随后Fast RCNN[4]、Faster RCNN[5]依次对其进行了改进。
由于优秀的性能,Faster RCNN至今仍然是目标检测领域很有竞争力的算法。随后,FPN[6]、Mask RCNN[7]等算法又针对Faster RCNN的不足提出了改进,这进一步丰富了Faster RCNN的组件,提升了它的性能。
RCNN
RCNN是首个将深度学习应用到目标检测领域的工作,它的算法的思想较为简单:对于每张图片,RCNN首先采用选择性搜索算法[1]生成大约2000个候选区域。随后将每个候选区域的尺寸转换为固定大小,并用CNN提取候选区域的特征。随后使用SVM分类器判断候选区域的类别,使用线性回归模型,为每个物体生成更精确的边界框。
尽管RCNN取得了很大进展,它仍然有很多缺点:首先,整个目标检测阶段涉及到三个模型,用于特征提取的CNN、用于分辨目标物体类别的SVM分类器、用于调整边界框的线性回归模型。RCNN无法做到端到端训练,只能分别训练这三个模型,这增大了训练难度与训练时间。
其次,每张图片要提取2000个训练区域,随后又要用CNN分别提取每个区域的特征,特征的数量将非常大,这降低了模型的推理速度。通常每张图片需要45秒进行预测,基本无法处理大型数据集。
图1:RCNN算法流程
Fast RCNN
在RCNN中,每个候选区域都需要用CNN单独提取特征。为了减少算法的计算时间,Fast-RCNN希望在每张图片上只使用一次CNN,就能提取到所有关注区域的特征。为此,RCNN设计了如下步骤的目标检测算法:
首先对图片使用启发式算法,得到大量候选区域。随后将图片输入到卷积神经网络中,得到图片的特征,与候选区域的相对位置结合,就可以得到候选区域的特征。随后使用ROI池化层将候选区域调整至相同尺寸,并将调整后的结构输入到全连接神经网络中。最后在全连接神经网络后面添加softmax层,预测目标的列别;并以相同的方式添加线性回归层。
与RCNN相比,Fast RCNN计算一张图片只需要2秒,速度有大幅提升,每张图片的计算时间只有但仍不够理想。因为它依然用到了选择性搜索方法得到感兴趣区域,而这一过程通常很慢。
图2:Fast RCNN网络结构
Faster RCNN
Faster RCNN针对感兴趣区域的生成方式,对RCNN进行了优化,进一步提高了计算速度和准确率。具体来说,Faster RCNN使用Reigion Proposal Network(RPN)生成感兴趣区域:
首先,将图片输入到CNN中得到高层特征映射,随后将其传递到RPN中。
RPN会在特征映射上使用一个滑动窗口,并在每个窗口设置K个不同大小、不同长宽比的先验框。
对于每个先验框,RPN会分别预测该框包含目标物体的概率,以及对该框的调整回归量。最终得到不同形状、尺寸的边界框,调增尺寸后将其传递到完全连接层,得到目标类别以及最终的先验框。
Faster RCNN进一步提高了计算速度,并获得了较高的准确率。时至今日,依然是目标检测领域的主流算法之一。
图3:RPN的网络结构
FPN
Faster R-CNN是利用单个高层特征图(下采样四倍的卷积层——Conv4)进行物体的分类和bounding box的回归。这样做对小物体的检测不利,因为小物体本身具有的像素信息较少,在下采样的过程中,这些信息很容易丢失,从而降低了算法的性能。
为了处理这种物体大小差异十分明显的检测问题,FPN提出了特征金字塔网络结构,它引入了多尺度特征,在只增加少量计算量的情况下,提升小物体的检测性能。
具体来说,Faster RCNN将最后一层特征输入到了RPN中,最后一层的特征经过3x3卷积,得到256个channel的卷积层,再分别经过两个1x1卷积得到类别得分和边框回归结果。
而FPN将P2、P3、P4、P5、P6这五个特征层的特征都输入到了RPN中。每个特征层的下采样倍数不同,这意味着它们具有不同的尺度信息分离,因此作者将322、642、1282、2562、5122这五种尺度的anchor,分别对应到P2、P3、P4、P5、P6这五个特征层上,这样一来,每个特征层只需要专门处理单一的尺度信息即可。
此外,作者通过实验发现,如果将这5个特征层后面的RPN参数共享,所得到的结果与不共享几乎没有差别。这说明不同下采样倍数之间的特征有相似语义信息。
在FPN问世之后,立刻成为了Faster RCNN的必要组成部件。
图4:FPN的网络结构
Mask RCNN
相较于Faster RCNN,Mask RCNN采用了全新的、性能更强的ResNeXt-101+FPN的组合作为backbone提取输入图片的特征。并在网络最后额外添加了一个分支,进行mask预测任务,这将有助于提升特征提取网络和RPN的性能。
此外,Mask RCNN还提出了一个改进,将原先的ROI池化层改进成ROIAlign层。在Faster RCNN中,有两次整数化的操作:(1)RPN输出的边界框回归值通常是小数,为了方便操作,会直接通过四舍五入把其整数化。(2)在ROI池化层中,整数化后的边界区域被平均分割成了K×K个单元,因此需要对这些单元的边界进一步整数化。
Mask RCNN的作者指出,经过这两次整数化后的候选框,已经和最开始RPN输出的候选框有了一定的位置偏差,这将影响模型的准确度。为此,作者提出了ROI Align方法,它没有采用整数化操作,而是使用双线性插值方法,获得浮点数坐标的像素值。
图5:Mask RCNN的网络结构
单阶段目标检测算法
相较于双阶段目标检测算法,单阶段目标验测算法直接对图像进行计算生成检测结果,检测低速度快,但检测精度低。
这类算法的开山之作是YOLO[8],随后SSD [9]、Retinanet[10]依次对其进行了改进,提出YOLO的团队将这些有助于提升性能的 trick融入到YOLO算法中,后续又提出了4个改进版本YOLOv2~YOLOv5。
尽管预测准确率不如双阶段目标检测算法,由于较快的运行速度,YOLO成为了工业界的主流。
YOLO
双阶段目标检测需要预先设置大量先验框,并且需要专门的神经网络RPN对先验框进行位置修正。这种设定使得双阶段目标检测算法复杂且计算慢。
YOLO是单阶段目标检测的开山之作,它只需要用神经网络处理一次图片,就可以同时预测得到位置和类别,从而将目标检测任务定义为端到端的回归问题,提升了计算速度。YOLO的工作流程如下:
对于一张输入图片,首先将图片缩放成统一的尺寸,并在图片上划分出若干表格。随后使用卷积神经网络提取图片特征,并使用全连接层在每个网格上进行回归预测,每个网格预测K个box,每个box预测五个回归值。其中的四个回归值代表box的位置,第五个回归值代表box中含有物体的概率和位置的准确程度。
随后对于含有物体的box,使用全连接层,回归预测物体的在各个类别的条件概率。因而,卷积网络共输出的预测值个数为N×(K×5+C),其中N为网格数,K为每个网格生成box个数,C为类别数。
尽管单阶段模型显著提高了计算速度,YOLO划分网格的方式较为粗糙,在小目标检测任务上表现不佳,总体性能弱于Faster RCNN。
图6:YOLO的检测流程
SSD
针对YOLO的不足,SSD借鉴了双阶段目标检测算法的一些trick,在YOLO的基础上进行了一系列改进:
YOLO利用单个高层特征进行目标检测,SSD则是将特征提取网络中不同层的多个特征输入到目标检测模块,以希望提升小物体检测的精度。
YOLO在每个网格上预测多个边界框,但这些预测都相对这个正方形网格本身,与真实目标多变的形状差异较大,这使得YOLO需要在训练过程中自适应目标的形状。SSD借鉴了Faster R-CNN中先验框理念,为每个网格设置不同尺度、长宽比的先验框,这在一定程度上减少训练难度。
SSD还使用卷积层络替代全连接层,针对不同特征图进行回归预测,这样一来,对于形状为mxnxp的特征图,只需要采用3x3xp这样比较小的卷积核得到检测值,进一步减少了模型的参数量,提高了计算速度。
SSD的改进,使得单阶段目标检测算法的性能基本与当时的Faster-RCNN持平,不过后续又被Faster-RCNN类算法超越。
图7:SSD的网络结构
Retinanet
相较于SSD,RetinaNet并没有模型层面的创新,模型的性能提升主要源自于Focal Loss,它进一步解决了目标检测中的类别不平衡问题。
单阶段目标检测模型常常会面临严重的正负样本不平衡问题,由于算法会在图片的每个位置密集抽样,而图片中的样本数量有限,因此候选区域中的物体数量会显著小于背景数量。
对于两阶段目标检测模型,正负样本不平衡问题得到了一定的缓解。因为第一阶段的RPN可以避免生成很大一部分负样本,最终第二阶段的检测模块只需要处理少量候选框。
针对正负样本不均衡问题,SSD算法采用了hard mining,从大量的负样本中选出loss最大的topk个负样本以保证正负样本比例为1:3。
相较于SSD的抽样方法,Focal Loss从损失函数的视角来解决样本不平衡问题,它根据置信度动态调整交叉熵损失函数,当预测正确的置信度增加时,loss的权重系数会逐渐衰减至0,这使得模型训练的loss更关注难例,而大量容易的例子loss贡献很低。
YOLO的后续版本
YOLO的团队借鉴了其它有助于提升性能的 trick融入到YOLO算法中,后续又提出了4个改进版本YOLOv2~YOLOv5。
YOLOv2使用了很多trick,包括:Batch Normalization、高分辨率图像分类器、使用先验框、聚类提取先验框的尺度信息、约束预测边框的位置、在passthrough层检测细粒度特征、分层分类等。
YOLOv3借鉴了SSD的思想,使用了多尺度特征进行目标检测,与SSD不同的是,YOLOv3采用上采样+特征融合的方式,对多尺度特征进行了一定的融合。
后续版本采用了Retinanet提出的Facol loss,缓解了正负样本不均衡问题,进一步提升了模型表现。
基于transformer
的方法
对于目标检测任务而言,理论上讲,各个目标之间的关系是有助于提升目标检测效果的。尽管传统目标检测方法使用到了目标之间的关系,直到Transformer[11]模型面世,无论是单阶段还是双阶段目标检测,都没有很好地利用到注意力机制。
一个可能的原因是目标与目标之间的关系难以建模,因为目标的位置、尺度、类别、数量都会因图像的不同而不同。而现代基于CNN的方法大多只有一个简单、规则的网络结构,对于上述复杂现象有些无能为力。
针对这种情况,Relation Net[12]和DETR[13]利用Transformer将注意力机制引入到目标检测领域。Relation Net利用Transformer对不同目标之间的关系建模,在特征之中融入了关系信息,实现了特征增强。DETR则是基于Transformer提出了全新的目标检测架构,开启了目标检测的新时代。
Relation Net
尽管用到了Transformer,Relation Net仍然是基于Faster RCNN的改进工作。Faster RCNN会通过RPN网络生成一系列感兴趣区域,随后将感兴趣区域输入到神经网络中预测目标的位置和类别。
Relation Net并没有直接将感兴趣区域输入到最终的预测网络中,而是先将这些感兴趣区域输入到transformer中,利用注意力机制,融合不同感兴趣区域的关系信息,进而实现特征增强。随后,再将transformer的输出送入到最终的预测网络中,预测目标的位置和类别。
此外,作者还用transformer模块取代了非极大值抑制模块(NMS),真正实现了端到端训练。
图8:Relation module的结构
DETR
DETR是首个用transformer完成目标检测任务的代表性工作。
首先,DETR使用CNN提取图片的特征,再加上NLP领域常用的位置编码,最终生成了一批序列化数据。
在encoder阶段,将序列化数据其送入encoder中,利用注意力机制提取数据中的特征。在decoder阶段,输入N个随机初始化向量,每个object query关注图片的不同位置。经过decoder的解码,最终会生成N个向量,每个向量对应一个检测到的目标。最后将这N个向量输入到神经网络中,得到每个目标的类别和位置。
相较于其它目标检测算法,DETR生成的检测框数量大幅减少,与真实的检测框数量基本一致。DETR使用匈牙利算法,将预测框与真实框进行了匹配,随后就可以计算出loss,完成对模型的训练。
DETR取得了好于Faster RCNN的检测效果,并且它不需要预先指定候选区域,不需要使用NMS去除重复的目标框,算法流程十分简洁。
图9:DETR的算法流程
总结
凭借着强大的特征提取能力,深度学习帮助目标检测算法取得了长足的发展。
从RCNN开始,相关科研人员不断引入新的机制、新的trick,以提高这类算法的精度。最终,以Faster RCNN为代表的双阶段目标检测算法取得了很高的预测准确率。
相较于Faster RCNN,以YOLO为代表的单阶段目标检测算法在保证较高预测精度的同时取得了很高的计算速度,凭借其优秀的实时性,在工业界取得了广泛应用。
去年提出的以DETR为代表的视觉Transformer算法将注意力机制引入到目标检测领域。DETR凭借其简洁优雅的结构、超过Faster RCNN的准确率,吸引了越来越多的目标检测从业者开展视觉transformer的研究。从目前的发展态势来看,视觉transformer必将进一步推动目标检测的快速进展。
原文标题:目标检测 - 主流算法介绍 - 从RCNN到DETR
文章出处:【微信公众号:机器视觉智能检测】欢迎添加关注!文章转载请注明出处。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !