目标检测是计算机视觉领域中的研究热点. 近年来, 目标检测的深度学习算法有突飞猛进的发展. 基于深度学习的目标检测算法大致可分为基于候选区域和基于回归两大类. 基于候选区域的目标检测算法精度高, 但是结构复杂, 检测速度较慢. 而基于回归的目标检测算法结构简单、检测速度快, 在实时目标检测领域有较高的应用价值, 然而检测精度相对略低. 本文总结了基于深度学习的目标检测主流算法, 并分析了相关算法的优缺点和应用场景. 最后根据深度学习的目标检测算法中存在的困难和挑战, 对未来的发展趋势做了思考和展望.
Object detection is a research hotspot in the field of computer vision. In recent years, the deep learning algorithms contributing to object detection has developed by leaps and bounds. Objection detection algorithms based on deep learning can be roughly divided into two categories depending on candidate regions and regression, respectively. The object detection algorithms based on candidate regions have high accuracy, but complex structure and low speed of detection. The object detection algorithms based on regression, contrarily, have simple structure, high speed of detection, and thus more applications in the field of real-time object detection, but its detection is with low accuracy. This paper summarizes the mainstream algorithms of object detection based on deep learning and analyzes the advantages and disadvantages of different algorithms and their applications. Finally, this paper predicts the prospects of deep learning-based object detection algorithms according to the existing challenges.
目标检测是一种与计算机视觉和图像处理有关的计算机技术, 用于检测数字图像和视频中特定类别的语义对象(例如人、建筑物或汽车等), 其在视频安防, 自动驾驶, 交通监控, 无人机场景分析和机器人视觉等领域有广阔的应用前景[
本文将对基于深度学习的主流目标检测算法进行总结和比较. 第2节对卷积神经网络的发展做简要概述; 第3节对主流卷积神经网络进行分析和比较, 总结算法性能以及优缺点; 第4、5节分别对基于候选区域和基于回归的目标检测算法深入分析, 包括网络结构以及创新和改进; 第6节对典型的目标检测算法进行比较和总结; 第7节对目标检测算法的未来研究方向进行了思考和展望.
深度学习模型可以看作是为具有深度结构的神经网络. 神经网络的历史可以追溯到1940年代[
(1) 大规模的带注释的训练数据的出现, 以充分展现其非常大的学习能力.
(2) 快速开发高性能并行计算系统, 例如GPU集群.
(3) 网络结构和训练策略设计方面的重大进步. 在自动编码器的指导下进行无监督的预训练, 可以提供良好的初始化. 随着dropout技术和数据扩充, 训练中的过度拟合问题得到缓解. 使用批量归一化后, 深层次的神经网络的训练变得简单有效. 同时, 为了提高神经网络的泛化性能, 提出各种不同结构的神经网络. 例如AlexNet[
卷积神经网络CNN是深度学习的最具代表性的模型[
与传统方法相比, CNN的优势可总结如下:
(1) 通过分层多级结构[
(2) 与传统的浅层模型相比, 更深的网络结构成倍的增加了表达能力.
(3) CNN的架构为共同优化几个相关任务提供了可能(例如, Fast R-CNN将分类和边界框回归结合为一种多任务学习方式)
手写字体识别模型LeNet[
目标检测算法发展史
LeNet网络结构除去输入和输出层后, 它有6层网络组成, 其中包括3个卷积层(C), 2个下采样层(S)和1个全连接层(F). 其中卷积层采用5×5的卷积核, 而下采样层分别采用的平均值池化(S2)和最大值池(S4).
LeNet特点如下: (1)使用卷积来提取特征, 组成基本的结构单元: 卷积-池化-非线性激活; (2)加入非线性激活, 采用tanh和Sigmoid; (3)池化层使用平均值池化; (4)分类器使用高斯分类.
2012年Krizhevsky等[
不同目标检测算法性能对比
类型 | 名称 | 骨干网络 | AP | AP50 | AP75 | APS | APM | APL |
Two-stage methods | Fast R-CNN[ |
VGG-16 | 19.7 | 35.9 | — | — | — | — |
Faster R-CNN[ |
ResNet-101-C4 | 34.9 | 55.7 | 37.4 | 15.6 | 38.7 | 50.9 | |
Mask R-CNN[ |
ResNet-101-FPN | 38.2 | 60.3 | 41.7 | 20.1 | 41.1 | 50.2 | |
Cascade R-CNN[ |
ResNet-101-FPN | 42.8 | 67.3 | 51.1 | 29.3 | 48.8 | 57.1 | |
TridentNet[ |
ResNet-101-Deformable | |||||||
One-stage methods | YOLOv2[ |
DarkNet-19 | 21.6 | 44.0 | 19.2 | 5.0 | 22.4 | 35.5 |
SSD513[ |
ResNet-101-SSD | 31.2 | 50.4 | 33.3 | 10.2 | 34.5 | 49.8 | |
YOLOv3[ |
DarkNet-53 | 33.0 | 57.9 | 34.4 | 18.3 | 35.4 | 41.9 | |
RetinaNet[ |
ResNet-101-FPN | 39.1 | 59.1 | 42.3 | 21.8 | 42.7 | 50.2 | |
CornerNet[ |
Hourglass-104 | 42.1 | 57.8 | 45.3 | 20.8 | 44.8 | 56.7 | |
CenterNet[ |
Hourglass-104 |
AlexNet网络结构图
AlexNet将CNN的基本原理应用到了更深的网络中. 主要应用的新技术如下:
(1) 使用ReLU作为CNN的激活函数, 成功解决了Sigmoid在网络较深时的梯度弥散问题.
(2) 训练时使用dropout随机忽略一部分神经元, 以避免模型过拟合.
(3) 池化层使用重叠的最大池化, 避免平均池化的模糊化效果.
(4) 提出LRN层, 对局部神经元的活动创建竞争机制, 使得其中响应比较大的值变得相对更大, 并抑制其他反馈较小的神经元, 增强了模型的泛化能力.
(5) 使用CUDA加速深度卷积网络的训练, 利用GPU强大的并行计算能力, 处理神经网络训练时大量的矩阵运算.
(6) 数据增强. 随机对图片进行镜像, 旋转, 随机噪声等数据增强操作, 大大降低过拟合现象.
VGGNet[
(1) 结构非常简洁, 整个网络都使用了同样大小的卷积核尺寸(3×3)和最大池化尺寸(2×2).
(2) 验证了几个小滤波器(3×3)卷积层组合比一个大滤波器(5×5或7×7)卷积层好. 减少了参数同时得到更多非线性映射, 增加网络表达能力.
(3) 验证了深层次的网络可以获得高级语义特征, 通过不断加深网络结构可以提升网络性能.
VGGNet网络结构图
GoogLeNet[
Inception网络结构图
GoogleNet特点:
(1) 采用1×1卷积核, 性价比高, 用很少的计算量就可以增加一层的特征变换和非线性变换;
(2) 提出batch normalization, 把每层神经元的输入值分布回归到均值0方差1的正太分布, 使其落入激活函数的敏感区, 避免梯度消失, 加快收敛;
(3) 引入Inception模块, 4个分支结合的结构, 每个分支采用1×1的卷积核;
(4) 去除了最后的全连接层, 大大减少计算量.
越深的网络有越高等级特征, 拥有强大表达能力. 然而神经网络随着层数的增加, 网络退化严重, 即深层次的网络反而不如稍浅层次的网络性能, 这并非是过拟合导致的. 何凯明等提出的ResNet[
ResNet特点:
(1) 通过残差模块将网络深度进一步提高, 解决了不断深化神经网络而使准确率饱和的问题. 通过活用1×1卷积降低了特征图维度, 控制了参数数量.
(2) 存在明显层级, 特征图个数层层递进, 保证输出特征的表达能力.
(3) 使用较少池化层, 大量采用下采样, 提高传播效率.
残差网络结构图
DenseNet[
DenseNet网络结构主要结构分稠密块(Dense blocks)和过渡层(transition layers). 稠密块结构能够互相连接所有的层, 具体就是每个层都会接受其前面所有层作为其额外的输入. 对于一个L层的网络, DesNet共包含
DenseNet的优势主要体现在以下几个方面:
(1) 由于密集连接方式, DenseNet提升了梯度的反向传播, 使得网络更容易训练. 由于每层可以直达最后的误差信号, 实现了隐式的深度监督;
(2) 参数更小且计算更高效, 由于DenseNet是通过拼接特征来实现短路连接, 实现特征重用;
(3) 由于特征复用, 最后的分类器使用了低级特征.
基于候选区域的目标检测算法, 即two-stage目标检测算法, 该方法先提取到目标的候选区域, 然后再由神经网络做分类和回归. 本节将就two-stage目标检测主流算法做简要介绍.
Girshck等针对卷积神经网络如何实现目标定位的问题, 提出了将于Region proposal和CNN结合的算法R-CNN[
R-CNN网络结构示意图
R-CNN缺点:
(1) 输入的图像大小会进行缩放, 导致图像失真;
(2) 用选择性搜索算法提取约2000个候选区域, 每个候选区域都要送入卷积神经网络提取特征, 计算量大耗时多;
(3) 训练测试复杂, 候选区域提取、特征获、分类和回归都是单独运行, 中间数据也是单独保存卷积提取的特征需单独存储, 占用大量硬盘空间.
2014年He等针对R-CNN的缺陷进行了改进, 开发出了SPP-Net (Spatial Pyramid Pooling Network)[
SPP-Net缺点:
(1)与R-CNN设计相同, 训练各个阶段都是单独运行, 且中间数据必须保存.
(2)训练数据的图像尺寸大小不一致, 使候选框感受野过大, 不可以使用反向传播有效的更新权重.
(3)网络微调只更新了全连接层, 不能实现端到端的检测且检测精度还需进一步提升.
借鉴空间金字塔池化层的思路, Ross等2015年提出Fast R-CNN[
虽然Fast R-CNN实现了多任务端到端的训练, 然而通过选择性搜索算法提取候选区域耗费了较多时间, 训练和预测所需时间仍较长, 不能实现实时性检测.
Ren等在Fast R-CNN的基础上提出Faster R-CNN[
Faster R-CNN整个流程如
Fast R-CNN网络流程图
Faster R-CNN网络流程图
Faster R-CNN虽然大幅提高了算法精度和速度, 但仍存在一些缺点: (1)获取候选区域, 再对每个候选区域分类计算量还是比较大; (2)虽然速度有了提高, 但还是没达到实时性检测的要求.
2017年He等在Faster R-CNN的基础上再次改进, 提出了Mask R-CNN[
Mask R-CNN网络流程图
Mask R-CNN网络的优点在于: 它在Faster R-CNN网络的基础上增加了目标掩码作为输出量, 掩码是将一个对象的空间布局进行编码, 从而使得对目标的空间布局提取更精细. 其缺点在于: 分割分支增加了计算量, 导致Mask R-CNN比Faster R-CNN检测速度慢一些.
R-CNN系列算法在检测目标时均存在IoU阈值选取问题, 阈值选取越高就越容易得到高质量的样本, 但一味选取高阈值会引发两个问题: (1) 样本减少引发的过拟合; (2) 在推理阶段出现检测器最优的阈值与输入候选的IOU值发生不匹配. 因此, 单一检测器很难抉择一个合适的IOU, 无论高低都是有很大弊端.
针对此类问题Cai等[
Cascade R-CNN算法核心由一系列的检测模型组成, 每个检测模型都基于不同IoU阈值的正负样本训练得到, 通过重采样改变了不同阶段的输入假设分布, 并且保证了每个阶段有足够固定数量的正例样本数. 通过调整阈值的方式重采样, 不断改变候选框的分布, 在保证样本数不减少的情况下训练出高质量的检测器, 从而不会出现过拟合, 且在更深层的训练阶段可以得到更高的IoU阈值.
目标检测算法对图像多尺度特征的提取主要是采用骨干网络, 影响骨干网络进行多尺度特征提取的因素有: 网络下采样率、网络深度和感受野. R-CNN系列算法中大部分学者研究了下采样率和网络深度对算法精度的影响, 而对于目标检测中感受野的影响很少有人研究. Li等[
TridentNet算法针对多尺度特征提取做了以下两点创新:
(1) 多分支结构, 在最后一层增加了多分支卷积层, 用来提取不同尺度目标的特征图;
(2) 不同分支之间结构相同, 权重共享, 唯一的不同在于不同分支所对应的感受野不一样(使用空洞卷积来实现).
上述的设置既能够保证为不同尺寸目标提取出特征, 同时还能促进不同尺寸目标生成相似特征, 即结构相同, 权重共享. 文献[
从R-CNN、SPP Net、Fast R-CNN、Faster R-CNN、Mask R-CNN、Cascade R-CNN和TridentNet算法网络逐步优化, 每个算法均解决一部分难题, 具体来说:
(1) RCNN解决了使用CNN进行目标定位问题;
(2) Fast R-CNN解决了目标定位和分类同步问题;
(3) Faster R-CNN解决了选择性搜索目标问题;
(4) Mask R-CNN解决了同时进行目标定位、分类和分割问题;
(5) Cascade R-CNN解决了IoU阈值选取问题;
(6) TridentNet解决了从感受野提取图像特征问题.
2015年Redmon等提出了基于回归的目标检测算法YOLO (You Only Look Once)[
YOLO的网络结构示意图如
YOLO网络结构图
YOLO优点:
(1) 将目标检测问题转化为一个回归问题求解. 结构非常简单, 直接使用一个卷积神经网络实现同时预测边界框的位置和类别;
(2) 速度非常快, 可以实现视频的实时检测;
(3) 泛化能力强, 能学习到高度泛化的特征, 可以迁移到其他领域.
Redmon等对YOLO网络结构做修改提出了YOLOv2方法[
YOLOv3[
YOLOv3改进之处:
(1) 多尺度预测, 借鉴FPN, 采用多尺度来对不同大小的目标进行检测.
(2) 更好的分类网络, 从DarkNet-19到DarkNet-53.
(3) 采用Logistic对目标进行分类, 替换之前用Softmax的分类方法, 且Softmax可被独立的多个Logistic分类器替代, 准确率不会下降.
Liu等提出的SSD (Single Shot multibox Detector)方法[
(1) 采用多尺度特征图用于检测. SSD使用VGG16作为主干网络, 并在VGG16的基础上添加了新的卷积层以获得不同大小的特征图, 较大的特征图用来检测小目标, 较小的特征图用来检测大目标.
(2) 采用卷积进行检测. YOLO最后采用全连接, 而SSD直接采用卷积对不同的特征图进行提取特征. 对于形状为
(3) 设置先验框. YOLO中每个单元预测多个边界框, 但是都是相对于这个单元本身, YOLO需要在训练过程中自适应目标的形状. SSD借鉴了Faster-RCNN的anchor理念, 每个单元设置尺度或者长宽比不同的先验框, 减小了训练的难度, 对重叠或近邻的物体有更好的预测效果.
SSD网络结构图
SSD算法检测速度较快, 整个过程只需要一步. 首先在图片不同位置按照不同尺度和宽高比进行密集抽样, 然后利用CNN提取特征后直接进行分类与回归, 速度较快, 但均匀密集采样会造成正负样本不均衡使得训练比较困难, 导致模型准确度有所降低. SSD对小目标的检测没有大目标好, 因为随着网络的加深, 在高层特征图中小目标的信息丢失掉, 适当增大输入图片的尺寸可以提升小目标的检测效果.
为了提高SSD对小目标的检测能力, Fu等提出了DSSD (De-convolutional Single Shot Detector)方法[
Lin等[
文献[
目前大部分常用目标检测算法(比如RCNN系列, SSD, YOLO系列等)都是基于锚框(即anchor boxes)进行目标检测, 引入锚框的缺点在于: (1) 正负样本不均衡. 大部分检测算法的锚框数量成千上万, 而目标数量相对少很多, 导致正样本数量会远远小于负样本. (2) 引入更多的超参数, 比如anchor的数量、大小和宽高比等. Law等[
CornerNet算法架构包含3部分: 环面网络、右下角和左上角的热图、预测模块, 如
RetinaNet网络结构图
CornerNet网络结构图
(1) 环面网络(即Hourglass网络)是人体姿态估计的典型架构, 堆叠两个环面网络生成两组热力特征图来预测不同分类下的角点, 其中一组负责预测左上角点, 另一组负责预测右下角点, 每一个角都包括角合并、对应的热图、嵌入式向量和偏移;
(2) 环面网络同时包含多个从下往上(从高分辨率到低分辨率)和从上往下(从低分辨率到高分辨率)过程, 目的是在各个尺度下抓取信息;
(3) 嵌入式向量使相同目标的两个顶点(左上角和右下角)距离最短, 偏移用于调整生成更加紧密的边界定位框.
CornerNet算法消除了现有one stage检测算法中对锚框的需要, 整个检测网络的训练从头开始并不基于预训练的分类模型, 用户能够自由设计特征提取网络, 不用受预训练模型的限制. 同时该算法提出了一种新的池化方法(即corner pooling), 能够帮助网络更好地定位边界框的角点, 提高算法的检测精度.
CornerNet算法在生成边界框的时候在生成边界框的时候受限于检测的角点对, 即如果生成角点对的质量够高, 则对应的边界框的质量也高; 反之, 则会产生错误的边界框.
在生成边界框是不能仅依靠角点对的信息, 还需要角点对生成的区域内部信息. Duan等[
(1) 级联角点池化: 针对角点对的预测, 级联角点池化首先提取物体边界最大值(corner pooling), 然后在边界最大值处继续向内部提取最大值, 并与边界最大.
(2) 值相加, 以结合更多内部信息, 使其具有感知内部信息的能力.
(3) 中心池化: 针对中心点的预测, 中心池化提取中心点水平方向和垂直方向的最大值并相加, 以此给中心点提供所处位置以外的信息, 将有助于中心关键点获取目标的更多信息、感知边界框的中心区域.
CornerNet算法引入了目标内的信息, 同时通过级联角点池化和中心池化两种策略来改善了各关键点的生成, 利用生成边界框内部的信息来筛选出高质量的边界框, 从而显著提升检测效果.
目前基于深度学习的目标检测算法受到了学者的广泛关注和深入研究, 主要分为两大类算法: 基于候选区域的two-stage算法和基于回归的one-stage算法. 通过国内外学者的广泛研究两类算法衍生出了不同神经网络机制和特性, 不同算法之间的优缺点和适用场景均不同,
不同目标检测算法优缺点总结
类型 | 算法 | 优点 | 缺点 | 应用场景 |
Two-stage | Faster R-CNN | (1) RPN提取候选区域
|
(1) 无法达到实时检测
|
检测实时性要求不高的场景:
|
Mask R-CNN | (1) 引入实例分割分支
|
(1) 无法达到实时检测
|
||
Cascade R-CNN | (1) 使用级联检测器优选IoU阈值
|
无法达到实时检测 | ||
TridentNet | (1) 使用不同感受野多分支结构提取不同尺度目标特征
|
无法达到实时检测 | ||
One-stage | YOLOv3 | (1) 多尺度特征图提取
|
小目标/多目标检测精度差 | 检测实时性要求较高的应用场景:
|
SSD | (1) 多尺度特征图提取
|
(1) 小目标/多目标检测精度差
|
||
RetinaNet | (1) 采用Focal loss损失函数
|
小目标/多目标检测精度差 | ||
CornerNet | (1) 关键点检测算法, 无锚框
|
(1) 小目标/多目标检测精度差
|
||
CenterNet | (1) 关键点检测算法, 无锚框
|
小目标/多目标检测精度较差 |
Two-stage目标检测算法由于事先获取候选区域, 能够充分学习到目标的特征, 其检测精度和定位精度高, 但是网络结构复杂, 计算量大, 检测速度较慢, 不适用于实时性要求较高的应用场景. One-stage目标检测算法结构简单, 可直接对输入图像进行处理, 检测精度较高并且检测速度快, 可以实现实时性检测, 能满足一些实时在线检测应用场景, 如表面缺陷实时检测, 火灾实时检测, 高空作业实时检测等, 但是one-stage算法对小目标、多目标物体检测精度较低, 特别是在复杂场景下, 检测精度并不能满足要求, 如自动驾驶领域的目标检测. 目前TridentNet和CenterNet分别为two-stage和one-stage目标检测系列算法中检测精度相对较高的算法, 但它们对小目标检测的精度仍比较低, 对于目标尺度跨度非常大的应用场景仍不满足要求, 因此, 目前的绝大多数目标检测算法均只能应用于场景相对较简单却目标尺度跨度不大的应用场景.
本文对基于深度学习的主流目标检测算法做了简要综述, 主要包括典型算法的思路、创新策略、检测精度和应用场景等方面. 虽然在过去的20年中物体目标检测取得了显著的成就, 仍然存在许多难以解决的问题[
(1)小目标检测. 目前算法对于小目标的检测能力相对较弱, 但无人机航拍、卫星遥测、红外目标识别等领域对小目标检测有较强的需求. 小目标图像往往面临着分辨率低、像素少和训练数据难以标记的问题. 例如在无人机高清航拍过程中, 即使照片分辨率已经达到4k级别, 但由于小目标所占面积较小, 导致难以标定和训练.
(2)弱监督目标检测方法. 目前绝大多数目标检测算法的精度均依赖大量标注完整的图像数据集, 在大型数据集中标注工作量大, 标注时间长, 对于算法模型训练时间也长, 因此目前目标检测算法的实施成本较高, 难度相对较大. 弱监督目标检测方法是利用少量完整标注的图像自动检测大量未完整标注的图像, 这将大大降低目标检测模型的开发难度和周期, 因此开发弱监督目标检测方法是一个值得进一步研究的重要问题.
(3)多领域目标检测: 目前算法基本只针对特定场景特定目标物进行检测, 特定领域的检测器只能够在指定数据集上实现较高的检测性能, 特定领域的检测器应用场景单一, 不具备多领域多场景通用性. 为了得到一种适用于各种图像检测领域的通用检测器, 多领域目标检测器可以在不存在新领域先验知识的情况下解决这一问题, 但检测领域转移是一个具有挑战性的课题, 有待进一步研究.
(4)多任务学习: 多层次特征的聚合骨干网络是提高检测性能的重要方法. 当同时进行多个计算机视觉任务, 如目标检测、语义分割、实例分割、边缘检测、突出点检测等, 可以获得更丰富的信息, 大大提高单独任务的性能. 多任务学习是一种将多个任务聚合到一个网络中的学习方法, 其在保持处理速度和提高准确率同时, 对研究者提出了很大的挑战.
Jiao LC, Zhang F, Liu F, et al. A survey of deep learning-based object detection. IEEE Access, 2019, 7: 128837–128868.
Rumelhart DE, Hinton GE, Williams RJ. Learning representations by back-propagating errors. Nature, 1986, 323(6088): 533–536.
Hinton G, Deng L, Yu D, et al. Deep neural networks for acoustic modeling in speech recognition: The shared views of four research groups. IEEE Signal Processing Magazine, 2012, 29(6): 82–97.
Hinton GE, Salakhutdinov RR. Reducing the dimensionality of data with neural networks. Science, 2006, 313(5786): 504–507.
Krizhevsky A, Sutskever I, Hinton GE. ImageNet classification with deep convolutional neural networks. Communications of the ACM, 2017, 60(6): 84–90.
LeCun Y, Bengio Y, Hinton G. Deep learning. Nature, 2015, 521(7553): 436–444.
Ren SQ, He KM, Girshick R, et al. Faster R-CNN: Towards real-time object detection with region proposal networks. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2017, 39(6): 1137–1149.
Lin TY, Goyal P, Girshick R, et al. Focal loss for dense object detection. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2020, 42(2): 318–327.
Law H, Deng J. CornerNet: Detecting objects as paired Keypoints. International Journal of Computer Vision, 2020, 128(3): 642–656.
LeCun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition. Proceedings of the IEEE, 1998. 86(11): 2278–2324.
He KM, Zhang XY, Ren SQ, et al. Spatial pyramid pooling in deep convolutional networks for visual recognition. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2015, 37(9): 1904–1916.
Wu XW, Sahoo D, Hoi SCH. Recent advances in deep learning for object detection. Neurocomputing, 2020, 396: 39–64.