基于深度学习的目标检测论文综述Paper Reading:A Survey of Deep Learning-based Object Detection(中文)

摘要
介绍了文章的大致思路和结构:
1.介绍,经典的目标检测算法,数据集
2.分析比对,各种目标检测算法,包括一阶段和两阶段的
3.介绍,传统和新的应用,以及一些目标检测的其他分支
4.讨论,用目前这些算法来构建有效的系统,目标检测算法未来的发展方向
背景介绍在这里插入图片描述
目标检测即找出图像中所有感兴趣的物体,包含物体定位和物体分类两个子任务,同时确定物体的类别和位置。

传统目标检测的方法一般分为三个阶段:
1.在给定的图像上选择一些候选的区域,
2.对这些区域提取特征,
3.使用训练的分类器进行分类。
(1)区域选择:这一步是为了对目标的位置进行定位。由于目标可能出现在图像的任何位置,而且目标的大小、长宽比例也不确定,所以最初采用滑动窗口的策略对整幅图像进行遍历,而且需要设置不同的尺度,不同的长宽比。这种穷举的策略虽然包含了目标所有可能出现的位置,但是缺点也是显而易见的:时间复杂度太高,产生冗余窗口太多,这也严重影响后续特征提取和分类的速度和性能。
(2)特征提取:由于目标的形态多样性,光照变化多样性,背景多样性等因素使得设计一个鲁棒的特征并不是那么容易。然而提取特征的好坏直接影响到分类的准确性。其中,这个阶段常用的特征有 SIFT、HOG等。
(3)分类:根据第二步提取到的特征对目标进行分类,分类器主要有 SVM,AdaBoost 等。
基于深度学习的目标检测算法
目标检测任务可分为两个关键的子任务:
1.目标分类 负责判断输入图像或所选择图像区域(Proposals)中是否有感兴趣类别的物体出现,输出一系列带分数的标签表明感兴趣类别的物体出现在输入图像或所选择图像区域(Proposals)中的可能性。
2.目标定位 负责确定输入图像或所选择图像区域(Proposals)中感兴趣类别的物体的位置和范围,Bounding Box用来表示物体的位置信息。
目前主流的目标检测算法主要是基于深度学习模型,大概可以分成两大类别:
(1)One-Stage目标检测算法,这类检测算法不需要Region Proposal阶段,可以通过一个Stage直接产生物体的类别概率和位置坐标值,比较典型的算法有 SSD、YOLO、YOLOv2、YOLOv3和CornerNet;
(2)Two-Stage目标检测算法,这类检测算法将检测问题划分为两个阶段,第一个阶段首先产生候选区域(Region Proposals),包含目标大概的位置信息,然后第二个阶段对候选区域进行分类和位置精修,这类算法的典型代表有R-CNN,Fast R-CNN,Faster R-CNN等。
目标检测模型的主要性能指标是检测准确度和速度,其中准确度主要考虑物体的定位以及分类准确度。一般情况下,Two-Stage算法在准确度上有优势,而One-Stage算法在速度上有优势。
Two-stage (基于候选区域的目标检测)
滑动窗口检测器
自从 AlexNet 获得 ILSVRC 2012 挑战赛冠军后,用 CNN 进行分类成为主流。一种用于目标检测的暴力方法是从左到右、从上到下滑动窗口,利用分类识别目标。为了在不同观察距离处检测不同的目标类型,需要使用不同大小和宽高比的窗口。 在这里插入图片描述
变形图像块被输入 CNN 分类器中,提取出 4096 个特征。之后,我们使用 SVM 分类器识别类别和该边界框的另一个线性回归器。
在这里插入图片描述
变形图像块被输入 CNN 分类器中,提取出 4096 个特征。之后,我们使用 SVM 分类器识别类别和该边界框的另一个线性回归器。

R-CNN(2014年):第一个把CNN用到目标检测的算法,并且效果远好于传统算法。思路还是和以前的非CNN算法类似,分切图、特征抽取(以前是HOG之类的手动,现在用CNN)、抽取后的特征图的分类及定位。 R-CNN生成Proposals的方法是传统方法Selective Search,主要思路是通过图像中的纹理、边缘、颜色等信息对图像进行自底向上的分割,然后对分割区域进行不同尺度的合并,每个生成的区域即一个候选Proposal,如下图所示。这种方法基于传统特征,速度较慢。选择性搜索(Selective Search )就是一种典型的候选区域方法。算法原理如下:首先将每个像素作为一组。然后,计算每一组的纹理,并将两个最接近的组结合起来。但是为了避免单个区域吞噬其他区域,我们首先对较小的组进行分组。我们继续合并区域,直到所有区域都结合在一起。下图第一行展示了如何使区域增长,第二行中的蓝色矩形代表合并过程中所有可能的 ROI。与寻找几乎个区域比起来,这种方法要高效的多。在这里插入图片描述
Selective Search示意图
R-CNN 利用候选区域方法创建了约 2000 个 ROI。这些区域被转换为固定大小的图像,并分别送到卷积神经网络中。之后使用SVM对区域进行分类,使用线性回归损失来校正边界框,以实现目标分类并得到边界框。以下是 R-CNN 整个系统的流程图
在这里插入图片描述
(R-CNN的出现,像是一个应用题的解,如何把卷积神经网络用于目标检测?卷积神经网络用于手写体数字检测LeNet早在1994年就提出了。但如何切图(这里用了Selective Search)、如何设计网络(Alexnet)、如何分类(SVM)和如何定位(对BBox的偏移做回归),以及其他各种细节上的处理,使得在速度和精度上都能比较优秀,是很复杂的。从思路上来说,感觉R-CNN没有特别新的东西,但是在各步骤的细节上在当时做的很好,实现了从0到1的好开端。)
Fast R-CNN(2015年):R-CNN 需要非常多的候选区域以提升准确度,但其实有很多区域是彼此重叠的。如果我们有 2000 个候选区域,且每一个都需要独立地馈送到 CNN 中,那么对于不同的 ROI,我们可能需要重复提取很多次特征。因此 R-CNN 的训练和预测速度非常慢。 CNN 中的特征图以一种密集的方式表征空间特征,那么我们能直接使用特征图代替原图来检测目标吗?答案是肯定的。 在这里插入图片描述
在这里插入图片描述
思路上有了很大的一个改进,即输入整张图片到网络中,共享卷积层先做特征抽取再切图,并且用RoI Pooling来统一二阶段的输入特征大小,从而极大提升了速度,除了切图部分其他部分都连起来了。Fast R-CNN 选择了 VGG16 中的卷积层 conv5 来生成 ROI区域在对应的特征图上的映射特征图块,并用于目标检测任务中。我们使用 ROI 池化将特征图块转换为固定的大小,并送到全连接层进行分类和定位。因为 Fast-RCNN 不会重复提取特征,所以它能显著地减少处理时间。在这里插入图片描述

ROI 池化
因为 Fast R-CNN 使用全连接层,所以我们应用 ROI 池化将不同大小的 ROI 转换为固定大小。比如我们将 8×8 特征图转换为预定义的 2×2 大小:在这里插入图片描述
左上角:输入特征图;
右上角:将 ROI(蓝色区域)与特征图重叠;
左下角:将 ROI 拆分为目标维度。例如,对于 2×2 目标,我们将 ROI 分割为 4 个大小相似或相等的部分;
右下角:找到每个部分的最大值,得到变换后的特征图。
按上述步骤得到一个 2×2 的特征图块,可以送至分类器和边界框回归器中。使用softmax损失进行分类;使用回归损失比如平滑L1损失校正包围框。总损失是两部分的和,然后反向传播进行训练。Fast R-CNN 最重要的一点就是包含特征提取器、分类器和边界框回归器在内的整个网络能通过多任务损失函数进行端到端的训练,这种多任务损失即结合了分类损失和定位损失的方法,大大提升了模型准确度。
Faster R-CNN(2015年,Fast R-CNN提出3个月后,由何凯明等人提出):Fast R-CNN 依赖于外部候选区域方法,如选择性搜索。但这些算法在 CPU 上运行且速度很慢。在测试中,Fast R-CNN 需要 2.3 秒来进行预测,其中 2 秒用于生成 2000 个 ROI。因此区域生成的计算成为整个检测网络的瓶颈。Faster R-CNN 采用与 Fast R-CNN 相同的设计,只是它用区域生成网络(Region Proposal Network,RPN)代替了候选区域方法。新的候选区域网络(RPN)在生成 ROI 时效率更高,并且以每幅图像 10 毫秒的速度运行。
在这里插入图片描述
RPN
区域生成网络(RPN)将前面卷积网络的输出特征图作为输入,比如VGG16的conv5特征图。它在特征图上滑动一个 3×3 的卷积核,以使用卷积网络构建与类别无关的候选区域。使用VGG网络提取特征的话,每个 3x3 区域会得到一个512维的特征向量,然后送到两个独立的全连接层,以预测边界框和两个目标分数(是目标或者不是目标)。在这里插入图片描述
对于特征图中的每一个位置,RPN 会做 k 次预测。因此,RPN 将输出 4×k 个坐标和每个位置上 2×k 个得分。下图展示了 8×8 的特征图,且有一个 3×3 的卷积核执行运算,它最后输出 8×8×3 个 ROI(其中 k=3)。下图(右)展示了单个位置的 3 个候选区域。在这里插入图片描述
Faster R-CNN 使用更多的锚点。它部署 9 个锚点框:3 个不同宽高比的 3 个不同大小的锚点框。每一个位置使用 9 个锚点,每个位置会生成 2×9 个目标分数和 4×9 个坐标。在这里插入图片描述
(至此R-CNN成为经典,实现了End-to-End的完全体。Fast R-CNN中苦于切图还是手动切,故不能整体联通。Faster R-CNN中使用RPN代替了原先的Selective Search切图算法,用神经网络的方法自动来抽取候选框,很显然会比人工抽取候选框要好很多。自动切,自动提取特征来分类和回归,这些之前需要人工抽取特征的主要部分,都已经实现神经网络的自动抽取,似乎剩下的只有少量的可能可以做自动抽取的部分了。看一下Faster R-CNN需要人工设定的部分,如果继续朝自动提取特征这个方向改进的话,剩下的只有一些参数选择的事了:backbone的选择、anchor box的尺寸和中心点的设置、RPN及二阶段Classifier中判定正负样本的overlap阈值设置、RPN及Classifier输出的结果筛选(Faster R-CNN中用NMS)等等,看起来都难以再有Faster R-CNN这么大的飞跃了。)
Mask R-CNN:Faster R-CNN在Instance Segmentation的改进版,增加了一个mask分支来完成mask任务。最重要的一个贡献,在于提出了RoI Pooling的改进版ROIAlign,提升位置判别的精度。

One-stage

one-stage相较于two-stage,牺牲了精度提升了速度。
YOLO (You Only Look Once): 将物体分类和物体定位在一个步骤中完成。Yolo直接在输出层回归bounding box的位置和bounding box所属类别,从而实现one-stage。通过这种方式,Yolo可实现45帧每秒的运算速度,完全能满足实时性要求(达到24帧每秒,人眼就认为是连续的)。CVPR2016发表的,从2015年的Faster R-CNN,可以比较容易的想到,直接用RPN或者类RPN做分类,直接一次性给判别结果。最直接的,把RPN的二分类改成多分类, YOLO系列算法在构建回归目标时一个主要的区别就是如果将图像划分成SxS的格子,每个格子只负责目标中心点落入该格子的物体的检测;如果没有任何目标的中心点落入该格子,则为负样本。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
单次检测器通常需要在准确率和实时处理速度之间进行权衡。它们在检测太近距离或太小的目标时容易出现问题。在下图中,左下角有 9 个圣诞老人,但某个单次检测器只检测出了 5 个。在这里插入图片描述
YOLOv2:针对YOLO做了一些改进,卷积层前加BN层,使用DarkNet等等。
YOLOv3:在YOLOv2之上的改进, 调整了网络结构;利用多尺度特征进行对象检测; 预测对象类别时用logistic取代了softmax。
网络架构
在基本的图像特征提取方面,YOLO v3采用了称之为Darknet-53的网络结构(含有52个卷积层1个全连接层),它借鉴了残差网络residual network的做法,在一些层之间设置了快捷链路(shortcut connections)。DarkNet-53 主要由 3 × 3 和 1× 1 的卷积核以及类似 ResNet 中的快捷链路构成。相比 ResNet-152,DarkNet 有更低的 BFLOP(十亿次浮点数运算),但能以 2 倍的速度得到相同的分类准确率。 每个残差组件有两个卷积层和一个快捷链路,示意图如下:在这里插入图片描述
在这里插入图片描述
上图的Darknet-53网络采用2562563作为输入,最左侧那一列的1、2、8等数字表示多少个重复的残差组件。
特征金字塔网络(FPN)——利用多尺度特征进行检测 在YOLO v3更进一步采用了3个不同尺度的特征图来进行对象检测。在这里插入图片描述
结合上图看,卷积网络在79层后,经过下方几个黄色的卷积层得到一种尺度的检测结果。相比输入图像,这里用于检测的特征图有32倍的下采样。比如输入是416x416的话,这里的特征图就是13x13了。由于下采样倍数高,这里特征图的感受野比较大,因此适合检测图像中尺寸比较大的对象。
为了实现细粒度的检测,第79层的特征图又开始作上采样(从79层往右开始上采样卷积),然后与第61层特征图融合(Concatenation),这样得到第91层较细粒度的特征图,同样经过几个卷积层后得到相对输入图像16倍下采样的特征图。它具有中等尺度的感受野,适合检测中等尺度的对象。
最后,第91层特征图再次上采样,并与第36层特征图融合,最后得到相对输入图像8倍下采样的特征图。它的感受野最小,适合检测小尺寸的对象。
上面使用不同尺寸特征图进行预测的网络称为特征金字塔网络(FPN),是一种旨在提高准确率和速度的特征提取器。
数据流如下:
在这里插入图片描述
FPN 由自下而上和自上而下路径组成。其中自下而上的路径是用于特征提取的常用卷积网络。空间分辨率自下而上地下降。当检测到更高层的结构,每层的语义值增加。
9种尺度的 anchor boxes
随着输出的特征图的数量和尺度的变化,先验框的尺寸也需要相应的调整。YOLO2已经开始采用K-means聚类得到先验框的尺寸,YOLO3延续了这种方法,为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框。在COCO数据集这9个先验框是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。
分配上,在最小的13x13特征图上(有最大的感受野)应用较大的先验框(116x90),(156x198),(373x326),适合检测较大的对象。中等的26x26特征图上(中等感受野)应用中等的先验框(30x61),(62x45),(59x119),适合检测中等大小的对象。较大的52x52特征图上(较小的感受野)应用较小的先验框(10x13),(16x30),(33x23),适合检测较小的对象。在这里插入图片描述
感受一下9种先验框的尺寸,下图中蓝色框为聚类得到的先验框。黄色框式ground truth,红框是对象中心点所在的网格。在这里插入图片描述
在这里插入图片描述
对于一个输入图像,YOLO v3将其映射到3个尺度的输出张量,代表图像各个位置存在各种对象的概率。
看一下YOLO v3共进行了多少个预测。对于一个416x416的输入图像,在每个尺度的特征图的每个网格设置3个先验框,总共有 13x13x3 + 26x26x3 + 52x52x3 = 10647 个预测。每一个预测是一个(4+1+80)=85维向量,这个85维向量包含边框坐标(4个数值),边框置信度(1个数值),对象类别的概率(对于COCO数据集,有80种对象)。
对比一下,YOLO v2采用13x13x5 = 845个预测,YOLO v3的尝试预测边框数量增加了10多倍,而且是在不同分辨率上进行,所以mAP以及对小物体的检测效果有一定的提升。
SSD( Single-Shot MultiBox Detector):YOLO的改进版,针对YOLO的不足,加入了多尺度的特征,加入了bg类的预测。 SSD检测算法的网络结构如下图所示,其中Backbone为VGG网络,使用不同阶段不同分辨率的feature maps进行预测。 SSD系列检测算法在确定正负样本的时候通过交并比大小进行区分,当某一个Ground Truth的目标框与anchor的交并比最大且对应的交并比大于某一个阈值的时候,对应anchor即负责检测该Ground Truth,即每一个anchor最多负责一个物体的检测,同一个物体可能被多个anchor同时检测。在这里插入图片描述
DSSD:加入了反卷积。 DSSD也是使用不同阶段不同分辨率的feature maps进行预测,在不考虑Backbone网络结构差别的情况下,可以发现DSSD相比于SSD多了一系列的后续上采样操作,SSD是使用下采样过程中的feature maps进行预测,而DSSD是使用上采样过程中的feature maps进行预测。显而易见的是,SSD用于检测的feature maps位于网络的较低层,表征能力较弱,而DSSD用于检测的feature maps位于网络的较高层,表征能力较强,同时DSSD在反卷积的过程中通过Skip-Connection引入了较低层的feature maps,实现了一定程度的特征融合。所以DSSD的效果要优于SSD检测算法。
在这里插入图片描述
RetinaNet:提出了Focal loss,解决one-stage里普遍存在的类别不平衡问题。
CornerNet[10]:如下图所示,CornerNet检测算法巧妙的将检测框转换成了关键点,显而易见,一个目标框可以由两个点(左上角和右下角)来表示,那么对于一个目标物体在预测的时候就可以直接预测两个类别的关键点,然后对关键点进行组合即可生成对应的目标框。在这里插入图片描述
损失主要包括分类损失(Cls Loss)和定位损失(Loc Loss),常见的损失组合主要有如下两种Cls Loss + Loc Loss(SSD系列算法)、Cls Loss + Obj Loss + Loc Loss (YOLO系列算法),其中YOLO系列算法相比于SSD系列算法多了Object Loss,即判断对应区域是否为物体的损失。 One-Stage目标检测算法的正负样本不均衡的问题比较严重,对于设计损失函数还会有一些针对创新。
数据集&评估矩阵
早期的数据集:人脸识别、行人识别
通用数据集:PASCAL VOC、MS COCO、ImageNet-loc

通用目标检测算法分析
特征抽取(主干网络)
以FPN为代表(PFPNet、WeaveNet等),由于物体的大小差异,考虑从不同的层抽取信息来判别不同大小的物体。
另一个思路是从不同物体间的语义关系出发来帮助识别遮挡和小物体,个人理解总体来说就是把box之间的信息加入到网络中。(例如R-DAD中,作者把一个anchor再切成上下左右的子anchor,在整个anchor中再加入子anchor的信息,有利于重叠的box间的信息提取。还有一系列其他的文章,后续有需要和时间再细看)
再就是注意力机制,以及可变卷积等等。

提升位置精度
位置精度的衡量标准,主要是IoU。大部分的论文就围绕IoU做文章,一种是设计新的regression loss,在loss中考虑IoU;另一种是设计变种IoU。具体的,在Unitbox中使用-ln(IoU)作为loss代替regression的l2 loss,在Generalized Intersection over Union中,重新定义了一种新的IoU作为更合适的衡量标准。IoU-Net中提出在第一阶段新增一个输出来预测IoU,这样可以接入程度信息。

解决负样本的不平衡
two-stage方法在第一个阶段已经筛选了大量的anchor,故样本不平衡问题相对不大,而在one-stage中则没有。一般的方法有hard negative mining(OHEM)。也有许多其他的算法如Libra r-cnn等等用特定的抽样方法而不是随机抽样(IoU-balanced sampling)。
另一种就是Focal loss及其他的一些loss(Average-Precision loss),通过调整正负样本的loss值解决问题。

提升NMS方法
Relation network中用模型保留了一部分不使用NMS的框。在IoU-Net中使用IoU而不是类别的confidence作为选框依据。另外还有adaptive-NMS,soft-NMS、softer-NMS等等。
结合one-stage和two-stage
一般把是否有ROI作为one-stage与two-stage的判别标准,RefineDet及后续的AlignDet等。
复杂情况的处理
小物体及遮挡物体,许多是人脸识别或是行人识别的场景。有ssd及其变种,也有PGAN,tiny face等等。
尺度跨度太大的物体,一般有3种解决思路:原图缩放到不同尺度来训练,多种大小的filters,设置不同大小的anchor。
anchor-free
这两年挺多的anchor-free的论文,Fcos、Foveabox、CornerNet、CenterNet、Dubox等等,今年非常多~
training from scratch(不预训练)
用预训练模型可能会存在几个问题(如网络结构相对固定,不同场景存在差异等等),于是有DetNet、DSOD、ScratchDet等算法,以及何恺明的Rethinking等等的论文,开始去思考和探索如何设计网络来提升检测。
设计新结构
DetNet,新的backbone。以及Light-head r-cnn: In defense of two-stage object detector,解决两阶段算法的头部计算量太大问题。

加速
mobile等设备上的应用,需要实时高速的模型,故而有一系列的这方面的算法(一阶段的YOLO、SSD等等)
更快更准确
有一些结合one-stage与two-stage的工作;

应用与分支
人脸检测
Hyperface,Wasserstein cnn,Adaacos,ArcFace等等,详见Deep face recognition: A survey,详细介绍各种深度学习的人脸检测方法
行人检测
具体参看Computer vision and deep learning techniques for pedestrian detection and tracking: A survey

总结与展望
gpu等算力的发展,使得深度学习及目标检测成为可能。目标检测朝着更准、更快的方向发展,发展的方向有新的结构、新的特征提取、提升处理速度、从头训练、anchor-free、特定场景(小物体、遮挡物体)、one-stage与two-stage融合、NMS优化、正负样本不平衡、更准确定位、更准确分类等等。并且,目标检测在各领域(公共安全、军事、交通、医学、生活等等)的应用也越来越广泛和成熟。接下来是几个方向的展望:
one-stage与two-stage融合
two-stage过程中有个比较耗时费力的选框过程(比如RoI Pooling和NMS)。而one-stage的准确率一直相对较差一些。如何结合one-stage与two-stage的优点(前者更快,后者更准)是一个挑战。
ps:如果我想更准一些,是否可以重新考虑stage?比如Cascade就是拉长stage的感觉。
视频目标检测
在视频目标检测中,运动模糊、视频散焦、运动目标模糊、目标运动剧烈、目标小、遮挡和截断等问题使得该任务在现实场景和遥感场景中难以获得良好的性能。深入研究移动目标和视频等更复杂的源数据是未来研究的重点之一。
高效的后处理方法
类似NMS之类的,对预测框的进一步处理的方法也对准确率有很大的影响。
弱监督目标检测
多领域目标检测
3D目标检测
显著目标检测(SOD)
无监督目标检测
多任务目标检测
多源信息辅助(比如文本信息)
终端目标检测系统
医学图像和辅助诊断
遥感目标检测
基于GAN的目标检测

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值