目标检测方法综述

基于深度学习的目标检测方法综述

摘 要
目标检测是检测图像中的物体的类别和具体位置的技术,随着卷积神经网络的不断发展,也带动了目标检测算法的进步,如今基于深度学习的算法已在目标检测领域成为主流。本文将目标检测算法分为两大类:单阶段和两阶段,具体介绍了每种算法的模型结构,算法性能和优缺点,最后进行了总结和展望。
关键词:深度学习,目标检测算法
Abstract:Object detection is a technology that detects the category and specific location of objects in an image. With the continuous development of convolutional neural networks, it has also led to the progress of target detection algorithms. Nowadays, algorithms based on deep learning have become mainstream in the field of object detection. This paper divides object detection algorithms into two categories: single-stage and two-stage. The model structure, algorithm performance, advantages and disadvantages of each algorithm are specifically introduced, and finally, a summary and outlook are given.
Keywords: deep learning, object detection algorithm

一.前言

在人工智能领域,一直有一个子领域凝聚着众多科学家和心血,其发展一直都是举世瞩目的,那就是计算机视觉领域。而现代的计算机视觉又可细分为四大类问题。分类,定位,检测和分割问题[11]。目标检测是一个检测问题,需要解决分类和定位两大类问题,也相当于是分类和回归问题。定位目标检测主要分为两类方法:单阶段和两阶段,本文将检测算法按照这两类进行具体阐述。

二.两阶段目标检测算法

两阶段目标检测算法需要通过特征提取,然后生成候选框,再使用候选框来进行预测,此类型的方法以R-CNN为代表。

2.1 R-CNN

随着CNN的提出,沉寂已久的目标检测领域终于有了新的方法指引,R-CNN就是这一产物,这是目标检测在深度学习领域的开山之作,由Girshick Ross等人提出。R-CNN(Region proposal with CNNs)第一次将CNN引入目标检测,通过实验研究者得出两个重要观点:可以使用CNN来对候选框来定位分割物体。当标签数据缺少时,使用辅助任务的监督预训练模型,经过特定任务的训练微调参数,可以获得巨大的性能提升。
R-CNN算法主要分为下面四步:

1)输入训练数据集。
2)首先需要先使用selective search方法得到2000个类别独立的候选框。
3)分别经过卷积神经网络计算特征,抽取一个固定长度的特征向量。
4)将特征图分别放入SVM和全连接层进行分类,回归,最终得到类别概率和具体位置信息[1]。
测试时也要使用selective search生成候选框,将候选框放入卷积神经网络,经过前传得到特征向量。再把这些特征向量放入每一个类所对应的SVM中计算概率。使用NMS非极大抑制算法,对于每一个类别的预测框进行处理,查找出预测概率最大的框,计算其他框与其IOU的值,如果大于阈值,则删除改框,最后会保留下每一个类别的少量框。这些框的预测概率都是类别的极大值。
R-CNN先裁剪候选框再计算特征,有很多重复的计算卷积特征。训练分为多个阶段,步骤繁琐:region proposal,CNN特征提取,SVM分类,边框回归。

2.2 Fast R-CNN

由于RCNN存在诸多缺点,比如训练需要经过多段流水线,时空消耗昂贵,在测试和实际检测时也很缓慢。为了加快训练和测试的速度,Girshick Ross又提出了Fast-RCNN,合理优化了检测过程的步骤,成功减少了训练时间并提升了检测准确率。
Fast R-CNN算法流程:

1)以整张图片为输入利用CNN得到图片的特征图
2)通过selective search 方法从原始图片提取区域候选框,并把这些候选框投影到最后的特征层。
3)把特征向量通过RoI Pooling得到定长的特征向量。
4)再把每一个向量放入全连接层得到两个子输出层,softmax分类器和边界框回归器,分别来预测物体类别和物体位置[2]。
Fast R-CNN结构如图1所示:

Fig1. fast RCNN Architecture 图一、fast RCNN网络结构图

Fast R-CNN由于在边界框选取的过程中仍然使用selective search,训练一张图片,使用selective search获得候选框花费了2.3s,而特征提取花费了0.32s,花费大量时间,无法满足实时应用。
文章还对模型的训练进行改进,使用SVD来加快模型的训练速度,将两层全连接卷积神经网络参数矩阵进行压缩,可以大大减少参数量。在模型mAP方面,模型在VOC2012上的从62%到了66%。

2.3 Faster R-CNN

为了进一步提高目标检测网络的运行和检测速度,Shaoqing Ren, Kaiming He等人提出了Faster R-CNN,具有实时检测的性能。与前两者的不同,faster R-CNN没有使用selective search方法来搜索候选框,而是使用神经网络(RPN)来自动生成候选框。RPN是一个全卷积网络,能够同时预测每个物体的位置边界和分数。RPN是被训练为端到端的网络,产生高质量的候选框。Faster RCNN结构主要分为三个部分,具体结构如图2所示:
1.backbone,基础卷积层,用于提取图片的特征,例如VGG16,ResNet101,去掉最后的全连接层,输出采样后的特征图。
2.RPN:候选框生成网络,输入特征图,输出候选框。
3.RoI pooling和classifier:整合候选框和特征图,并输出长宽相同的特征向量,放入分类器,得到类别输出和位置输出[3]。

在这里插入图片描述

Fig2.faster RCNN Achitecture
图二.faster RCNN网络结构图
在RPN中,利用了滑动窗口的思想,使用3x3的卷积核充当滑动窗口来对特征图进行特征提取,每一个位置生成九个锚框,(3种缩放比*3种长宽比)。总共得到k个锚框,分别通过分类层和回归层得到2k个分数和4k个坐标位置。RPN的结构如图3所示
在这里插入图片描述

Fig3.Region Proposal Network
图三.候选框生成网络
Faster R-CNN在准确率方面也超过了以前的所有网络,在使用RPN,VGG和共享权重的条件下,比之前的SS(selective search)方法在相应的数据集下都高%3左右。Faster R-CNN利用CNN骨干网络只进行一次特征提取,就做到了RPN网络和检测头的权值共享,不仅简化了运算,还真正做到了端到端的训练。

2.4 Mask R-CNN

为了适配其他的计算机视觉任务,比如实例分割,Kaiming He,Georgia Gkioxari等人提出了Mask R-CNN。之前的Faster R-CNN在精度上还有不足,特别是在小图片上的精度。Mask R-CNN在Faster R-CNN的基础上添加了一个预测分割mask的头部结构,并将Rol Pooling换成了RolAlign。提高了检测的精度,同时也有利于实例分割。
为了得到固定大小的ROI坐标,Fast R-CNN使用Rol Pooling,但处理过程中常常会碰到坐标信息是一个浮点数,最后得到的坐标并不能对应到一个确切的整数像素点。而Rol Pooling在处理CNN传入的特征图时,采用简单的取整并由特征图再到ROI坐标时也简单的取整,最造成两次bounding box精度损失,这对于大小较小的图片的边界框会造成很大的偏差。
Rol Align在处理过程中没有简单地取整而是使用双线性插值算法,而是根据bounding box选取CNN传入的对应的特征图,并根据所需要的ROI坐标大小等分,对于每一个ROI部分选取几个采样点,并对每个采样点选取4个离其最近的像素点进行加权求和。并对每一个ROI部分中的点取最大值,最后得到w*h大小的ROI坐标[4]。
在这里插入图片描述

图5.Rol对齐
Fig5.Rol Align
RoI Align如图5所示,虚线表示特征图,外黑线表示边界框,而设定RoI区域大小为22,在每一个区域中选取一些点,并在每个点做双线性插值。得到22的RoI区域。
为了在有效检测目标的同时输出高质量的实例分割mask,Mask R-CNN在获得RoI区域后添加了预测mask的网络。Mask R-CNN设计了两个不同的网络模型,如图6所示。
在这里插入图片描述

图6.头部结构
Fig6.Head Architecture
左图是ResNet,右边是FPN,分别获得14x14x80和28x28x80的mask。Mask R-CNN在实例分割领域的表现高于当时最先进的网络。而使用RoIAlign会比使用RoIPool准确率高7%左右。但是由于使用了RoI Align并添加了新的mask分支,模型的参数量会进一步增加,模型会更加复杂。

2.5模型的对比

上述基于候选框的方法首先需要提取出目标可能存在的区域,然后提取特征进行预测和回归,相关的算法对比如表1所示。
随着卷积神经网络和区域提取方法的发展,两阶段目标检测算法的速度和准确率一直在提高,但还是无法进行实时的识别,另一种方法能完美的实现实时监测,那就是以yolo为代表的单阶段目标识别算法。
表1. 两阶段目标检测算法性能对比
Table1. Performance comparison of two-stage target detection algorithms
| 结构| 骨干网络 |损失函数 |计算速率| mAP/% |优点 |缺点

结构 骨干网络 损失函数 计算速率 VOC2007 mAP/% 优点 缺点
R-CNN AlexNet 边界框回归L2 Loss分类SVM损失函数 0.03 58.5 首次使用CNN来提取图片特征用于目标检测[10] 有很多重复的计算卷积特征。 训练分为多个阶段,步骤繁琐
Fast R-CNN VGG-16 SmoothL1 loss 分类损失softmax 0.5 70.0 对整张图片提取特征训练检测速度更快 仍然使用SS算法选取候选框,耗费大部分时间
Faster R-CNN VGG-16 交叉熵,SmoothL1 loss 7.00 69.9 使用RPN自动生成候选框,实现了端到端训练 模型复杂,小目标效果不好
Mask R-CNN ResNeXt-101 基于单像素sigmod二值交叉熵 11.00 78.2 使用RoI Align提高了检测精度,同时实现检测和分割 实例分割代价太高

三.单阶段目标检测算法

单阶段目标检测算法也需要先通过特征提取,然后直接使用特征来预测物体的类别和位置信息,不需要先生成候选框,因为已经有固定的锚框。此类型的方法以yolo为代表。

3.1 Yolov1

R-CNN系列的算法都不是实时的,检测的速度都是比较慢的,训练的流程也比较复杂,为了解决这些问题,Joseph Redmon等人模拟人眼看一眼就能知道物体类别和位置的特点,提出了YOLO(You Only Look Once),这是一个单阶段的端到端的检测网络,能够实现实时检测,大大减少了训练和测试时间。
yolo模型将目标检测看作一个回归问题,并把每一个物体的边界框和相应的类别分开,一个简单的神经网络就可以直接在一个评估阶段预测出整个图片的物体边界框和类别概率。
在保证高精度的条件下,Yolo实时速度可以达到检测45fps。
Yolo在训练和测试时可以看到整张图片,所以这隐性地编码了上下文信息,这也使得Yolo在检测中比Fast R-CNN的背景检测错误率减少了一半,从13.6%降为4.75%。如图7所示。
在这里插入图片描述

Fig7.Error Analysis Fast R-CNN vs yolo
图7.Fast R-CNN与yolo错误率分析
Yolo做的一大贡献是将检测流程统一起来,整张图放入卷积神经网络获得特征图,将其分为SS个网格,每个网格负责预测B个边界框(x,y,w,h)和置信度©,如果一个物体的中心落入网格块,那这个网格块就要预测。预测的类别为C,最终获得的输出向量大小为SS*(B5+C)[5]。在yolo论文中,作者使用VOC2007数据集进行训练类别数C=20,设置S=7,B=2。所以最后的向量维度为77*(25+20)=1470维。
yolo在网络结构设计方面借鉴了GoogleNet,使用了大量1
1后接3*3卷积的组合,能够实现跨通道的信息整合和交互,能够大幅度的增加网络的非线性特征。
在这里插入图片描述

图8.yolo结构图
Fig8.Yolo Architecture
值得一提的是,由于论文中yolo对处理得到的特征图选取77=49个网格,并且每个网格也最多进行2个物体的检测,所以最多可有492=98个框,相当于候选框只有98个,与之前R-CNN的2000多个候选框差了20倍,所以yolo的检测速度非常快,但精度不太好,尤其是检测小物体的精度不够好,以及检测的召回率不高,这些都与yolo的框不够多,生成框的随机性太大,所以检测不到一些物体。yolo虽然精度方面没有提高,但其在简化目标检测训练流程和加快检测速度方面都有重大的突破。

3.2 Yolov2

针对yolov1暴露出的缺陷:大量的定位错误和较低的召回率,Joseph Redmon, Ali Farhadi提出了yolov2模型,采取了更好的表示方法,让网络更好的学习。Yolov2在VOC 2007数据集中达到了76.8的mAP和67fps。
为了模型正则化,作者引入了批量归一化层,提高了2%mAP。作者采用了高分辨率的分类器,yolov1时采用的输入大小为224224,但是检测网络采用的输入为448448,意味着检测网络训练的过程需要重新学习更大的输入尺寸。Yolov2将分类网络在448*448的输入下进行微调,然后进行检测网络的微调,提高了4%mAP[6]。
Yolov1包含有全连接层直接预测坐标,但是Faster R-CNN使用RPN对锚框预测偏移量和置信度,预测偏移而不是坐标会简化问题并且更易于网络学习。作者移除了全连接层,使用锚框来预测边界框,使用锚框会让精确度稍微下降,但用了它yolo能预测出大于1000个框,同时recall达到88%,mAP达到69.2%[5]。为了优化锚框的尺寸,作者在训练集的真实框中使用k-means聚类,得到了k个位置的锚框,能够自动的找到平均IoU更高的候选框。

3.3Yolov3

Yolov3是Joseph Redmon, Ali Farhadi提出的又一个yolo系列网络,它对之前地yolo网络又做了一系列的设计改变,在准确率方面有很大的提升,也仍然保持快速的特点。
由于同一个锚框可能会有多个目标存在,softmax并不适合多标签分类。Yolov3将损失函数从平方差损失函数改为n_class个二元交叉熵损失函数,能够更好的实现重叠多目标的检测[9]。
Yolo3具有多尺度预测的特点。yolov3使用三种不同尺度来预测锚框,对特征图采用上采样,并和原特征图进行拼接,作者又对组合的特征图进行放入卷积层处理,得到了类似的张量。使用多尺度的特征向量更有益于提高模型检测的精度[8]。

3.4 SSD

与yolov3同一时期,Wei Liu1, Dragomir Anguelov等人提出了SSD(Single Shot MultiBox Detector),这个方法将边界框的输出空间离散化为一组默认框,每个特征图位置具有不同的宽高比和大小比例。
除此之外,网络结合了不同分辨率的特征图能自然地检测到不同大小的物体。SSD是一个相对简单的网络,因为它完全消除了候选框生成,后续像素和特征重采样阶段,并将所有计算封装在一个单一的网络。这使得SSD易于训练并且可以直接嵌入需要检测组件的系统。
在网络模型方面,SSD在使用骨干网络提取到特征图后又在之后添加了不同深度的卷积特征层用于提取不同尺度下的特征图,使得模型能够预测不同尺度下的检测目标。SSD使用的先验框与Faster R-CNN中的锚框相似,但是SSD将先验框用在不同尺度下的特征图,能更有效地抽离出可能地输出边界框地大小形状[7]。SSD网络结构如图9所示。

在这里插入图片描述

图9.SSD网络结构图
Fig9.The SSD Architecture

3.5模型对比

单阶段目标检测算法没有生成候选框的步骤,所以训练和测试速度更快,但是检测的精度都是存在的问题。上述单阶段算法的具体对比如表2所示。
另外,SSD,yolov2,yolov3都提到了多尺度预测的概念,这是有所不同的。SSD对一个特征图用卷积层不断抽取新的特征,并将这些不同尺度的特征叠加在一起,这是一种尺度融合的方式。Yolov2是指输入的图像大小不同,yolov3是不同分辨率的特征图的融合。

表2.单阶段目标检测算法性能对比
Table2.Performance comparison of one-stage target detection algorithms

结构 骨干网络 损失函数 计算速率 VOC2012 mAP /% 优点 缺点
Yolov1 GoogLeNet 坐标,置信度,类别平方和损失之和[9] 45.0 63.4 划分为固定网格,大大减少了训练和测试时间。 检测小物体的精度不够好,以及检测的召回率不高
Yolov2 DarkNet-19 与yolov1相同 67 73.4 引入锚框,提高了检测精度和速度 池化层多,影响梯度计算
Yolov3 Darknet-53 n个二值交叉熵[9] 51.0 多尺度特征预测,准确率方面有很大的提升 模型复杂,中、大尺度物体检测效果差
SSD VGG-16 交叉熵 19.3 78.5 融合多层卷积特征,提升中、大尺度物体检测精度 收敛困难、小物体检测精度提升有限

四.总结和展望

4.1 总结

这两大类方法最明显的不同就是是否使用预生成的候选框。这一流程有利有弊,它能提高模型检测各种尺度物体的精度,但也会大大降低模型检测速度,所以需要有所取舍,但随着目标检测技术的发展,单阶段检测算法也有很高的精度。
由于两阶段算法在速度方面的缺点,由此产生了单阶段算法,直接将目标检测看作回归问题,除此之外,研究人员还提出了多尺度特征融合和难样本挖掘等方法来进一步提高模型性能。
面对不同的场景,我们需要不同的检测算法,这些算法之间也有着千丝万缕的联系,比如原本用于图像分类的CNN也能用于目标检测,Faster R-CNN做进一步改进为Mask R-CNN就可以实现实例分割。算法之间的相互借鉴可以促进相互的发展,更好的验证算法的可行性和有效性。

4.2 展望

目标检测的精度,检测速度一直是受重视的指标,如今目标检测的发展方向还应该有检测流程简单,易于落地使用。在其他领域,目标检测也可以进一步发展。
1)小样本学习。由于目前的数据量非常庞大,而数据标注的成本有很高,所以研究人员需要研究如何仅使用少量样本标签,就能够学习到知识。这能够更好的提高模型的性能。
2)弱监督学习。与小样本学习类似,弱监督学习包括不确切的标签、不完整的标签和不正确的标签都是实际应用场景会碰到的问题。能解决这些问题将会是重大的突破。

参考文献

[1]Girshick, Ross, Jeff Donahue, Trevor Darrell, and Jitendra Malik. “Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation.” ArXiv:1311.2524 [Cs], October 22, 2014. http://arxiv.org/abs/1311.2524.
[2]Girshick, Ross. “Fast R-CNN.” ArXiv:1504.08083 [Cs], September 27, 2015. http://arxiv.org/abs/1504.08083.
[3]Ren, Shaoqing, Kaiming He, Ross Girshick, and Jian Sun. “Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks.” IEEE Transactions on Pattern Analysis and Machine Intelligence 39, no. 6 (June 1, 2017): 1137–49. https://doi.org/10.1109/TPAMI.2016.2577031.
[4]He, Kaiming, Georgia Gkioxari, Piotr Dollár, and Ross Girshick. “Mask R-CNN.” ArXiv:1703.06870 [Cs], January 24, 2018. http://arxiv.org/abs/1703.06870.
[5]Redmon, Joseph, Santosh Divvala, Ross Girshick, and Ali Farhadi. “You Only Look Once: Unified, Real-Time Object Detection.” ArXiv:1506.02640 [Cs], May 9, 2016. http://arxiv.org/abs/1506.02640.
[6]Redmon, Joseph, and Ali Farhadi. “YOLO9000: Better, Faster, Stronger.” ArXiv:1612.08242 [Cs], December 25, 2016. http://arxiv.org/abs/1612.08242.
[7]Liu, Wei, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, and Alexander C. Berg. “SSD: Single Shot MultiBox Detector.” ArXiv:1512.02325 [Cs] 9905 (2016): 21–37. https://doi.org/10.1007/978-3-319-46448-0_2.
[8]知乎专栏. “论文解读Yolo三部曲解读——Yolov3.” Accessed November 4, 2021. https://zhuanlan.zhihu.com/p/76802514.
[9]“[Intensive Reading]目标检测(Object Detection)扩展系列(三) Faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3在损失函数上的区别_zhangxu-CSDN博客.” Accessed November 4, 2021. https://blog.csdn.net/chaipp0607/article/details/102094625.
[10]“RCNN,Fast RCNN,Faster RCNN比较归纳总结(一)rcnn和cnn区别.” Accessed November 4, 2021. https://blog.csdn.net/xiaoye5606/article/details/71191429.
[11]赵梓杉,秦玉英,李刚,衣明悦.基于深度学习的目标检测算法综述[J].汽车实用技术,2021,46(17):207-209.

版权声明:本文为CSDN博主「rua1234567」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rua1234567/article/details/121303422

rua1234567

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

YOLO-V3-SPP详细解析

YOLO-V3-SPP 继前两篇简单的YOLO博文 YOLO-V1 论文理解《You Only Look Once: Unified, Real-Time Object Detection》YOLO-V2论文理解《YOLO9000: Bet

目标检测部署(卡牌识别)

最近在折腾yolov5,训练了一个识别纸牌的模型,最后使用onnxruntime进行部署,感兴趣的可以上github上clone下来玩玩,模型的权重文件上传到了百度网盘,链接

Yolo(3)(项目)Yolo v3 目标检测(85分类)

目录 基础理论 一、 读取文件 二、神经网络初始化 1、搭建神经网络 2、GPU加速 三、打开摄像头、按帧读取图像 四、向神经网络输入 五、获取神经网络输出 1、获取各层名称 2、获取输出层名称 3、获取输出层图像&#xff

基于YOLOv5的垃圾目标检测

使用yolov5实现垃圾目标检测(有图形化界面,webapp)。 计算机视觉爱好者,有自己的算力(8块2080Ti),熟练运用pytorch深度学习框架&#x