计算机视觉目标检测算法综述

版权声明: https://blog.csdn.net/qq_16525279/article/details/81698684

传统目标检测三步走:区域选择、特征提取、分类回归

遇到的问题:

1.区域选择的策略效果差、时间复杂度高

2.手工提取的特征鲁棒性较差

深度学习时代目标检测算法的发展:

Two-Stage:

R-CNN

论文地址:Rich feature hierarchies for accurate object detection and semantic segmentation

地位:是用卷积神经网络(CNN)做目标检测的第一篇,意义影响深远。

核心思想:

1.区域选择不再使用滑窗,而是采用启发式候选区域生成算法(Selective Search)

2.特征提取也从手工变成利用CNN自动提取特征,增强了鲁棒性。

流程步骤:

1.使用Selective Search算法从待检测图像中提取2000个左右的区域候选框

2.把所有侯选框缩放成固定大小(原文采用227×227)

3.使用CNN(有5个卷积层和2个全连接层)提取候选区域图像的特征,得到固定长度的特征向量

4.将特征向量输入到SVM分类器,判别输入类别;送入到全连接网络以回归的方式精修候选框

优点:

1.速度
传统的区域选择使用滑窗,每滑一个窗口检测一次,相邻窗口信息重叠高,检测速度慢。R-CNN 使用一个启发式方法(Selective Search),先生成候选区域再检测,降低信息冗余程度,从而提高检测速度。

2.特征提取
传统的手工提取特征鲁棒性差,限于如颜色、纹理等低层次(Low level)的特征。

不足:

1.算力冗余
先生成候选区域,再对区域进行卷积,这里有两个问题:其一是候选区域会有一定程度的重叠,对相同区域进行重复卷积;其二是每个区域进行新的卷积需要新的存储空间。

2.图片缩放

候选区域中的图像输入CNN(卷积层并不要求输入图像的尺寸固定,只有第一个全连接层需要确定输入维度,因为它和前一层之间的权重矩阵是固定大小的,其他的全连接层也不要求图像的尺寸固定)中需要固定尺寸(227 * 227),会造成物体形变,导致检测性能下降。

3.训练测试不简洁

候选区域生成、特征提取、分类、回归都是分开操作,中间数据还需要单独保存。

SPP Net

论文地址:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

优点:

1.将提取候选框特征向量的操作转移到卷积后的特征图上进行,将R-CNN中的多次卷积变为一次卷积,大大降低了计算量,不仅减少存储量而且加快了训练速度。

2.在最后一个卷积层和第一个全连接层之间做一些处理,引入了Spatial Pyramid pooling层,对卷积特征图像进行空间金字塔采样获得固定长度的输出,可对特征层任意长宽比和尺度区域进行特征提取。

Spatial Pyramid pooling具体做法:

在得到卷积特征图之后,对卷积特征图进行三种尺度的切分:4*4,2*2,1*1,对于切分出来的每个小块进行max-pooling下采样,之后再将下采样的结果全排列成一个列向量,送入全连接层。

Spatial Pyramid pooling操作示意图:

例如每个候选区域在最后的512张卷积特征图中得到了512个该区域的卷积特征图,通过spp-net下采样后得到了一个512×(4×4+2×2+1×1)维的特征向量,这样就将大小不一的候选区的特征向量统一到了一个维度。

总结:不仅减少了计算冗余,更重要的是打破了固定尺寸输入这一束缚。

Fast R-CNN

论文地址:Fast R-CNN

结构创新:将原来的串行结构改成并行结构。

网络创新:加入RoI pooling layer,它将不同大小候选框的卷积特征图统一采样成固定大小的特征。ROI池化层的做法和SPP层类似,但只使用一个尺度进行网格划分和池化。

Fast R-CNN针对R-CNN和SPPNet在训练时是多阶段的和训练的过程中很耗费时间空间的问题进行改进。设计了多任务损失函数(multi-task loss),将分类任务和边框回归统一到了一个框架之内。

Faster R-CNN

论文地址:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

在Faster R-CNN之前,生成候选区域都是用的一系列启发式算法(Selective Search),基于Low Level特征生成区域。

存在的问题:

1.生成区域的靠谱程度随缘,而Two Stage算法正是依靠生成区域的靠谱程度——生成大量无效区域则会造成算力的浪费、少生成区域则会漏检;

2.生成候选区域的算法(Selective Search)是在 CPU 上运行的,而训练在GPU上面,跨结构交互必定会有损效率。

革新:提出Region Proposal Network(RPN)网络替代Selective Search算法,利用神经网络自己学习去生成候选区域。

这种生成方法同时解决了上述的两个问题,神经网络可以学到更加高层、语义、抽象的特征,生成的候选区域的可靠程度大大提高。

使得整个目标识别真正实现了端到端的计算,将所有的任务都统一在了深度学习的框架之下,所有计算都在GPU内进行,使得计算的速度和精度都有了大幅度提升。

从上图看出RPN和RoI pooling共用前面的卷积神经网络——将RPN嵌入原有网络,原有网络和RPN一起预测,大大地减少了参数量和预测时间。

Faster R-CNN在做下采样和RoI Pooling时都对特征图大小做了取整操作。

整体思路:首先对整张图片进行卷积计算,得到卷积特征,然后利用RPN进行候选框选择,再返回卷积特征图取出候选框内的卷积特征利用ROI提取特征向量最终送入全连接层进行精确定位和分类,总之:RPN+Fast R-CNN=Faster R-CNN。

RPN网络

在RPN中引入了anchor的概念,feature map中每个滑窗位置都会生成 k 个anchor,然后判断anchor覆盖的图像是前景还是背景,同时回归Bounding box(Bbox)的精细位置,预测的Bbox更加精确。

解释:为了提取候选框,作者使用了一个小的神经网络也即就是一个n×n的卷积核(文中采用了3×3的网络),在经过一系列卷积计算的特征图上进行滑移,进行卷积计算。每一个滑窗计算之后得到一个低维向量(例如VGG net 最终有512张卷积特征图,每个滑窗进行卷积计算的时候可以得到512维的低维向量),得到的特征向量,送入两种层:一种是边框回归层进行定位,另一种是分类层判断该区域是前景还是背景。3*3滑窗对应的每个特征区域同时预测输入图像3种尺度(128,256,512),3种长宽比(1:1,1:2,2:1)的region proposal,这种映射的机制称为anchor。所以对于40*60图图,总共有约20000(40*60*9)个anchor,也就是预测20000个region proposal。

总结:Faster R-CNN可以说是真正意义上的深度学习目标检测算法。Faster R-CNN将一直以来分离的region proposal和CNN分类融合到了一起,使用端到端的网络进行目标检测,无论在速度上还是精度上都得到了不错的提高。然而Faster R-CNN还是达不到实时的目标检测,预先获取region proposal,然后在对每个proposal分类计算量还是比较大。

小结:

一开始的串行到并行,从单一信息流到两条信息流。

总的来说,从R-CNN, SPP NET, Fast R-CNN, Faster R-CNN一路走来,基于深度学习目标检测的流程变得越来越精简,精度越来越高,速度也越来越快。可以说基于region proposal的R-CNN系列目标检测方法是当前目标最主要的一个分支。

One-Stage:

尽管Faster R-CNN在计算速度方面已经取得了很大进展,但是仍然无法满足实时检测的要求,因此有人提出了基于回归的方法直接从图片中回归出目标物体的位置以及种类。具有代表性的两种方法是YOLO和SSD。

YOLO

论文地址:You Only Look Once: Unified, Real-Time Object Detection

区别于R-CNN系列为代表的两步检测算法,YOLO舍去了候选框提取分支(Proposal阶段),直接将特征提取、候选框回归和分类在同一个无分支的卷积网络中完成,使得网络结构变得简单,检测速度较Faster R-CNN也有近10倍的提升。这使得深度学习目标检测算法在当时的计算能力下开始能够满足实时检测任务的需求。

网络结构:

首先将图片resize到固定尺寸(448 * 448),然后通过一套卷积神经网络,最后接上全连接直接输出结果,这就他们整个网络的基本结构。

更具体地做法,是将输入图片划分成一个S*S的网格,每个网格负责检测网格里面的物体是啥,并输出Bbox Info和置信度。这里的置信度指的是该网格内含有什么物体和预测这个物体的准确定。

更具体的是如下定义:

从这个定义得知,当框中没有物体的时候,整个置信度都会变为 0 。

这个想法其实就是一个简单的分而治之想法,将图片卷积后提取的特征图分为S*S块,然后利用优秀的分类模型对每一块进行分类,将每个网格处理完使用NMS(非极大值抑制)的算法去除重叠的框,最后得到我们的结果。

YOLO模型:

图片描述:

(1) 给个一个输入图像,首先将图像划分成7*7的网格。

(2) 对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)。

(3)根据上一步可以预测出7*7*2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后非极大值抑制去除冗余窗口即可。

可以看到整个过程非常简单,不需要中间的region proposal在找目标,直接回归便完成了位置和类别的判定。

SSD

论文地址:SSD: Single Shot MultiBox Detector

YOLO 这样做的确非常快,但是问题就在于这个框有点大,就会变得粗糙——小物体就容易从这个大网中漏出去,因此对小物体的检测效果不好。

所以 SSD 就在 YOLO 的主意上添加了 Faster R-CNN 的 Anchor 概念,并融合不同卷积层的特征做出预测。

上图是SSD的一个框架图,首先SSD获取目标位置和类别的方法跟YOLO一样,都是使用回归,但是YOLO预测某个位置使用的是全图的特征,SSD预测某个位置使用的是这个位置周围的特征(感觉更合理一些)。

假如某一层特征图大小是8*8,那么就使用3*3的滑窗提取每个位置的特征,然后这个特征回归得到目标的坐标信息和类别信息(图c)。不同于Faster R-CNN,这个anchor是在多个feature map上,这样可以利用多层的特征并且自然的达到多尺度(不同层的feature map 3*3滑窗感受野不同)。

特点:

1.基于多尺度特征图像的检测:在多个尺度的卷积特征图上进行预测,以检测不同大小的目标,一定程度上提升了小目标物体的检测精度。

2.借鉴了Faster R-CNN中的Anchor思想,在不同尺度的特征图上采样候选区域,一定程度上提升了检测的召回率以及小目标的检测效果。

还有一个重大的进步是结合了不同尺寸大小 Feature Maps 所提取的特征,然后进行预测。

这个尝试就大大地提高了识别的精度,且高分辨率(尺寸大)的 Feature Map 中含有更多小物体的信息,也是因为这个原因 SSD 能够较好的识别小物体。

总结:和 YOLO 最大的区别是,SSD 没有接 FC 减少了大量的参数量、提高了速度。

小结:

SSD和YOLO采用了回归方法进行目标检测使得目标检测速度大大加快,SSD引入Faster R-CNN的anchor机制使得目标定位和分类精度都较YOLO有了大幅度提高。基于回归方法的目标检测基本达到了实时的要求,是目标检测的另一个主要思路。

猜你喜欢

转载自blog.csdn.net/qq_16525279/article/details/81698684