文章目录
八月底写的了,虽然自知有很多问题,到底是两周心血,把它搬上来记录下。
1 引言
视觉识别是计算机视觉的重要问题之一,目标检测是其中的一个子类。目标检测1是指在图像或者视频中,判断目标的对象的类别并找出其位置。目标检测任务的实例包括行人检测2、人脸检测3、骨架检测等。目标检测可以为图像和视频的理解提供有价值的信息,在自动驾驶4、人脸识别、信号灯识别等方面均获得广泛应用。
在2013年以前,目标检测方法大多以传统方法为主,其主要思路是特征提取加分类器,2013年开始有学者将深度学习迁移到目标检测领域,来提升目标检测的精度和速度。2014年R-CNN被提出,相比传统方法,他们的体系结构更深,可以表达更复杂的特性。本文通过对目标检测领域的代表模型进行总结叙述并进行比较,提出几个未来可以改进的方向。
本文的组织如下:第二节介绍目标检测的概念和目标检测算法的评价指标,第三节介绍传统的目标检测算法,第四节介绍基于深度学习的目标检测算法。第五节提出思考并进行展望。
2 目标检测的简介和评价指标
目标检测算法的定义为分类和定位图像中存在的目标,将其用矩形框选出,并标出其置信度。评价一个目标检测算法的好坏,可以通过以下几个指标进行判断:
AP(average precision) 代表平均精度。IOU(Intersection-Over-Union)IoU指的是两个区域的交集除以两个区域的并集的结果。Precision(准确率)指的是符合要求的正确识别的物体的个数占总识别出的物体个数的百分数。Recall(召回率)指的是符合要求正确识别物体的个数占测试集中物体的总个数的百分数。
TP:true positive 即预测正确,IoU>0.5的检测框数量
FP:false negative即预测错误,即此处没有物体却被预测到,IoU<=0.5的预测框数量
FN:false negative即此处有物体却未被检测到,指没有检测到ground truth的数量
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
Precision= \frac{TP}{TP+FP}
Precision=TP+FPTP
R
e
c
a
l
l
=
T
P
T
P
+
F
N
Recall=\frac{TP}{TP+FN}
Recall=TP+FNTP
在不同置信度阈值下面得到不同的precision和recall,AP即相当于以recall为横轴,以precision为纵轴所构成的PR曲线的面积。
mAP(mean Average Precision) 指的是各类别AP的平均值。
3 传统的目标检测算法
传统的目标检测算法的具体操作步骤为首先通过滑动窗口进行穷举,在每个窗口内提取特征,再利用分类器执行分类。在特征提取阶段的主要方法有Haar、HOG、LBP等,常用的分类器有SVM、Random Forest等。其优点包括在CPU上运行仍然很快,算法解释性较好,容易调试找到错误,在数据量小的样本上表现不错等,但也存在很多缺点,比如,在大数据集上表现很差,特征层很浅,无法表达复杂的特征等。
4 基于深度学习的目标检测算法
通用目标检测算法主要可以分为两个类型,一个是two stage算法,首先生成区域提议,然后将每个候选区域进行分类判别,一个是one stage算法,将其视为回归问题,采用统一框架直接生成结果。下面将分别进行介绍。
4.1 two-stage算法
4.1.1 R-CNN
R-CNN5由Girshick等提出,采用深层架构来提取高层特征,在PASCAL VOC 2012测试上获得53.3%的平均精度(mAP),比此前的最佳结果提高30%以上。其具体步骤如下:(1)使用selective search方法为输入图像生成大约2000个与类比无关的候选区域。选择性搜索结合穷举搜索和分割的优势,首先根据图像分割得到小区域,其次结合区域的相似度,考虑颜色、纹理、大小等来得到较少冗余的候选区域。(2)利用仿射图像变换得到输入所需要的固定形状和大小,利用卷积神经网络(CNN,Convolutional Neural Networks)从候选区域中提取4096维度的特征向量。(3)利用为特定类别预训练的SVM对特征向量进行评分,应用贪婪的非极大值抑制(NMS,Non-maximum suppression)进行过滤,得到最佳检测区域。(4)将特征向量和类别标签传入,利用SVM进行分类。
在数据方面,R-CNN在大数据集(ILSVRC)上进行监督预训练,在小数据集(PASCAL)上的领域特定微调。尽管R-CNN是将深度学习引入目标检测领域的开创性工作,但它仍然存在很多问题,比如由于候选区域存在部分重合,造成很多冗余;对每幅图像的2000个窗口重复应用卷积神经网络,时间耗费巨大,由于存在全连接层,因此需要中途会对图像大小进行调整,耗费时间较多。
4.1.2 SPP-Net
在R-CNN中,区域裁剪会导致内容丢失或失真,因此SPP-Net6在最后一个卷积层和全连接层之间加入空间金字塔池层(SPP层),汇集特征向量生成固定大小的输出,多级池对物体变形具有鲁棒性。针对R-CNN对所有候选区域提取特征耗费时间长的缺陷,SPP-Net在整个图像上运行一次卷积层并提取特征。基于以上两点改进,SPP-Net和R-CNN在准确率上相当的同时大幅度提升速度,达到每张图像约0.5s的速度。
4.1.3 Fast R-CNN
尽管SPP-Net在速度和准确率上有了提升,但其实现过程(特征提取、SVM模型训练、边框回归)仍然是一个分离的过程,而且将特征写入磁盘需要很多存储空间和时间。因此Girshick等人提出Fast R-CNN7架构。
其思路为首先是选择性搜索得到候选框,将整幅图像喂入卷积网络,将不同大小的候选区域映射到特征向量上,最后通过ROI pooling层转换为固定7×7的特征向量,最后进入全连接层,输出包括两个,一个是softmax的分类,另一个是bounding box的位置。
4.1.4 Faster R-CNN
从SPP-Net到Fast R-CNN都致力于提升整体速度,但利用Selective Search生成候选区域仍然较慢,Faster R-CNN8针对上述问题,提出使用区域提议网络替代选择性搜索,改变了先前候选区域的选择和深度学习网络分离的情况,使整个系统成为统一的目标检测网络,可以进行端到端的整体优化。
其具体的做法是输入图像喂入神经网络模型后得到特征向量,使用3×3的滑动窗口在特征映射上移动,在窗口每个位置相当于映射原来特征向量的3×3的子区域,为窗口中心像素设置9个anchor,即引入9个不同比例和长宽比的锚框,然后将其喂入分类和回归框,判断anchor是否存在目标并对锚框的位置进行修正。Faster R-CNN在PASCAL VOC 2007+2012数据集上的mAP是73.2%,检测精度得到较大提升。
4.1.5 FPN
利用神经网络模型学习图像特征时,由于浅层网络分辨率高,空间特征丰富,深层网络分辨率低,语义特征丰富,因此特征金字塔常用来识别不同尺度的物体,但仍然存在部分问题,FPN9将低分辨率语义强的特征和高分辨率语义弱的特征结合起来,如图所示。其原理包括以下两个方面:(1)自底向上。自底向上的过程是卷积网络的前馈计算过程。(2)自上而下的路径和横向连接。对强语义的高层特征图进行2倍上采样,和自底向上生成的同样大小的图进行横向连接,以使每一层既具有强语义也有合适的分辨率。不同的分辨率的特征图即可对不同尺寸的物体进行检测。
4.2 one-stage算法
4.2.1 YOLO
Redmon等人提出新的目标检测框架——YOLO10,利用单个神经网络在一次评估中从图像中预测边界框和类概率。其流程为将输入图像分为S×S的网格,如果物体中心落入网格单元,则该单元格负责检测该对象,每个网格预测2个边界框,输出其置信度和类别。
置信度得分被定义为
P
r
(
C
l
a
s
s
i
)
∗
I
O
U
p
r
e
d
t
r
u
t
h
Pr\left ( Class_{i} \right )\ast IOU_{pred}^{truth}
Pr(Classi)∗IOUpredtruth,通过将条件类概率和单个盒子的置信度预测相乘,得到每个盒子的特定类别的置信度得分。公式如下:
P
r
(
C
l
a
s
s
i
∣
O
b
j
e
c
t
)
∗
P
r
(
O
b
j
e
c
t
)
∗
I
O
U
p
r
e
d
t
r
u
t
h
=
P
r
(
C
l
a
s
s
i
)
∗
I
O
U
p
r
e
d
t
r
u
t
h
Pr\left ( Class_{i}|Object \right )\ast Pr\left ( Object \right )\ast IOU_{pred}^{truth} = Pr\left ( Class_{i} \right )\ast IOU_{pred}^{truth}
Pr(Classi∣Object)∗Pr(Object)∗IOUpredtruth=Pr(Classi)∗IOUpredtruth
网络架构:
YOLOv1由24层卷积层、4个池化层和两个全连接层组成,最终预测输出的是7×7×30的预测张量。其中7×7代表的是图像的7×7网格,30代表的是2×5+20,表格2个bounding box的位置和20个类别。
损失函数被定义为如下所示:
其中,
1
i
j
o
b
j
1 _{ij}^{obj}
1ijobj表示第i个网格中的第j个预测框负责该预测,只有在对象出现时网格损失函数惩罚分类错误,当预测器负责ground truth box时,损失函数对边界框进行惩罚,来判定其IOU其否最高。
简化版YOLO速度可以达到155 fps,提升很多,但对于小物体的定位效果不太好,且定位误差较大,在后续的YOLOv2等引入anchor等同时期其他目标检测算法的可取之处来进行改进。
4.2.2 SSD
卷积网络不同层次的特征向量具有不同的空间和语义信息,SSD综合不同的特征向量设置不同的anchor,用来检测不同尺度的物体。SSD11在PASCAL VOC2007上测试的mAP达到74.3%,和Faster R-CNN相当,同时速度达到59fps。
5 思考和展望
从2014年开始,基于深度学习的目标检测框架发展迅猛,目前主流的目标检测方法即是上述一系列算法,如果更加关注检测性能,使用two stage的效果更好,如果希望实现实时检测,对速度要求较高,可以使用one stage算法。随着自动驾驶和智慧交通等的发展,目标检测对实时性要求可能越来越高,如果用更少的参数优化模型,在不牺牲精度的同时提高速度是一个重要的问题。在小目标检测方面,如果设计尺度自适应的检测器,提高局部遮挡下的小目标的定位精度也是未来需要解决的问题。
参考文献
P. F. Felzenszwalb et al., “Object detection with discriminatively trained part-based models,” IEEE Trans. Pattern Anal. Mach. Intell., vol. 32, no. 9, pp. 1627–1645, Sep. 2010. ↩︎
C. Wojek et al., “Pedestrian detection: An evaluation of the state of the art,” IEEE Trans. Pattern Anal. Mach. Intell., vol. 34, no. 4, pp. 743–761, Apr. 2012. ↩︎
K.-K. Sung and T. Poggio, “Example-based learning for view-based human face detection,” IEEE Trans. Pattern Anal. Mach. Intell., vol. 20, no. 1, pp. 39–51, Jan. 1998. ↩︎
X. Chen et al., “Multi-view 3D object detection network for autonomous driving,” in Proc. CVPR, 2017, pp. 6526–6534. ↩︎
R. Girshick et al., “Rich feature hierarchies for accurate object detection and semantic segmentation,” in Proc. CVPR, 2014, pp. 580–587. ↩︎
K. He et al., “Spatial pyramid pooling in deep convolutional networks for visual recognition,” IEEE Trans. Pattern Anal. Mach. Intell., vol. 37, no. 9, pp. 1904–1916, Sep. 2015. ↩︎
R. Girshick, “Fast R-CNN,” in Proc. ICCV, 2015, pp. 1440–1448. ↩︎
S. Ren et al., “Faster R-CNN: Towards real-time object detection with region proposal networks,” in Proc. NIPS, 2015, pp. 91–99. ↩︎
T.-Y. Lin et al., “Feature pyramid networks for object detection,” in Proc. CVPR, 2017, pp. 936–944. ↩︎
J. Redmon et al., “You only look once: Unified, real-time object detection,” in Proc. CVPR, 2016, pp. 779–788. ↩︎
W. Liu et al., “SSD: Single shot multibox detector,” in Proc. ECCV, 2016, pp. 21–37. ↩︎