目录
文章目录
应用于图像目标检测的卷积神经网络
在图像分类问题中,ResNet
,VGG
,GoogLeNet
,AlexNet
等网络要识别出给定图片中的物体的类别。分类是非常有意义的基础研究问题,但在实际中难以直接发挥作用。因为实际应用中的一张图片往往有非常复杂的场景,可能包含几十甚至上百种物体,而图像分类算法处理的图片中只有一个物体。因此实际应用中,不但要把一个物体检测出来,还要框出来 (定位),更进一步要把图片中所有物体都检测出来并框出来。这就是图像目标检测的使命。
目前,基于卷积神经网络的图像目标检测算法主要分为两大类:两阶段和一阶段。:
两阶段(two-stage)
算法基于候选区域方法,首先产生边界框把所有物体框出来;然后用基于卷积神经网络的图像分类算法对每个候选区域进行分类。两阶段算法的代表是 R-CNN系列
算法。
一阶段(one-stage)
算法对输入图像直接处理,同时输出物体定位及其类别,即在框出来物体的同时对物体进行分类,主要包括 YOLO系列
以及 SSD算法
。
本博客首先介绍图像目标检测算法的评价指标,然后介绍三种图像目标检测算法,包括 R-CNN系列
,YOLO系列
以及 SSD算法
。
数据集和评价指标
常用的目标检测数据集包括 PASCAL VOC
和 MSCOCO
。PASCAL VOC
是 PASCAL
视觉目标分类挑战赛所使用的数据集,有 VOC2007
和 VOC2012
两个版本,包含 20
个类别的标注。
VOC2007
中包含9963
张标注过的图片,共标注出24640
个物体。VOC2012
有11540
张标注图片,共标注出27450
个物体。
PASCAL VOC
是目标检测领域经典的基准数据集,但随着目标检测网络的规模不断扩大,能力不断增强,PASCAL VOC
的规模和类别数量制约了评测更强目标检测网络的能力。因此微软建立了规模更大的目标检测数据集 MSCOCO
。 目前目标检测领域常用版本是 COCO2017
,包含 80
个类别,训练集和验证集共包含约 12万
张图像。平均每张图片中包含 7
个物体,一张图片中最多可能包含 63
个物体,且图片中物体的尺寸跨度较大
,对目标检测带来极大的挑战。
目标检测领域常用的评价指标是 mAP
,需要通过计算输出结果的边界框与实际框的交并比(IoU)
,绘制查准率-召回率曲线
计算。下面介绍具体的评价指标计算方式。
1.IoU
假设输入图像中只有一个物体,那么当我们对这个物体进行定位时,输出的结果应该是这个物体的长方形边界框(bounding box)。
上图中狗的实际位置是方形框B(面积记为
B
B
B ),如果定位不准可能就是方形框A (面积记为
A
A
A )。判断只有一个物体的图像定位的准确性,通常用交并比(Intersection over Union,IoU)
作为评价指标。IoU 就是用
A
A
A和
B
B
B 相交集,除以
A
A
A 和
B
B
B 的并集:
I
o
U
=
A
∩
B
A
∪
B
\begin{equation*} \mathrm{IoU}=\frac{A \cap B}{A \cup B} \end{equation*}
IoU=A∪BA∩B
如果定位准确,方形框 A 和 B 完全重叠,则 I o U = 1 \mathrm{IoU}=1 IoU=1 。如果完全定位不到,方形框 A 和 B 完全没有重叠,则 I o U = 0 \mathrm{IoU}=0 IoU=0 。如果只定位到一部分,方形框 A 和 B 有一定重叠,则 I o U ∈ ( 0 , 1 ) \mathrm{IoU} \in(0,1) IoU∈(0,1) 。通常如果 I o U ⩾ 0.5 \mathrm{IoU} \geqslant 0.5 IoU⩾0.5 ,则认为定位比较准确。具体标准也可以根据具体场景进行分析。
2.mAP
物体检测时,如果输入图像中有很多物体,就需要框出很多框,有些框可能准确地框住了一个物体,有些框里可能什么物体都没有,有些框可能框错物体。如果一个框框住了物体(即 IoU 大于一定阈值,如 0.5 )而且分类正确,则认为该处物体检测准确。图像测试集中所有物体检测的准确性,通常用 mAP(mean Average Precision,平均查准率均值)
来衡量。
以一张图片的物体检测为例,检测算法可能框出
N
=
1000
N=1000
N=1000 个框,其中检测出物体A
的框(即 IoU 大于一定國值)有
k
=
50
k=50
k=50 个,而该图片中实际上有
M
=
100
M=100
M=100 个物体A。根据上表分类结果,该例子中真正例
T
P
=
k
=
50
\mathrm{TP}=k=50
TP=k=50 ,总正例
为
T
P
+
F
N
=
M
=
100
\mathrm{TP}+\mathrm{FN}=M=100
TP+FN=M=100 ,所有预测结果
为
T
P
+
F
P
=
N
=
1000
\mathrm{TP}+\mathrm{FP}=N=1000
TP+FP=N=1000 。那么这次检测的误差可以用以下 2个指标来衡量:
-
**召回率/查全率(Recall):**选出的 N N N 个样本中,选对的 k k k 个正样本占总的 M M M 个正样本的比例,即:
- Recall = k / M = T P / ( T P + F N ) \begin{equation*} \text { Recall }=k / M=\mathrm{TP} /(\mathrm{TP}+\mathrm{FN}) \end{equation*} Recall =k/M=TP/(TP+FN)
-
**查准率/精度(Precision):**选出的 N N N 个样本中,选对的 k k k 个正样本的比例,即
- Precision = k / N = T P / ( T P + F P ) \begin{equation*} \text { Precision }=k / N=\mathrm{TP} /(\mathrm{TP}+\mathrm{FP}) \end{equation*} Precision =k/N=TP/(TP+FP)
上面的例子中,物体 A 的召回率是 Recall A = 50 / 100 = 0.5 \operatorname{Recall}_{\mathrm{A}}=50 / 100=0.5 RecallA=50/100=0.5 ,查准率为 Precision A = _{\mathrm{A}}= A= 50 / 1000 = 0.05 50 / 1000=0.05 50/1000=0.05 。显然通过增加框,比如增加100万个框,可以提高召回率,但会降低查准率。
为能够用一个指标来衡量测试集中不同类别的分类误差,同时既体现召回率,又体现查准率,就需要用到平均查准率(Average Precision,AP)
。假设一个图像目标检测任务,有 100 张图像作为测试集,共有 5 种类别,其中有 25 个事先人为标记为类别 A 的框。假设算法在 100 张测试图像中共检测出20个分类为A的候选框,各候选框的置信度 (confidence score)
及其标签
如表下表中左表所示。其中置信度用 IoU
来度量,如果框的标签为 0 则表示框内没有物体,标签为 1 则表示框内有物体。

平均查准率AP
的计算过程如下:
-
首先,根据置信度排序,得到上表中右表的左 3 列。
-
其次,按照置信度降序,依次计算只有 N ( N = 1 , ⋯ , 20 ) N(N=1, \cdots, 20) N(N=1,⋯,20) 个正例时的 Precision 和 Recall。
- 例如,当 N = 4 N=4 N=4 时,认为只有 4 个框内(第3,7,11,20号框)有物体A,实际上只有第 3 , 7 , 20 3, ~ 7, ~ 20 3, 7, 20 号框有物体 A,因此 Precision = 3 / 4 =3 / 4 =3/4 ;由于测试图像中共有 25 个物体 A,因此 Recall = 3 / 25 =3 / 25 =3/25 。
- 以此类推,可以计算得到 20 个查准率和召回率的数据如上表中右表的第 4,5列所示,并可以绘制出
查准率-召回率
曲线如下图所示。 -
-
再次,根据
PASCAL Visual Object Classes Challenge 2012 (PASCAL 视觉目标分类挑战赛,简称 VOC2012)
中平均召回率 AP 的计算方法,对于每个召回率 r r r ,计算任意召回率 r ~ ⩾ r \tilde{r} \geqslant r r~⩾r 时的最大的查准率,作为召回率 r r r 对应的查准率,如上表中右表的最右列所示。 -
然后,计算更新后的查准率-召回率曲线的面积作为平均查准率 AP 。
-
该例子中类别 A检测的平均查准率为
- A P A = ( 1 + 1 + ( 3 / 4 ) + ( 6 / 13 ) + ( 6 / 13 ) + ( 6 / 13 ) + ( 7 / 17 ) ) × ( 1 / 25 ) = 0.1819 \begin{equation*} \mathrm{AP}_{\mathrm{A}}=(1+1+(3 / 4)+(6 / 13)+(6 / 13)+(6 / 13)+(7 / 17)) \times(1 / 25)=0.1819 \end{equation*} APA=(1+1+(3/4)+(6/13)+(6/13)+(6/13)+(7/17))×(1/25)=0.1819
-
-
最后,图像测试集中 C C C 种类别的检测的平均查准率均值:
- m A P = ( ∑ c = 1 C A P c ) / C ∘ \mathrm{mAP}=\left(\sum_{c=1}^{C} \mathrm{AP}_{c}\right) / C \circ mAP=(c=1∑CAPc)/C∘
R-CNN 系列
R-CNN(Region with CNN feature,区域卷积神经网络)
系列总体上看属于两阶段类算法,在国际上具有非常大的影响力。R-CNN 系列的主要思想是,把传统的图像处理技术转变为用神经网络来处理,并尽量复用以减少计算量。这个系列的第一款算法是 R-CNN
,然后演进出 Fast R-CNN` `,后来又演进出 ` `Faster R-CNN
。目前,
Faster R-CNN`` 是最准确的图像目标检测算法之一。下表总结了三种算法的主要特点及性能。
1.R-CNN 算法: 结合了候选区域(region proposal)提取
和 CNN特征提取
,并采用 SVM分类
和边界框回归(bounding box regres- sion,也称为 bbox regression)
,在 VOC2012
数据集上,图像目标检测的 mAP
为
53.3
%
53.3 \%
53.3% 。
2.Fast R-CNN
算法: 提出了 RoI Pooling
以及 softmax分类
,将图像目标检测的mAP
提升到
65.7
%
65.7 \%
65.7% ,检测速度比 R-CNN
快 25
倍。
3. Faster R-CNN
算法: 使用 RPN(Region Proposal Network,区域候选网络
)生成候选区域,将图像目标检测的 mAP
进一步提升到
67.0
%
67.0 \%
67.0% ,检测速度比 Fast R-CNN
提升 10
倍。
1.R-CNN
R-CNN 算法是 R-CNN 系列的基础,其处理流程比较复杂。如下图所示,R-CNN主要包括四个步骤:
- (1)候选区域提取:
- 通过
选择性搜索(selective search)
从原始图像中提取约2000
个候选区域
。
- 通过
- (2)特征提取:
- 首先将所有
候选区域
裁切缩放为固定大小, - 再对每个候选区域用
AlexNet
(其中的 5 个卷积层和 2 个全连接层)提取出4096
维的图像特征 - 也可以用
ResNet
,VGG
等网络。
- 首先将所有
- (3)线性分类:
- 用特定类别的
SVM(Supported Vector Machine,支持向量机)
对每个候选区域
做分类。
- 用特定类别的
- (4)边界框回归:
- 用线性回归来修正边界框的位置与大小,其中每个类别单独训练一个
边界框回归器(bbox regressor)
。
- 用线性回归来修正边界框的位置与大小,其中每个类别单独训练一个
通过上述方式,可以把上图中的物体用候选框提取出来,包括一个人,一匹马,一面墙等。
R-CNN
算法中只有第三步与神经网络有关。第一步用选择性搜索方法
提取约 2000
个候选区域,第二步用图像缩放
算法,第四步用 SVM分类
做图像识别,线性回归微调边框,这些都是传统机器学习和计算机视觉的方法。
1.候选区域的选取
候选区域提取
通常是采用经典的目标检测算法,使用滑动窗口依次判断所有可能的区域。R-CNN 对候选区域选取做了优化,采用选择性搜索 ,预先提取一系列比较有可能是物体的候选区域,之后仅在这些候选区域上提取特征,从而可以大大减少计算量。
基于选择性搜索
的候选区域提取算法主要使用层次化分组算法生成不同图像条件下的目标位置。层次化分组算法
,首先用基于图的图像分割方法创建初始区域,并将其加入候选区域列表中;再计算所有相邻区域间的相似度;随后,每次合并相似度最高的两个相邻图像区域,计算合并后的区域与其相邻区域的相似度,将合并后的图像区域加到候选区域列表中,重复该过程直至所有图像区域合并为一张完整的图像;然后,提取候选区域的目标位置框,并**按层级排序(**覆盖整个图像的区域的层级为1)。
为找到不同图像条件下的候选区域,要在不同图像分割阈值,不同色彩空间,不同相似度(综合考虑颜色,纹理,大小,重叠度)下,调用层次化分组算法
,然后对所有合并策略下得到的位置框按照优先级排序,去掉冗余框。其中,为避免按照区域大小排序,优先级采用层级乘以随机数的方式。最后,R-CNN
取约 2000
个候选区域作为后续卷积神经网络的输入。
2.分类与回归
分类与回归的处理过程如下图所示。
首先,对2000个候选区域进行分类,每个类别有一个 SVM分类器
,将 2000个候选区域中的物体(包括背景)都通过 21
个分类器进行分类处理,判断每个候选区域最可能的分类,例如人,车,马等。
然后,做 NMS(Non-Maximum Suppression,非极大值抑制)
去掉一些冗余框。例如同一个物体可能有不同框,需要去掉一些冗余框,仅保留一个框。最后做边界框回归
,通过线性回归
进行候选框的微调校准
,以比较准地框出物体,最终提高物体检测的 mAP
.
上述过程中最重要的环节之一是非极大值抑制(NMS)
。在目标检测过程中,会形成 2000个左右的候选框,同一物体位置(比如上图中的车)可能会有多个候选框,这些候选框之间会有重叠,就需要利用 NMS
找到较优的目标边界框,去除冗余的边界框。每个类别都要做一次 NMS,以得到最终候选框的输出列表。
对单个类别的NMS的处理步骤包括:
- 根据检测得分对候选框进行排序作为候选框列表。
- 将分数最高的候选框 b m b_{m} bm 加到最终输出列表中,并将其从候选框列表中删除。
- 计算
b
m
b_{m}
bm 与其他候选框
b
i
b_{i}
bi 的 IoU,如果
IoU
大于阈值,则从候选框列表中删除 b i b_{i} bi - 重复上述步骤,直至候选框列表为空。
R-CNN 存在以下几个主要缺点:
(1)重复计算。2000个候选框都需要做卷积神经网络处理,计算量很大,并且其中有很多重复计算。例如上图中的车有3个候选框,这3个框都需要做卷积神经网络处理进行特征提取,但这 3 个候选框之间可能有
80
%
80 \%
80% 以上都是重叠的,显然存在很多重复计算。
(2)SVM 分类。在标注数据足够多的时候,卷积神经网络做图像分类要比SVM更准确。
(3)训练测试分为多个步骤。候选区域提取,特征提取,分类,回归都要独立训练,计算过程中有很多中间数据需要单独保存。从计算机体系结构的角度看,需要反复将数据写到内存里再读回来,效率非常低。
(4)检测速度慢。重复计算和分为多个步骤,导致 R-CNN
检测速度非常慢。在当时最先进GPU英伟达 K40
上,处理一张图片需要 13
秒,在 CPU 上需要 53
秒 。这导致 R-CNN
在视频分析应用中远远做不到实时处理(每秒25帧)。
[!NOTE]
NMS是什么?
在 NMS 处理过程中,可能会有一些比较复杂的场景。例如两个前后站立的人,这两个不同的物体重叠度很高。最初的 R-CNN 所采用的传统 NMS 可能会丢掉站在后面的人的候选框,但
soft NMS
算法 可以把两个人的候选框都保留下
2.Fast R-CNN
为提升图像目标检测速度,Ross Girshick 提出了 Fast R-CNN
,该算法不仅提高了处理速度,还提高了检测的 mAP
。
Fast R-CNN
的框架如上图所示,其主要处理过程大致如下所述:
首先,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
7 \times 7
7×7 ),一方面可以复用卷积层提取的特征图以提高图像处理速度,另一方面可以向全连接层提供固定尺寸的特征图。对于每个特征图通道,RoI pooling
根据输出尺寸
W
o
×
H
o
W_{\mathrm{o}} \times H_{\mathrm{o}}
Wo×Ho 将输入特征图
W
i
×
H
i
W_{\mathrm{i}} \times H_{\mathrm{i}}
Wi×Hi均分为多块,每个块大小约为
W
i
/
W
o
×
H
i
/
H
o
W_{\mathrm{i}} / W_{\mathrm{o}} \times H_{\mathrm{i}} / H_{\mathrm{o}}
Wi/Wo×Hi/Ho ,然后取每块的最大值作为输出值。
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
秒 ,而其他部分总共花 0.32
秒。因此,当 2000 个卷积神经网络变成一个大的神经网络之后,候选区域提取就成了 Fast R-CNN
的瓶颈。
3. Faster R-CNN
为解决 Fast R-CNN
中候选区域提取的瓶颈, Faster R-CNN
设计了更高效的候选区域提取方法-区域候选网络(Region Proposal Network,RPN)
,把候选区域提取也用神经网络来实现,从而进一步提升了图像目标检测的速度。 Faster R-CNN
将 RPN
和 Fast R-CNN
结合起来。
如下图a所示,其主要处理过程大致如下。
(1)输入图片经过多层卷积神经网络(如 ZF
和 VGG-16
的卷积层),提取出卷积特征图,供 RPN
和 Fast R-CNN
中的 RoI pooling
使用。RPN
和 Fast R-CNN
共享特征提取网络可大大减少计算时间。
(2)RPN
对特征图进行处理,生成候选框,用 softmax
判断候选框是前景还是背景 (对应上图a中的 cls层
),从中选取前景候选框并利用 bbox回归器
调整候选框的位置 (对应图上图a 中的 reg层
),得到候选区域。
(3)RoI pooling
层,与Fast R-CNN
一样,将不同尺寸的候选框在特征图上的对应区域池化为维度相同的特征图。
(4)与Fast R-CNN
一样,用 softmax分类器
判断图像类别,同时用边界框回归器
修正边界框的位置和大小。
Faster R-CNN
的核心是 RPN
。RPN
的输入是特征图,输出是候选区域集合,包括各候选区域属于前景或背景的概率以及位置坐标,并且不限定候选区域的个数。 RPN
中采用一种 anchor
机制,能够从特征图上直接选出候选区域的特征,相对于选择性搜索
,大大减少了计算量,且整个过程融合在一个神经网络里面,方便训练和测试。RPN 的具体计算过程大致如下。
(1)先经过一个
3
×
3
3 \times 3
3×3 卷积,使每个卷积窗口输出一个 256
维( ZF 模型)或 512
维 (VGG16)特征向量。
(2)然后分两路处理:一路经过
1
×
1
1 \times 1
1×1 卷积之后做 softmax
处理,输出候选框为前景或背景的概率;另一路做边界框回归
来确定候选框的位置及大小。
(3)两路计算结束后,计算得到前景候选框(因为物体在前景中),再用NMS
去除冗余候选框,最后输出候选区域。

Faster R-CNN
没有限定候选框的个数(如2000个),而是提出了 anchor box(锚框)
,如上图所示。特征图的每个位置可以有
k
=
9
k=9
k=9 个可能的候选框,包括 3 种面积和 3 种长宽比。
3 种面积可以是
128
×
128
,
256
×
256
,
512
×
512
128 \times 128, ~ 256 \times 256, ~ 512 \times 512
128×128, 256×256, 512×512 ,每种面积又分成 3 种长宽比,分别为
2
:
1
,
1
:
2
,
1
:
1
2: 1, ~ 1: 2, ~ 1: 1
2:1, 1:2, 1:1 ,总计 9 个不同的候选框,这些候选框也被称为 anchor
。
在 RPN中,特征图的每个位置会输出 2 k 2 k 2k 个得分,分别表示该位置的 k k k 个 anchor 为前景/背景的概率,同时每个位置会输出 4 k 4 k 4k 个坐标值,分别表示该位置的 k k k 个框的中心坐标 ( x , y ) (x, y) (x,y) 及其宽度 w w w 和高度 h h h ,这些值都是用神经网络计算出来的。
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
通过设计轻量化的特征提取网络提高检测效率;FPN
通过在 RPN
中添加特征金字塔(feature pyramid)
实现多尺度特征融合,从而提升算法对不同尺寸目标检测的 mAP
;Mask R-CNN
通过添加额外的目标掩码(object mask)
分支,并将 RoI pooling
改进为更加精确的感兴趣区域对齐(RoI align)
操作,进一步提升目标检测的 mAP
;Soft NMS
通过改进 NMS
提升候选框的准确度。
以 R-CNN 系列工作为代表的两阶段目标检测算法通常检测 mAP
较高,但是检测速度较慢,不利于其在视频监控,自动驾驶等实际场景的使用。相比之下,一阶段的目标检测算法虽然检测 mAP
低于两阶段算法,但检测速度较快,更加容易满足实际应用中的实时性要求。
YOLO
前面介绍的 R-CNN
系列是两阶段算法,先产生候选区域再进行 CNN 分类。而 YOLO (You Only Look Once)
开创了一阶段检测算法的先河,将目标分类和定位用一个神经网络统一起来,实现了端到端的目标检测。
如下图所示,YOLO
的主要思想是,把目标检测问题转换为直接从图像中提取边界框和类别概率的单回归问题,一次就可检测出目标的类别和位置 。因此,YOLO
模型的运行速度非常快,在一些 GPU 上可以达到 45帧/秒
的运算速度,可以满足实时性应用要求。
1.统一检测
YOLO
模型如下图所示,其做统一检测(unified detection)
的过程大致如下。

首先把输入图像分成 S × S S \times S S×S 个小格子。每个格子预测 B B B 个边界框,每个边界框用五个预测值表示: x , y , w , h x, ~ y, ~ w, ~ h x, y, w, h 和 confidence(置信度)。
其中
(
x
,
y
)
(x, y)
(x,y) 是边界框的中心坐标,
w
w
w 和
h
h
h是边界框的宽度和高度,这四个值都被归一化到
[
0
,
1
]
[0,1]
[0,1] 区间,以便于训练。confidence 综合考虑当前边界框中存在目标的可能性
Pr
(
\operatorname{Pr}(
Pr( Object
)
)
) 以及预测框和真实框的交并比
IOU
pred
truth
\text{IOU}_{\text {pred }}^{\text {truth }}
IOUpred truth ,定义为:
confidence
=
Pr
(
Object
)
×
I
o
U
pred
truth
\text { confidence }=\operatorname{Pr}(\text { Object }) \times \mathrm{IoU}_{\text {pred }}^{\text {truth }}
confidence =Pr( Object )×IoUpred truth
Pr ( Object ) = { 1 , 目标在该格子中 0 , 目标不在该格子中 (3.11) \operatorname{Pr}(\text { Object })= \begin{cases}1, & \text { 目标在该格子中 } \tag{3.11}\\ 0, & \text { 目标不在该格子中 }\end{cases} Pr( Object )={1,0, 目标在该格子中 目标不在该格子中 (3.11)
如果一个框内没有物体,则 confidence = 0 =0 =0 ,否则 confidence 等于交并比。在训练时,可以计算出每一个框的 confidence。
然后,预测每个格子分别属于每一种目标类别的条件概率 Pr ( \operatorname{Pr}\left(\right. Pr(Class i ∣ _{i} \mid i∣ Object ) , i = 0 ), i=0 ),i=0 , 1 , ⋯ , C 1, \cdots, C 1,⋯,C ,其中 C C C 是数据集中目标类别的数量。
在测试时,属于某个格子的
B
B
B 个边界框共享
C
C
C 个类别的条件概率,**每个边界框属于某个目标类别的置信度(类别置信度)**为 :
confidence
=
Pr
(
Class
i
∣
Object
)
×
Pr
(
Object
)
×
IoU
pred
truth
=
Pr
(
Class
i
)
×
IoU
pred
truth
\text { confidence }=\operatorname{Pr}\left(\text { Class }_{i} \mid \text { Object }\right) \times \operatorname{Pr}(\text { Object }) \times \text { IoU }_{\text {pred }}^{\text {truth }}\\=\operatorname{Pr}\left(\text { Class }_{i}\right) \times \text { IoU }_{\text {pred }}^{\text {truth }}
confidence =Pr( Class i∣ Object )×Pr( Object )× IoU pred truth =Pr( Class i)× IoU pred truth
最后,输出一个张量(tensor)
,其维度为
S
×
S
×
(
B
×
5
+
C
)
S \times S \times(B \times 5+C)
S×S×(B×5+C) 。
YOLO
使用 PASCAL VOC
检测数据集,将图像分为
7
×
7
=
49
7 \times 7=49
7×7=49 个小格子,每个格子里有两个边界框,即
S
=
7
,
B
=
2
S=7, B=2
S=7,B=2 。因为 VOC 数据集中有 20 种类别,所以
C
=
20
C=20
C=20 。最终的预测结果是一个
7
×
7
×
30
7 \times 7 \times 30
7×7×30 的张量。
2.网络结构
YOLO
借鉴了 GoogLeNet
的设计思想,其网络结构如下图所示,
包括 24 个卷积层和 2 个全连接层。YOLO
没有使用 Inception模块
,而是直接用
1
×
1
1 \times 1
1×1 卷积层及随后的
3
×
3
3 \times 3
3×3卷积层。
YOLO
的输出是
7
×
7
×
30
7 \times 7 \times 30
7×7×30 的张量。YOLO
使用 Leaky ReLU
作为激活函数:
f
(
x
)
=
{
x
,
x
>
0
0.1
x
,
其他
(3.12)
f(x)= \begin{cases}x, & x>0 \tag{3.12}\\ 0.1 x, & \text { 其他 }\end{cases}
f(x)={x,0.1x,x>0 其他 (3.12)
3.总结
YOLO 使用统一检测模型,相对于传统目标检测,它有几个显著优点:
(1)检测速度非常快。YOLO 将目标检测重建为单一回归问题,对输入图像直接处理,同时输出边界框坐标和分类概率,而且每幅图像只预测 98 个边界框。因此 YOLO 的检测速度非常快,在 Titan X GPU
上能达到 45帧/秒
,Fast YOLO
的检测速度可以达到 155帧/秒
。
(2)背景误判少。以往基于滑动窗口
或候选区域提取
的目标检测算法,只能看到图像的局部信息,会把图像背景误认为目标。而 YOLO
在训练和测试时每个格子都可以看到全局信息,因此不容易把图像背景预测为目标。
(3)泛化性更好。YOLO 能够学习到目标的泛化表示,能够迁移到其他领域。例如,当 YOLO 在自然图像上做训练,在艺术品上做测试时,其性能远优于 DPM,R-CNN 等。
YOLO 目标检测速度很快,但 mAP 不是很高,主要是因为以下方面:
**(1)每个格子只能预测两个边界框和一种目标的分类。**YOLO 将一幅图像均分为 49个格子,如果多个物体的中心在同一单元格内,一个单元格内只能预测出一个类别的物体,就会丢掉其他的物体。
**(2)损失函数的设计过于简单。**边界框的坐标和分类表征的内容不同,但 YOLO 都用其均方误差作为损失函数。
(3)YOLO 直接预测边界框的坐标位置,模型不易训练。
针对 YOLO
中存在的问题,出现了很多改进版。YOLOv2
借鉴了Faster R-CNN
中锚框的思想,同时改进网络结构,形成了 Darknet-19
网络,此外还用卷积层替换了 YOLO
中的全连接层,大幅减少了参数量,提高了目标检测的 mAP 及速度。
YOLOv3
采用了多尺度预测,同时借鉴 ResNet
的思想形成了一个 53 层的 Darknet-53 网络,并使用多标签分类器
代替 softmax 等技术,进一步提高了目标检测的mAP。
YOLOv4
在特征融合阶段使用了多尺度结构,同时引入了深度学习领域多种技巧提升效果,包括加权的残差连接,跨阶段的部分连接,跨批量标准化,自对抗训练,Mish 激活函数等。
YOLOv5
通过增加高质量正样本 anchor
加快收敛,同时整合了大量深度学习领域的技巧,有效提升 YOLO 系列工作的灵活度与速度,便于使用和部署。
此后,YOLO系列又推出了 Scaled-YOLOv4 ,YOLOR ,YOLOX ,YOLOv6 ,YOLOv7, YOLOv8 等工作,感兴趣的读者可以阅读相关论文 了解更详细的内容。
SSD
SSD(Single Shot Detector,单次检测器)
基于 YOLO
直接回归边界框和分类概率的一阶段检测算法,借鉴了 Faster R-CNN
中的锚框思想,使用了多尺度特征图检测,用一个深度神经网络就可以完成目标检测,在满**足检测速度要求的同时,大幅提高了检测的 mAP
。**SSD 的网络结构如下图所示。
在卷积神经网络中,一般距离输入近的卷积层的特征图比较大,后面逐渐使用步长为 2 的卷积或池化来降低特征图的尺寸。例如输入图像是 224 × 224 224 \times 224 224×224 ,特征图的尺寸后面可能会依次变成 112 × 112 , 56 × 56 , 28 × 28 , 14 × 14 112 \times 112, ~ 56 \times 56, ~ 28 \times 28, ~ 14 \times 14 112×112, 56×56, 28×28, 14×14 。不同尺寸的特征图中,同样大小的框,框出的物体大小差异很大。例如在 14 × 14 14 \times 14 14×14 大小的特征图上,框内的物体会非常大,相当于在很远的地方框出一个很大的物体。
SSD 的主要思想是,在不同大小的特征图上都提取默认框(default box,类似于 anchor box )
做检测,以找到最合适的默认框的位置和尺寸。在比较大的特征图上检测比较小的目标,在比较小的特征图上检测比较大的目标,如下图所示。
8
×
8
8 \times 8
8×8 特征图上的框用来检测比较小的目标——猫,而下一层
4
×
4
4 \times 4
4×4 特征图上的框用来检测比较大的目标——狗。
SSD 使用 m m m 层特征图做预测,每个特征图上的每个位置有 6 个默认框。默认框包括 2 个正方形和 4 个长方形,其宽高比 a r ∈ { 1 , 2 , 3 , 1 / 2 , 1 / 3 } a_{r} \in\{1,2,3,1 / 2,1 / 3\} ar∈{1,2,3,1/2,1/3} 。
默认框在第
k
k
k 个特征图上的缩放为:
s
k
=
s
min
+
s
max
−
s
min
m
−
1
(
k
−
1
)
,
k
∈
[
1
,
m
]
\begin{equation*} s_{k}=s_{\min }+\frac{s_{\max }-s_{\min }}{m-1}(k-1), \quad k \in[1, m] \end{equation*}
sk=smin+m−1smax−smin(k−1),k∈[1,m]
其中, s min = 0.2 , s max = 0.9 s_{\min }=0.2, s_{\max }=0.9 smin=0.2,smax=0.9 ,分别对应最低层和最高层的缩放。每个默认框的宽度为 w k a = s k a r w_{k}^{a}=s_{k} \sqrt{a_{r}} wka=skar ,高度为 h k a = s k / a r h_{k}^{a}=s_{k} / \sqrt{a_{r}} hka=sk/ar 。对于宽高比为 1 的情况,增加一个默认框,其缩放为 s k ′ = s k s k + 1 s_{k}^{\prime}=\sqrt{s_{k} s_{k+1}} sk′=sksk+1 。通过上述方式,特征图上每个位置有 6 个不同大小和形状的默认框。
同时对多层特征图上的默认框计算交并比 IoU
,可以找到与真实框大小及位置最接近的框,在训练时能够达到最好的 mAP
。
上图以不同层的特征图上的默认框示例,左下和右上的实线框分别是猫和狗的真实框,是在不同层的特征图上的默认框的示例在低层特征图上,默认框可能框到一个物体的局部,交并比很小;
在高层特征图上,默认框可能框到一个物体,但框太大了,交并比也很小;在中间层特征图上,框的大小和形状最合适,交并比也是最高的。通过这些优化技术,SSD
的目标检测mAP
相对于 YOLO
有一定的提升,也更容易训练。
小结
图像目标检测算法大致分为一阶段和两阶段算法。两阶段算法提出的早一些,包括 R-CNN
,Fast R-CNN
, Faster R-CNN
等。
Faster R-CNN
之后还有很多优化算法,包括更好的特征网络,更好的 RPN,更完善的 RoI 分类,样本后处理等,形成了现在非常有名的 FPN
,Mask R-CNN
等算法。
一阶段算法中,YOLO系列
工作影响力较大且不断发展,目前已经发展到 YOLOv8
;此外一阶段算法中的 SSD
也很有影响力,SSD
之后又有像RSSD
,DSSD
,DSOD
等。
总体上,不论是一阶段还是两阶段,主流图像目标检测算法现在都已经可以全部用神经网络完成。
参考资料
《智能计算系统》-UCAS研究生课程