- 深度学习之图像目标检测与识别方法
- 史朋飞等
- 2468字
- 2024-10-18 15:06:01
0.2.2 基于深度学习的目标检测算法研究
目标检测通常是指在图像或者视频中找到特定目标的位置,一般通过边界框的方式框选出目标,如果目标种类多于一种,则还需要指出所框选的目标类别。对于人类来说,视觉的作用就是告诉人类物体的种类和位置,目标检测正如视觉之于人类,其目的是解决计算机视觉应用的两个基本问题:该物体是什么,以及该物体在哪里。
由于目标检测具有广泛的应用前景,因此受到广泛的关注。在人脸识别[24]、步态识别[25]、人群计数[26]、安全监控[27]、自动驾驶[28]、无人机场景分析[29]等任务中,目标检测具有至关重要的作用。目标检测的研究领域主要包括边缘检测[30]、多目标检测[31-33]、显著性目标检测[34-35]等。
目标检测的研究随着深度学习的革新得到了飞速发展。大多数目标检测均以深度学习网络为主干,目标检测算法从输入图像中提取特征,从而进行分类和定位。利用深度学习网络的目标检测算法大体可以分为两种类型:两阶段(Two-Stage)目标检测算法和单阶段(One-Stage)目标检测算法。两阶段目标检测算法提出的时间更早,检测精度高,但检测速度慢。单阶段目标检测算法的检测速度快,但检测精度略低。目前,无论单阶段目标检测算法还是两阶段目标检测算法,都在向着“又快又准”的目标前进。下面介绍这两类目标检测算法的研究现状。
0.2.2.1 两阶段目标检测算法
两阶段目标检测算法是指先通过某种方式生成一些候选区域,然后对这些候选区域的内容进行分类,确认是否包含待检测的目标,并对这些区域进行修正。因为包含了两个步骤,即候选区域的生成和候选区域的检测,所以被称为两阶段目标检测算法。
2014年,Girshick等人[36]提出了RCNN。RNN首先利用选择性搜索对图像进行划分,生成候选区域;然后将候选区域输入到一个在ImageNet上训练完毕的CNN模型来提取特征,从而取代了传统的滑窗算法;最后使用线性 SVM 分类器对每个候选区域内的目标进行检测,从而识别目标类别。通过这样的方式,RCNN拥有非常高的检测精度,但RCNN的缺点也十分明显:由于候选区域中有大量的重叠区域,RCNN对这些重叠区域进行的计算存在大量冗余,因此严重拖慢了检测速度,并且所有的候选区域都需要缩放到固定尺寸,这会导致大量不期望产生的几何形变。
2014年,He等人[37]为解决RCNN的计算冗余问题,提出了一种空间金字塔池化网络(Spatial Pyramid Pooling Network,SPPNet)。不同于RCNN直接在图像上划分候选区域,SPPNet在提取的图像特征上选择候选区域,这样可以减少许多计算冗余。针对候选区域尺寸不同的问题,SPPNet可以将任意大小的卷积特征映射为固定维度的全连接输入,从而避免像 RCNN 那样在缩放候选区域时导致的几何形变。SPPNet 的检测速度是RCNN的20多倍,而且这是在没有检测精度损失前提下的检测速度。同样,SPPNet 也存在一些问题:不同图像的训练样本通过 SPP 层的反向传递效率十分低,这直接导致SPPNet无法更新SPP层以下的权重,使检测精度的提升非常有限。2015年,Girshick等人[38]提出了Fast RCNN。Fast RCNN使用边界框回归(Bounding-Box Regression)和非极大值抑制,可得到不重复的预测得分最高的边界框。与 RCNN 相比,Fast RCNN的检测精度和检测速度有了大幅提升,但由于候选区域检测的限制,Fast RCNN 的检测速度仍然得不到太大的提升。2015 年,Ren 等人[39]提出了Faster-RCNN。Faster-RCNN中的区域建议网络可以将目标检测的定位和分类操作分开执行。Faster-RCNN流程如下:首先使用VGG(Visual Geometry Group)网络模型提取特征,然后对提取到的特征通过区域建议网络生成候选区域,接着判断候选区域是目标还是背景,并且对这些候选区域进行修正,最后利用ROI池化对区域建议网络筛选修正后的候选区域进行分类。相较于Fast RCNN,Faster-RCNN的检测速度终于得到了很大的突破。
0.2.2.2 单阶段目标检测算法
单阶段目标检测算法只需一个阶段就能同时完成目标定位和目标分类两个任务。单阶段目标检测算法的整个过程更加简洁,所需的检测时间也更短,在检测速度上更满足实时性的要求。
2015年,Redmon等人[40]提出了 YOLOv1。YOLOv1 同样首先使用 CNN提取特征,然后将整个图像划分成棋盘格状,并对每个单元格预测一定数量的边界框(Bounding Box)以及属于不同类别的概率。每个边界框都有5个变量,分别是4个描述位置的坐标值,以及每个类别的置信度。YOLOv1将目标区域的预测与目标类别的预测结合起来,大大地提高了检测速度。但YOLOv1的每个单元格只能预测一个对象,并且检测精度也十分有限。由于YOLOv1并没有利用丰富的浅层细节信息进行预测,因此YOLOv1对小目标的检测效果很差。
2016年,Liu等人[41]针对YOLOv1存在的小目标检测精度低等问题,提出了单步多框预测(Single Shot MultiBox Detector,SSD)。相较于YOLOv1,SSD在CNN后直接进行目标检测,而不是像YOLOv1那样在全连接层之后进行目标检测。SSD在提取不同尺度的特征后进行目标检测:对于小目标,SSD利用丰富的浅层位置信息和细节信息进行检测;对于大目标,SDD利用丰富的深层语义信息来进行检测。SSD还对锚定框(Anchor Box)的长宽比和大小进行了固定,在每个特征中检测固定数量的锚定框中是否包含目标。通过上述改进,SSD的检测精度和检测速度都要高于YOLOv1,并且SSD对小目标也有不错的检测精度。
2017年,Redmon 等人[42]将 SSD的优点移植到 YOLOv1 上并进行了改进,提出了YOLOv2。在YOLOv2中,Redmon等人设计了一种全新的CNN来提取图像特征,并利用聚类算法对数据集中的标签框大小进行聚类,确定锚定框的尺寸,通过为卷积层添加批标准化(Batch Normalization,BN,也称为批量归一化)来降低模型的过拟合,有效提高了模型的收敛能力。相较于 YOLOv1,YOLOv2 首先在分辨率更高的ImageNet上进行训练,然后使用检测数据集进行微调。Redmon等人还在YOLOv2中添加了多尺度训练方法,使得YOLOv2具备多尺度目标检测能力。2018年,Redmon等人[43]在YOLOv2的基础上做了进一步改进,提出了YOLOv3。YOLOv3设计了一种特征提取能力更强的卷积神经网络——Darknet53,通过改进聚类算法获得了更加精确的锚定框尺寸。YOLOv3借鉴了特征金字塔网络(Feature Pyramid Networks,FPN)的多尺度预测思想,在3个尺度上进行预测,每个尺度对应3个候选区域。YOLOv3还使用了多标签分类算法,每个候选区域可以预测多个分类。YOLOv3通过增强卷积核的步长来代替池化层,减少了模型参数。YOLOv3的速度略慢于YOLOv2,但综合来看,YOLOv3 是当时最优的单阶段目标检测算法。2020 年,Redmon 等人[44]对YOLOv3进行了改进,提出了YOLOv4。YOLOv4筛选并应用了从YOLOv3发布至今的、在各种目标检测算法上提升检测精度的技巧,并将YOLOv3的Darknet53替换成特征提取能力更强的CSPDarknet53,同时添加了SPPNet以扩大感受域的大小,使用路径聚合网络PANet进行多通道的特征融合。