常见的目标检测算法
(1)R-CNN
将CNN方法引入目标检测领域,大大提高了目标检测效果。R-CNN算法分为4个步骤:一张图像生成1K~2K个候选区域;对每个候选区域,使用深度网络提取特征;特征送入每一类的SVM分类器,判别是否属于该类;使用回归器精细修正候选框位置。
图1 R-CNN方法步骤
(2)Fast-RCNN
Fast-RCNN与RCNN同样使用最大规模的网络,Fast RCNN和RCNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。
基本的网络结构如下图。其中roi_pool层将每个候选区域均匀分成M×N块,对每块进行max pooling。将特征图上大小不一的候选区域转变为大小统一的数据,送入下一层。
图2 Fast-RCNN网络结构图
(3)Faster-RCNN
Faster-RCNN可将简单网络目标检测速度达到17fps,在PASCAL VOC训练集上准确率为59.9%;复杂网络达到5fps,准确率78.8%。Faster-RCNN相比于R-CNN、Fast-RCNN将目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。
Faster-RCNN实现的基本思路是在提取好的特征图上,对所有可能的候选框进行判别。由于后续还有位置精修步骤,所以候选框实际比较稀疏。 原始特征提取包含若干层conv+relu,直接套用ImageNet上常见的分类网络之后再进行候选区域,窗口分类和位置精修。
(4)YOLO
针对R-CNN与Fast-RCNN速度慢的问题,YOLO直接在输出层回归bounding box的位置和bounding box所属的类别即将整张图作为网络的输入,把 Object Detection 的问题转化成一个 Regression问题。
大致流程如下:
图 3 YOLO网络算法流程
图4卷积神经网络模型结构
算法步骤:1.将一幅图像分成S*S个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。
2.每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。这个confidence代表了所预测的box中含有object的置信度和这个box预测的置信度这两重信息。
3.每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。则SS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是SS*(5*****B+C)维度的张量。
(5)SSD
SSD算法没有生成 proposal 的过程,检测速度高。针对不同大小的目标检测,传统的做法是先将图像转换成不同大小(图像金字塔),然后分别检测,最后将结果综合起来(NMS)。而SSD算法则利用不同卷积层的 feature map 进行综合也能达到同样的效果。算法的主网络结构是VGG16,将最后两个全连接层改成卷积层,并随后增加了4个卷积层来构造网络结构。对其中5种不同的卷积层的输出(feature map)分别用两个不同的3×3的卷积核进行卷积,一个输出分类用的confidence,每个default box生成21个类别confidence;一个输出回归用的 localization,每个 default box生成4个坐标值(x, y, w, h)。
此外,这5个feature map还经过PriorBox层生成prior box(生成的是坐标)。最后将前面三个计算结果分别合并然后传给loss层。SSD算法的网络模型如下图。
图5 SSD模型结构图
各算法对比与总结
(1)R-CNN
R-CNN是针对区域提取特征的目标检测模型。通过selective search的方式从图片中提取可能的目标的候选窗口,将窗口warp到同一个尺寸,通过卷积网络从warp之后的候选窗口提取特征,将特征送给分类器进行分类,最后再加上bounding box regression等操作得到更准确的目标位置。总结起来就是先训练SVM分类器,后进行bounding box的regression操作。
特点:
1:获取区域目标比较费时。
2:由于各区域不共享特征,重复计算,训练过程比较费时。
3:分类器采用SVM,而SVM的存储是需要将数据存储在磁盘空间中,需要额外考虑这点。
4:训练比较麻烦,首先需要先训练分类模型网络,进而对bounding box进行回归计算。
(2)Fast-RCNN
通过引入roi_pooling解决针对区域提取特征造成的重复计算的情况,它允许输入具有任何尺度,经过ROI将box分为44、88等同样数量的网格,然后对每个网格通过max,avg等操作计算相应的特征,就可以将不同尺寸的box转化为相同维度的特征,在最后的损失函数层使用了多任务损失函数(multi-task loss),同时进行分类和位置框的回归。
特点:
1:实现端到端的训练,除了proposal提取阶段,同时进行分类与回归过程。
2:所有的特征都暂存在显存中,就不需要额外的磁盘。在最后将分类器换成两个softmax分类器,一个针对区域的分类(包含背景),一个针对bounding box的微调。
3:提出了一个ROI_pooling层,ROI不仅完成了特征图的映射关系,并且将特征图固定到单个尺寸。
4:整张图上的proposal共享特征提取层,训练速度显著提升。
5:由于SS方法获取区域目标,只能在CPU上进行,比较费时。
(3)Faster-RCNN
为了解决获取区域目标速度慢的问题,提出了RPN网络,RPN的核心思想是使用卷积神经网络直接产生region proposal,使用的方法本质上就是滑动窗口。RPN的设计比较巧妙,RPN只需在最后的卷积层上滑动一遍,并在每个位置引入多尺度多长宽比的anchor窗口来捕捉未知尺寸和ratio rate的目标。
特点:
1:提出一个全卷积网络作为region proposal网络(RPN),解决了获取proposal耗时的问题。
2:由于faster-RCNN训练过程实际上分成了两个阶段,proposal生成阶段与detection阶段,所以速度上还是不能够满足实时的要求。
(4)YOLO
使用回归的思想,给定输入图像,直接在图像的多个位置上回归出这个位置的目标边框以及目标类别,将检测过程整个成一个single deep neural network。给定一个输入图像,将其划分为77的网格,对于每一个网格,预测2个box,包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率,接着预测出77*2个目标窗口,随后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可,可以看到整个过程非常简单,不需要中间的proposal生成网络,直接回归便完成了位置和类别的判定。
特点:
1:YOLO将目标检测任务转换成一个回归问题,大大加快了检测的速度,使得YOLO可以每秒处理45张图像。而且由于每个网络预测目标窗口时使用的是全图信息,使得false positive比例大幅降低。
2:YOLO采用全图信息进行预测。与滑动窗口、region proposals不同,YOLO在训练、预测过程中利用全图信息。Fast R-CNN方法错误地将背景块检测为目标,原因在于Fast R-CNN方法在检测时无法看到全局图像。相比于Fast R-CNN,YOLO可以将背景预测错误率降低一半。
3:YOLO可以学习到目标的概括信息。YOLO比其他目标检测算法的准确率高很多。
4:针对小目标的检测、相互靠近物体的检测效果会不太好。
(5)SSD
SSD则是Faster-RCNN与YOLO的结合,结合了yolo中的回归思想,同时又结合了Faster-RCNN中的anchor box机制,SSD将输出一系列离散化(discretization)的bounding boxes,这些bounding boxes是在不同层次上的feature maps上生成的,计算出每一个default box中的物体,其属于每个类别的可能性,即score,得分。同时,要对这些bounding boxes的shape进行微调,以使得其符合物体的外接矩形。还有就是,为了处理相同物体的不同尺寸的情况,SSD结合了不同分辨率的feature maps的predictions。SSD方法完全取消了proposals generation、pixel resampling或者feature resampling这些阶段。这样使得SSD更容易去优化训练,也更容易地将检测模型融合进系统之中。
特点:
SSD与YOLO一样,对于小目标的检测率很低,这是由于SSD对输入图像进行了预处理,经过较深的卷积层后,对于本身比较小的目标,小目标可能已经丢失了。