目标检测算法(传统&基于深度学习的)

目标检测算法

最近在学目标检测各类算法,主要分为传统的目标检测方法和基于深度学习的目标检测算法,这里记录了一些基本的算法介绍。下图是目标检测算法的发展历程
目标检测算法(传统&基于深度学习的)_第1张图片

传统目标检测方法

分三部分:区域选择–>特征提取–>分类器

① VJ(Viola-Jones)

Viola-Jones人脸检测算法可以说是非常经典的一个算法,所有从事人脸检测研究的人,都会熟悉了解这个算法,Viola-Jones算法在2001年的CVPR上提出,因为其高效而快速的检测即使到现在也依然被广泛使用。在无约束条件(如肤色分割)的情况下首次实现了人脸的实时监测。

这个算法包含以下几个重要的部分:
1 利用Haar 特征描述人脸的共有属性;
Haar特征:是一种反映图像的灰度变化的,像素分模块求差值的一种特征。
2 建立了一种称为积分图像的特征,并且基于积分图像,可以快速获取几种不同的矩形特征;
3 利用Adaboost 算法进行训练;
4 建立层级分类器。

采用:滑动窗口检测,查看图像中所有可能的位置和比例,判断是否有窗口包含人脸

② HOG+SVM

HOG核心思想:检测局部物体的梯度和边缘方向信息得到被检测物体的局部特征,HOG能较好的捕捉到局部形状信息,对几何以及光学的变化有很好的不变性。

流程:输入图像–>提取HOG特征–>训练SVM分类器–>滑动窗口提取目标区域进行分类判断–>提取HOG特征–>输出结果

③ DPM(Deformable Part-based Model)是经典算法发展巅峰。

VOC07、08、09三年的检测冠军。DPM遵循“分而治之”的检测思想,训练简单的看作是学习一种正确的分解对象的方法,推理可看作是对不同对象部件的检测的集合。检测“汽车” 的问题可以看作是检测他的窗口、车身和车轮等部件的问题,检测行人问题可以类似的被分解为对人头、四肢、躯干等部件的检测问题。

流程:计算DPM特征图–>计算响应图–>使用SVM对响应图进行分类–>对最后的选框做局部检测识别。

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

One-stage(YOLO和SSD系列)

不需要region proposal阶段,直接产生物体的类别概率和位置坐标值,经过单次检测即可直接得到最终的检测结果,因此有着更快的检测速度,多数可以达到实时性的要求。单阶段的目标检测网络在精度上普遍略低于上阶段的目标检测算法。

YOLO–>SSD–>YOLO v2–>YOLO v3–>RetinaNet–>CornerNet–>YOLOv4

① YOLO(2015年提出)第一个一体化的卷积网络检测算法

YOLO在检测速度上有着极大的优势,彻底解决了基于深度学习的目标检测网络在速度上的痛点。算法在GPU上速度可以达到45帧/s,快速版本可以达到155帧/s。

检测流程:

  • 给定一个输入图像,首先将图像分割成7*7的网格

  • 每一个网格,负责预测2个边框(边框的位置(x,y,w,h),目标置信度和多个类别上的概率)

  • 根据上一步的预测可以预测772个目标窗口,依据阈值去除执行度比较低的目标窗口,最后用NMS去除冗余窗口。

    优点:

  • 速度快:将目标检测任务直接作为一个回归问题,极大的加快了检测的速度。

  • 充分利用全局信息:网络在预测每一个目标窗口的时候使用的是全局信息,可以更加充分的理解每个图像的上下文关系。

  • 学到物体的泛化特征:当YOLO在自然图像上做训练,YOLO表现的性能比DPM、RCNN等之前的物体检测系统要好很多。因为YOLO可以学习到高度泛化的特征,从而迁移到其他领域。

    缺点:

  • 精度低:图像在7*7的粗糙网格离回归,定位不是很精准,导致检测的精度较低。

  • 输出尺寸固定:输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率,其他分辨率需要缩放成此固定分辨率。

  • 占比较小和重要的目标检测效果不好:虽然每个格子可以预测B个bounding box,但是最终只选择IOU最高的bounding box做为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,或图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。

② SSD(2015年提出)

该算法吸收了YOLO速度快和RPN定位准确的优点,采用了RPN的多参考窗口技术,并在多个分辨率的特征图上进行检测。SSD早在VOC07上取得了接近Faster RCNN的准确率,达到mAP=72%,同时还保持了很好的检测速度(58帧/s)

SSD整个网络采取了one stage的思想,以此提高检测速度,并且网络中融入了Faster RCNN中的anchors思想,并且做了特征分层提取并依次计算边框回归和分类操作,由此可以适应多种尺度目标的训练和检测任务。

算法步骤:
1)输入一张图片,将其输入到预训练好的分类网络中来获得不同大小的特征映射;
2)抽取conv4_3,conv7,conv8_2,conv9_2,conv10_2,conv11_2层的feature map,然后分别在这些feature map层上面的每一个点构造6个不同尺度大小的bbox,然后分布进行检测和分类,生成多个bbox;
3)将不同feature map获得的bbox结合起来,经过NMS(非极大值抑制)方法来抑制掉一部分重叠或者不正确的bbox,生成最终的bbox集合(即检测结果)

③ YOLO v2(主要是在YOLO上改进)

1)batch normalization:对所有的conv层采用BN能够让网络更好的收敛,同时可以替代掉一些其他形式的regularization,而且可以去掉防止overfitting的dropout层而不会出现过拟合。
2)High resolution classifier:YOLO从224224增加到了448448
3)Convolutional with anchor boxes:预测偏移(offsets)而不是直接预测坐标(coordinates)能够简化问题,让网络更加容易学习,所以去除全连接层,利用anchor boxes预测bounding box
4)Direct location prediction:约束位置预测,相对于网络左上角点的位置偏移
5)Fine-grained feature:跨层连接,增加了一个passthrough layer将一个earlier layer at 2626 resolution连接到最末端的1313的feature map上。最终提高1%性能。

④ YOLO v3

主要工作:对YOLO v2进行了更细微的设计调整,并且重新设计了一个结果稍微复杂一点的新网络,在保证速度的前提下提高了精度。

改进点:

1)更好的主干网络:Darknet19->Darknet53保持元效率的基础上,速度再提升。
2)更好的多尺度。
3)提出两次上采样,可以更好的检测小目标。
4)采用9个anchor boxes,使得小目标和多物体得到了更好的解决。
5)不再用softmax,而是采用一个二次交叉熵,这样可以更好的应对再一个小区域中有重叠时的问题。YOLOv3不使用softmax对每个框进行分类,主要考虑因素有:
(1)softmax可被独立的多个logistic分类器替代,且准确率不会下降;
(2)softmax使得每个框分配一个类别(得分最高的一个),而对于open Image这种数据集,目标可能有重叠的类别标签,因此softmax不适用于多标签分类。
(3)分类损失采用binary cross-entropy loss
6)没有pooling层,而是使用了卷积为2的卷积层。

⑤ RetinaNet(2017)

针对基于一体化的卷积网络在检测模型时检测速度都明显快于基于object proposal的检测算法,但是其精度却一直略逊于后者。2017年提出“聚焦损失函数(Focal Loss)”,通过降低网络训练中简单背景样本的学习权重,可以使得网络对样本的“聚焦”和对学习能力的重新分配时one stage的检测网络在精度上有了很大的改善。

⑥ CornerNet:对角点(目标的左上角点和右下角点)来定位和分类目标,引领了基于anchor free的keypoint based浪潮

Anchor box两个缺点:需要一组非常大的anchor boxes;anchor boxes的使用引入了许多超参数和设计选择。
CornerNet方法:将物体边界框检测为一对关键点(即边界框的左上角和右下角)。卷积网络通过预测两组热图来表示不同物体类别的角的位置,一组用于左上角,另一组用于右下角。网络还预测每个检测到的角的嵌入向量,使得来自统一目标的两个角的嵌入之间的距离很小。为了产生更紧密的边界框,网络还预测偏移以稍微调整角的位置。通过预测的热图,嵌入和偏移,最后应用一个简单的后处理算法来获得最终的边界框。

Two-stage(Faster RCNN系列)

产生候选区域 CNN特征—>区域分类 位置精修

基于Object Proposals的检测算法,通过一个卷积神经网络来完成目标检测过程,其提取的是CNN卷积特征,在训练网络时,其主要训练两个部分,第一步时训练RPN网络,第二部是训练目标区域检测的网络。

**特点:**网络的准确度高,速度相对One-Stage慢

RCNN–>SPP-Net–>Fast RCNN–>Faster RCNN–>Mask RCNN

① RCNN(CVPR2014)

突破了传统的目标检测算法的思想,为深度需学习在目标检测领域的首次成功突破,将目标检测网络带入了深度需学习的高速发展时期。RCNN在VOC07的数据集上取得了惊艳的效果,mAP由33.7%提升至58.5%。

**缺点:**训练时多阶段的,比较繁琐和耗时:在高密度候选区域反复的进行特征提取

RCNN使用SS提取候选窗口,采用对区域进行识别的方案:
1、输入图片,从图片中提取2K个类别独立的候选区域(Object Proposal)
2、对每个候选区域利用卷积神经网络(AlexNet)获取特征向量
3、利用SVM进行分类,并通过一个bounding box regression调整包围框的大小。

② SPP-Net

RCNN由于网络中全连接层的存在,只能接受固定大小的图像输入,所以所有的输入图像都会被resize到固定的大小,导致一些目标造成集合畸变。

SPPNet(2014):用来解决CNN网络提取特征时输入图像尺寸固定的问题。在卷积层和全连接层之间添加空间金字塔池化层(SPP),在不损失精度的前提下,ROI特征直接从特征图获取,将RCNN的检测速度提升了38倍,有效解决了区域计算冗余的问题。

缺点:CNN中的卷积层在微调时时不能继续训练的。它仍然时RCNN的框架,离我们需要的端到端的检测还差很多。

③ Fast RCNN(2015)结合RCNN和SPPNet的优点

创新点:

1)将最后一个卷积层的SPP Layer改为ROI Pooling Layer;
2)多任务损失函数:候选区域分类损失和位置回归损失
3)实现了网络微调的同时,对目标分类和包围框回归的同步训练。

训练速度是RCNN的9倍,检测速度是RCNN的200倍。在VOC2007数据集上,Fast RCNN将mAP由RCNN的58.5%提升至70%。

流程:

1)输入一张待检测的图像;
2)提取候选区域:利用SS算法在输入图像中提取出候选区域,并把这些候选区域按照空间位置关系映射到最后的卷积特征层;
3)区域归一化:对于卷积特征层上的每个候选区域进行ROI Pooling操作,得到固定维度的特征;
4)分类与回归:将提取到的特征输入全连接层,然后用softmax进行分类,对候选区域的位置进行回归。

④ Faster RCNN

Faster rcnn是何凯明等大神在2015年提出目标检测算法,该算法在2015年的ILSVRV和COCO竞赛中获得多项第一。该算法在fast rcnn基础上提出了RPN候选框生成算法,使得目标检测速度大大提高。

⑤ Mask RCNN

是一个实例分割算法,可完成多种任务,包括目标分类、目标检测、语义分割、实例分割、人体姿态识别等、具有很好的扩展性和易用性。

目标检测算法(传统&基于深度学习的)_第2张图片
两种类型算法各有优缺点,基于传统图像处理的车辆检测算法速度较快,但是准确率较低,基于深度学习的车辆检测算法速度稍慢,但是准确率很高,随着目前计算机计算能力的提高,基于深度学习的车辆检测算法逐渐成为主流的检测算法。

参考资料:https://blog.csdn.net/weixin_42051034/article/details/104463850

你可能感兴趣的:(目标检测,目标检测,深度学习,计算机视觉)