在图像分类问题中,ResNet、VGG、GoogLeNet、AlexNet等网络要识别出给定图片中的物体的类别。分类是非常有意义的基础研究问题,但在实际中难以直接发挥作用。因为实际应用中的一张图片往往有非常复杂的场景,可能包含几十甚至上百种物体,而图像分类算法处理的图片中只有一个物体。因此实际应用中,不但要把一个物体检测出来,还要框出来(定位),更进一步要把图片中所有物体都检测出来并框出来。这就是图像目标检测的使命。
目前,基于卷积神经网络的图像目标检测算法主要分为两大类:两阶段和一阶段。两阶段(two-stage)算法基于候选区域方法,首先产生边界框把所有物体框出来;然后用基于卷积神经网络的图像分类算法对每个候选区域进行分类。两阶段算法的代表是R-CNN系列算法。一阶段(one-stage)算法对输入图像直接处理,同时输出物体定位及其类别,即在框出来物体的同时对物体进行分类,主要包括YOLO系列以及SSD算法。
本节首先介绍图像目标检测算法的评价指标,然后介绍三种图像目标检测算法,包括R-CNN系列、YOLO系列以及SSD算法。
常用的目标检测数据集包括PASCAL VOC [70] 和MSCOCO [71] 。PASCAL VOC [70] 是PASCAL视觉目标分类挑战赛所使用的数据集,有VOC2007和VOC2012两个版本,包含20个类别的标注。其中VOC2007中包含9963张标注过的图片,共标注出24 640个物体,VOC2012有11 540张标注图片共27 450个物体。PASCAL VOC是目标检测领域经典的基准数据集,但随着目标检测网络的规模不断扩大,能力不断增强,PASCAL VOC的规模和类别数量制约了评测更强目标检测网络的能力。因此微软建立了规模更大的目标检测数据集MSCOCO [71] 。目前目标检测领域常用的版本是COCO2017,包含80个类别,训练集和验证集共包含约12万张图像。平均每张图片中包含7个物体,一张图片中最多可能包含63个物体,且图片中物体的尺寸跨度较大,对目标检测带来极大的挑战。
目标检测领域常用的评价指标是mAP,需要通过计算输出结果的边界框与实际框的交并比(IoU),绘制查准率-召回率曲线计算。下面介绍具体的评价指标计算方式。
1.IoU
假设输入图像中只有一个物体,那么当我们对这个物体进行定位时,输出的结果应该是这个物体的长方形边界框(bounding box)。图3.24中狗的实际位置是方形框B(面积记为 B ),如果定位不准可能就是方形框A(面积记为 A )。判断只有一个物体的图像定位的准确性,通常用交并比(Intersection over Union,IoU)作为评价指标。IoU就是用 A 和 B 相交集,除以 A 和 B 的并集:
如果定位准确,方形框A和B完全重叠,则IoU=1。如果完全定位不到,方形框A和B完全没有重叠,则IoU=0。如果定位到一部分,方形框A和B有一定重叠,则IoU∈(0,1)。通常如果IoU⩾0.5,则认为定位比较准确。具体标准也可以根据具体场景进行分析。
2.mAP
物体检测时,如果输入图像中有很多物体,就需要框出很多框,有些框可能准确地框住了一个物体,有些框里可能什么物体都没有,有些框可能框错物体。如果一个框框住了物体(即IoU大于一定阈值,如0.5)而且分类正确,则认为该处物体检测准确。图像测试集中所有物体检测的准确性,通常用mAP(mean Average Precision,平均查准率均值)来衡量。
图3.24 IoU
以一张图片的物体检测为例,检测算法可能框出 N =1000个框,其中检测出物体A的框(即IoU大于一定阈值)有 k =50个,而该图片中实际上有 M =100个物体A。根据表3.6中分类结果的定义,该例子中真正例TP= k =50,总正例为TP+FN= M =100,所有预测结果为TP+FP= N =1000。那么这次检测的误差可以用以下2个指标来衡量:
表3.6 分类结果
召回率/查全率(Recall) :选出的 N 个样本中,选对的 k 个正样本占总的 M 个正样本的比例,即
查准率/精度(Precision) :选出的 N 个样本中,选对的 k 个正样本的比例,即
上面的例子中,物体A的召回率是Recall A =50/100=0.5,查准率为Precision A =50/1000=0.05。显然通过增加框,比如增加100万个框,可以提高召回率,但会降低查准率。
为了能够用一个指标来衡量测试集中不同类别的分类误差,同时既体现召回率,又体现查准率,就需要用到平均查准率 (Average Precision,AP)。假设一个图像目标检测任务,有100张图像作为测试集,共有5种类别,其中有25个事先人为标记为类别A的框。假设算法在100张测试图像中共检测出20个分类为A的候选框,各候选框的置信度(confidence score)及其标签如表3.7中左表所示。其中置信度用IoU来度量,如果框的标签为0则表示框内没有物体,标签为1则表示框内有物体。
平均查准率AP的计算过程如下:
表3.7 分类示例:左表是分类结果,右表是排序后的结果
首先,根据置信度排序,得到表3.7中右表的左3列。
其次,按照置信度降序,依次计算只有 N ( N =1,…,20)个正例时的Precision和Recall。例如,当 N =4时,认为只有4个框内(第3、7、11、20号框)有物体A,实际上只有第3、7、20号框有物体A,因此Precision=3/4;由于测试图像中共有25个物体A,因此Recall=3/25。以此类推,可以计算得到20个查准率和召回率的数据如表3.7中右表的第4、5列所示,并可以绘制出查准率-召回率曲线如图3.25所示。
再次,根据PASCAL Visual Object Classes Challenge 2012(PASCAL视觉目标分类挑战赛,简称VOC2012) [72] 中平均召回率AP的计算方法,对于每个召回率 r ,计算任意召回率 r ~⩾ r 时的最大的查准率,作为召回率 r 对应的查准率,如表3.7中右表的最右列所示。
然后,计算更新后的查准率-召回率曲线的面积作为平均查准率AP。该例子中类别A检测的平均查准率为
最后,图像测试集中 C 种类别的检测的平均查准率均值 。
图3.25 查准率-召回率曲线
R-CNN(Region with CNN feature,区域卷积神经网络)系列总体上看属于两阶段类算法,在国际上具有非常大的影响力。R-CNN系列的主要思想是,把传统的图像处理技术转变为用神经网络来处理,并尽量复用以减少计算量。这个系列的第一款算法是R-CNN,然后演进出Fast R-CNN,后来又演进出Faster R-CNN。目前,Faster R-CNN是最准确的图像目标检测算法之一。
表3.8总结了三种算法的主要特点及性能。R-CNN算法 [73] 结合了候选区域(region proposal)提取和CNN特征提取,并采用SVM分类和边界框回归(bounding box regression,也称为bbox regression),在VOC2012数据集上,图像目标检测的mAP为53.3%。Fast R-CNN算法 [74] 提出了RoI Pooling以及softmax分类,将图像目标检测的mAP提升到65.7%,检测速度比R-CNN快25倍。Faster R-CNN算法 [75] 使用RPN(Region Proposal Network,区域候选网络)生成候选区域,将图像目标检测的mAP进一步提升到67.0%,检测速度比Fast R-CNN提升10倍。
1.R-CNN
R-CNN算法是R-CNN系列的基础,其处理流程比较复杂。如图3.26所示,R-CNN主要包括四个步骤:
表3.8 R-CNN系列
注:表中数据来源于论文 [73][75] 在VOC2012测试集上的实验结果。
(1)候选区域提取:通过选择性搜索(selective search)从原始图像中提取约2000个候选区域。
(2)特征提取:首先将所有候选区域裁切缩放为固定大小,再对每个候选区域用AlexNet(其中的5个卷积层和2个全连接层)提取出4096维的图像特征,也可以用ResNet、VGG等网络。
(3)线性分类:用特定类别的SVM(Supported Vector Machine,支持向量机)对每个候选区域做分类。
(4)边界框回归:用线性回归来修正边界框的位置与大小,其中每个类别单独训练一个边界框回归器(bbox regressor)。
通过上述方式,可以把图3.26中的物体用候选框提取出来,包括一个人、一匹马、一面墙等。
图3.26 R-CNN算法流程 [73]
R-CNN算法中只有第三步与神经网络有关。第一步用选择性搜索方法提取约2000个候选区域,第二步用图像缩放算法,第四步用SVM分类做图像识别、线性回归微调边框,这些都是传统机器学习和计算机视觉的方法。
候选区域的选取 。候选区域提取通常是采用经典的目标检测算法,使用滑动窗口依次判断所有可能的区域。R-CNN对候选区域选取做了优化,采用选择性搜索 [76] 预先提取一系列比较有可能是物体的候选区域,之后仅在这些候选区域上提取特征,从而可以大大减少计算量。
基于选择性搜索 [76] 的候选区域提取算法主要使用层次化分组算法生成不同图像条件下的目标位置。层次化分组算法,首先用基于图的图像分割方法创建初始区域,并将其加入候选区域列表中;再计算所有相邻区域间的相似度;随后,每次合并相似度最高的两个相邻图像区域,计算合并后的区域与其相邻区域的相似度,将合并后的图像区域加到候选区域列表中,重复该过程直至所有图像区域合并为一张完整的图像;然后,提取候选区域的目标位置框,并按层级排序(覆盖整个图像的区域的层级为1)。
为了找到不同图像条件下的候选区域,要在不同图像分割阈值、不同色彩空间、不同相似度(综合考虑颜色、纹理、大小、重叠度)下,调用层次化分组算法,然后对所有合并策略下得到的位置框按照优先级排序,去掉冗余框。其中,为了避免按照区域大小排序,优先级采用层级乘以随机数的方式。最后,R-CNN取约2000个候选区域作为后续卷积神经网络的输入。
分类与回归 。分类与回归的处理过程如图3.27所示。首先,对候选区域进行分类,每个类别有一个SVM分类器,将2000个候选区域中的物体(包括背景)都通过21个分类器进行分类处理,判断每个候选区域最可能的分类,例如人、车、马等。然后,做NMS(Non-Maximum Suppression,非极大值抑制)去掉一些冗余框。例如同一个物体可能有不同的框,需要去掉一些冗余框,仅保留一个框。最后做边界框回归,通过线性回归进行候选框的微调校准,以比较准地框出物体,最终提高物体检测的mAP。
图3.27 R-CNN算法中分类与回归
上述过程中最重要的环节之一是非极大值抑制。在目标检测过程中,会形成2000个左右的候选框,同一物体位置(比如图3.27中的车)可能会有多个候选框,这些候选框之间会有重叠,就需要利用NMS找到较优的目标边界框,去除冗余的边界框。每个类别都要做一次NMS,以得到最终候选框的输出列表 [1] 。
对单个类别的NMS的处理步骤包括:
(1)根据检测得分对候选框进行排序作为候选框列表。
(2)将分数最高的候选框 b m 加到最终输出列表中,并将其从候选框列表中删除。
(3)计算 b m 与其他候选框 b i 的IoU,如果IoU大于阈值,则从候选框列表中删除 b i 。
(4)重复上述步骤,直至候选框列表为空。
R-CNN存在以下几个主要缺点:
(1)重复计算。2000个候选框都需要做卷积神经网络处理,计算量很大,并且其中有很多重复计算。例如图3.27中的车有3个候选框,这3个框都需要做卷积神经网络处理进行特征提取,但这3个候选框之间可能有80%以上都是重叠的,显然存在很多重复计算。
(2)SVM分类。在标注数据足够多的时候,卷积神经网络做图像分类要比SVM更准确。
(3)训练测试分为多个步骤。候选区域提取、特征提取、分类、回归都要独立训练,计算过程中有很多中间数据需要单独保存。从计算机体系结构的角度看,需要反复将数据写到内存里再读回来,效率非常低。
(4)检测速度慢。重复计算和分为多个步骤,导致R-CNN检测速度非常慢。在当时最先进的GPU英伟达K40上,处理一张图片需要13秒,在CPU上需要53秒 [73] 。这导致R-CNN在视频分析应用中远远做不到实时处理(每秒25帧)。
2.Fast R-CNN
为了提升图像目标检测速度,Ross Girshick提出了Fast R-CNN [74] ,该算法不仅提高了处理速度,还提高了检测的mAP。Fast R-CNN的框架如图3.28所示,其主要处理过程大致如下所述。
首先,Fast R-CNN仍采用R-CNN中的候选区域提取方法,从原始图像中提取约2000个候选区域。
其次,原始图像输入到卷积神经网络(只用多个卷积层和池化层)得到特征图,Fast R-CNN只需要统一做一次卷积神经网络处理,而不需要像R-CNN那样做2000次。
随后,提出了RoI pooling(Region of Interest pooling,感兴趣区域池化),根据映射关系,从卷积特征图上提取出不同尺寸的候选区域对应的特征图,并池化为维度相同的特征图(因为全连接层要求输入尺寸固定)。由于Fast R-CNN只做一次卷积神经网络处理,大幅减少了计算量,提高了处理速度。
然后,将维度相同的特征图送到全连接层,转化为RoI特征向量(RoI feature vector)。
最后经过全连接层,用softmax分类器进行识别,用边界框回归器修正边界框的位置和大小,再对每个类别做NMS,去除冗余候选框。
Fast R-CNN最本质的变化是,将需要运行2000次的卷积神经网络,变成运行一个大的卷积神经网络。
感兴趣区域(Region of Interest,RoI)对应提取出来的候选区域。RoI pooling可以将不同尺寸的RoI对应的卷积特征图转换为固定大小的特征图(如7×7),一方面可以复用卷积层提取的特征图以提高图像处理速度,另一方面可以向全连接层提供固定尺寸的特征图。对于每个特征图通道,RoI pooling根据输出尺寸 W o × H o 将输入特征图 W i × H i 均分为多块,每个块大小约为 W i / W o × H i / H o ,然后取每块的最大值作为输出值。
图3.28 Fast R-CNN框架 [74]
Fast R-CNN的主要改进包括:
(1)直接对整个图像做卷积,不再对每个候选区域分别做卷积,减少了大量重复计算。
(2)用RoI pooling对不同候选区域的特征图进行尺寸归一化,使不同尺寸的候选区域对应到固定尺寸的特征图。
(3)将边界框回归器和网络一起训练,每个类别对应一个回归器。
(4)用softmax层代替SVM分类器,从而将R-CNN中很多小的神经网络变成一个大的神经网络。
但是,Fast R-CNN中仍然使用了很多传统计算机视觉的技术。尤其是候选区域提取仍使用选择性搜索,而目标检测时间大多消耗在候选区域提取上,即提取2000个候选框。在英伟达K40 GPU上,基于VGG16的Fast R-CNN在候选区域提取上耗时3.2秒 [75] ,而其他部分总共花0.32秒。因此,当2000个卷积神经网络变成一个大的神经网络之后,候选区域提取就成了Fast R-CNN的瓶颈。
3.Faster R-CNN
为了解决Fast R-CNN中候选区域提取的瓶颈,Faster R-CNN [75] 设计了更高效的候选区域提取方法——区域候选网络(Region Proposal Network,RPN),把候选区域提取也用神经网络来实现,从而进一步提升了图像目标检测的速度。
Faster R-CNN将RPN和Fast R-CNN结合起来,如图3.29a所示,其主要处理过程大致如下。
(1)输入图片经过多层卷积神经网络(如ZF [36] 和VGG-16的卷积层),提取出卷积特征图,供RPN和Fast R-CNN中的RoI pooling使用。RPN和Fast R-CNN共享特征提取网络可大大减少计算时间。
(2)RPN对特征图进行处理,生成候选框,用softmax判断候选框是前景还是背景(对应图3.29a中的cls层),从中选取前景候选框并利用bbox回归器调整候选框的位置(对应图3.29a中的reg层),得到候选区域。
(3)RoI pooling层,与Fast R-CNN一样,将不同尺寸的候选框在特征图上的对应区域池化为维度相同的特征图。
(4)与Fast R-CNN一样,用softmax分类器判断图像类别,同时用边界框回归器修正边界框的位置和大小。
图3.29 Faster R-CNN结构,图中省略了RPN中softmax前后的转换(分别将二维特征图转为一维向量、将一维向量转为二维特征图)
Faster R-CNN的核心是RPN。RPN的输入是特征图,输出是候选区域集合,包括各候选区域属于前景或背景的概率以及位置坐标,并且不限定候选区域的个数。RPN中采用一种anchor机制,能够从特征图上直接选出候选区域的特征,相对于选择性搜索,大大减少了计算量,且整个过程融合在一个神经网络里面,方便训练和测试。RPN的具体计算过程大致如下。
(1)先经过一个3×3卷积,使每个卷积窗口输出一个256维(ZF模型)或512维(VGG16)特征向量。
(2)然后分两路处理:一路经过1×1卷积之后做softmax处理,输出候选框为前景或背景的概率;另一路做边界框回归来确定候选框的位置及大小。
(3)两路计算结束后,计算得到前景候选框(因为物体在前景中),再用NMS去除冗余候选框,最后输出候选区域。
Faster R-CNN没有限定候选框的个数(如2000个),而是提出了anchor box(锚框),如图3.30所示。特征图的每个位置可以有 k =9个可能的候选框,包括3种面积和3种长宽比。3种面积可以是128×128、256×256、512×512,每种面积又分成3种长宽比,分别为2:1、1:2、1:1,总计9个不同的候选框,这些候选框也被称为anchor。在RPN中,特征图的每个位置会输出2 k 个得分,分别表示该位置的 k 个anchor为前景/背景的概率,同时每个位置会输出4 k 个坐标值,分别表示该位置的 k 个框的中心坐标( x,y )及其宽度 w 和高度 h ,这些值都是用神经网络计算出来的。
图3.30 Faster R-CNN中的锚框(anchor box)
4.总结
R-CNN中多个环节采用了非神经网络的技术。而生物的视觉通道用一套生物神经网络就可以检测所有物体。因此,理论上图像检测中所有环节都可以转换为神经网络来实现。通过Fast R-CNN和Faster R-CNN的逐步努力,这个目标应该说基本实现了。Fast R-CNN用softmax层取代了R-CNN中的SVM分类器,Faster R-CNN用RPN取代了选择性搜索。从R-CNN到Fast R-CNN,再到Faster R-CNN,目标检测的四个基本步骤(候选区域提取、特征提取、分类、边界框回归)中的很多传统的计算机视觉的技术逐渐被统一到深度学习框架中,大大提高了运行速度。R-CNN系列工作是两阶段目标检测算法的代表性工作,后续的两阶段目标检测算法大多是基于Faster R-CNN的改进。例如,Light-Head R-CNN [78] 通过设计轻量化的特征提取网络提高检测效率;FPN [79] 通过在RPN中添加特征金字塔(feature pyramid)实现多尺度特征融合,从而提升算法对不同尺寸目标检测的mAP;Mask R-CNN [80] 通过添加额外的目标掩码(object mask)分支,并将RoI pooling改进为更加精确的感兴趣区域对齐(RoI align)操作,进一步提升目标检测的mAP;Soft NMS [77] 通过改进NMS提升候选框的准确度。以R-CNN系列工作为代表的两阶段目标检测算法通常检测mAP较高,但是检测速度较慢,不利于其在视频监控、自动驾驶等实际场景的使用。相比之下,一阶段的目标检测算法虽然检测mAP低于两阶段算法,但检测速度较快,更加容易满足实际应用中的实时性要求。
前面介绍的R-CNN系列是两阶段算法,先产生候选区域再进行CNN分类。而YOLO(You Only Look Once)开创了一阶段检测算法的先河,将目标分类和定位用一个神经网络统一起来,实现了端到端的目标检测。如图3.31所示,YOLO的主要思想是,把目标检测问题转换为直接从图像中提取边界框和类别概率的单回归问题,一次就可检测出目标的类别和位置 [81] 。因此,YOLO模型的运行速度非常快,在一些GPU上可以达到45帧/秒的运算速度,可以满足实时性应用要求。
图3.31 YOLO检测系统 [81]
1.统一检测
YOLO模型如图3.32所示,其做统一检测(unified detection)的过程大致如下。
首先把输入图像分成 S × S 个小格子。每个格子预测 B 个边界框,每个边界框用五个预测值表示: x 、 y 、 w 、 h 和confidence(置信度)。其中( x , y )是边界框的中心坐标, w 和 h 是边界框的宽度和高度,这四个值都被归一化到[0,1]区间,以便于训练。confidence综合考虑当前边界框中存在目标的可能性Pr(Object)以及预测框和真实框的交并比 ,定义为 [81]
如果一个框内没有物体,则confidence=0,否则confidence等于交并比。在训练时,可以计算出每一个框的confidence。
图3.32 YOLO模型 [81]
然后,预测每个格子分别属于每一种目标类别的条件概率Pr(Class i |Object), i =0,1,…, C ,其中 C 是数据集中目标类别的数量。在测试时,属于某个格子的 B 个边界框共享 C 个类别的条件概率,每个边界框属于某个目标类别的置信度(类别置信度)为 [81] :
最后,输出一个张量(tensor),其维度为 S × S ×( B ×5+ C )。YOLO使用PASCAL VOC检测数据集,将图像分为7×7=49个小格子,每个格子里有两个边界框,即 S =7, B =2。因为VOC数据集中有20种类别,所以 C =20。最终的预测结果是一个7×7×30的张量。
2.网络结构
YOLO借鉴了GoogLeNet的设计思想,其网络结构如图3.33所示,包括24个卷积层和2个全连接层。YOLO没有使用Inception模块,而是直接用1×1卷积层及随后的3×3卷积层。YOLO的输出是7×7×30的张量。YOLO使用Leaky ReLU作为激活函数:
3.总结
YOLO使用统一检测模型,相对于传统目标检测,它有几个显著优点:
图3.33 YOLO网络结构 [81]
(1)检测速度非常快。YOLO将目标检测重建为单一回归问题,对输入图像直接处理,同时输出边界框坐标和分类概率,而且每幅图像只预测98个边界框。因此YOLO的检测速度非常快,在Titan X GPU上能达到45帧/秒,Fast YOLO的检测速度可以达到155帧/秒 [81] 。
(2)背景误判少。以往基于滑动窗口或候选区域提取的目标检测算法,只能看到图像的局部信息,会把图像背景误认为目标。而YOLO在训练和测试时每个格子都可以看到全局信息,因此不容易把图像背景预测为目标。
(3)泛化性更好。YOLO能够学习到目标的泛化表示,能够迁移到其他领域。例如,当YOLO在自然图像上做训练,在艺术品上做测试时,其性能远优于DPM、R-CNN等。
YOLO目标检测速度很快,但mAP不是很高,主要是因为以下方面:
(1)每个格子只能预测两个边界框和一种目标的分类。YOLO将一幅图像均分为49个格子,如果多个物体的中心在同一单元格内,一个单元格内只能预测出一个类别的物体,就会丢掉其他的物体。
(2)损失函数的设计过于简单。边界框的坐标和分类表征的内容不同,但YOLO都用其均方误差作为损失函数。
(3)YOLO直接预测边界框的坐标位置,模型不易训练。
针对YOLO中存在的问题,出现了很多改进版。YOLOv2 [82] 借鉴了Faster R-CNN中锚框的思想,同时改进网络结构,形成了Darknet-19网络,此外还用卷积层替换了YOLO中的全连接层,大幅减少了参数量,提高了目标检测的mAP及速度。YOLOv3 [83] 采用了多尺度预测,同时借鉴ResNet的思想形成了一个53层的Darknet-53网络,并使用多标签分类器代替softmax等技术,进一步提高了目标检测的mAP。YOLOv4 [84] 在特征融合阶段使用了多尺度结构,同时引入了深度学习领域多种技巧提升效果,包括加权的残差连接、跨阶段的部分连接、跨批量标准化、自对抗训练、Mish激活函数等。YOLOv5 [85] 通过增加高质量正样本anchor加快收敛,同时整合了大量深度学习领域的技巧,有效提升YOLO系列工作的灵活度与速度,便于使用和部署。此后,YOLO系列又推出了Scaled-YOLOv4 [86] 、YOLOR [87] 、YOLOX [88] 、YOLOv6 [89] ,YOLOv7 [90] ,YOLOv8 [91] 等工作,由于篇幅有限不再一一介绍,感兴趣的读者可以阅读相关论文 [92] 了解更详细的内容。
SSD(Single Shot Detector,单次检测器) [93] 基于YOLO直接回归边界框和分类概率的一阶段检测算法,借鉴了Faster R-CNN中的锚框思想,使用了多尺度特征图检测,用一个深度神经网络就可以完成目标检测,在满足检测速度要求的同时,大幅提高了检测的mAP。SSD的网络结构如图3.34所示。
图3.34 SSD网络结构与YOLO结构对比 [93]
在卷积神经网络中,一般距离输入近的卷积层的特征图比较大,后面逐渐使用步长为2的卷积或池化来降低特征图的尺寸。例如输入图像是224×224,特征图的尺寸后面可能会依次变成112×112、56×56、28×28、14×14。不同尺寸的特征图中,同样大小的框,框出的物体大小差异很大。例如在14×14大小的特征图上,框内的物体会非常大,相当于在很远的地方框出一个很大的物体。
SSD的主要思想是,在不同大小的特征图上都提取默认框(default box,类似于anchor box)做检测,以找到最合适的默认框的位置和尺寸。在比较大的特征图上检测比较小的目标,在比较小的特征图上检测比较大的目标,如图3.35所示。8×8特征图上的框用来检测比较小的目标——猫,而下一层4×4特征图上的框用来检测比较大的目标——狗。
图3.35 SSD框架 [93]
SSD使用 m 层特征图做预测,每个特征图上的每个位置有6个默认框。默认框包括2个正方形和4个长方形,其宽高比 a r ∈{1,2,3,1/2,1/3}。默认框在第 k 个特征图上的缩放为:
其中, s min =0.2, s max =0.9,分别对应最低层和最高层的缩放。每个默认框的宽度为 ,高度为 。对于宽高比为1的情况,增加一个默认框,其缩放为 。通过上述方式,特征图上每个位置有6个不同大小和形状的默认框。
同时对多层特征图上的默认框计算交并比IoU,可以找到与真实框大小及位置最接近的框,在训练时能够达到最好的mAP。图3.36是在不同层的特征图上的默认框的示例 。在低层特征图上,默认框可能框到一个物体的局部,交并比很小;在高层特征图上,默认框可能框到一个物体,但框太大了,交并比也很小;在中间层特征图上,框的大小和形状最合适,交并比也是最高的。通过这些优化技术,SSD的目标检测mAP相对于YOLO有一定的提升,也更容易训练。
图像目标检测算法大致分为一阶段和两阶段算法。两阶段算法提出的早一些,包括RCNN、Fast R-CNN、Faster R-CNN等。Faster R-CNN之后还有很多优化算法,包括更好的特征网络、更好的RPN、更完善的RoI分类、样本后处理等,形成了现在非常有名的FPN、Mask R-CNN等算法。一阶段算法中,YOLO系列工作影响力较大且不断发展,目前已经发展到YOLOv8;此外一阶段算法中的SSD也很有影响力,SSD之后又有像RSSD [94] 、DSSD [95] 、DSOD [96] 、FSSD [97] 等工作。由于篇幅有限不再一一介绍,读者可以阅读相关文献进一步了解。总体上,不论是一阶段还是两阶段,主流图像目标检测算法现在都已经可以全部用神经网络完成。
图3.36 以不同层的特征图上的默认框示例,左下和右上的实线框分别是猫和狗的真实框
[1] 在NMS处理过程中,可能会有一些比较复杂的场景。例如两个前后站立的人,这两个不同的物体重叠度很高。最初的R-CNN所采用的传统NMS可能会丢掉站在后面的人的候选框,但soft NMS算法 [77] 可以把两个人的候选框都保留下来。