【目标检测】主流目标检测算法步骤分析

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

看了这篇文章后(链接),用这篇博文总结一下目前主流的目标检测算法的步骤。

传统的目标检测算法

卷积神经网络CNN已经帮我们完成了图像识别(判定是猫还是狗)的任务,我们只需要添加一些额外的功能来完成定位任务即可。
思路一:作为回归问题解决,直接在整张图像上预测出(x,y,w,h)四个参数的值,回归部分用欧式距离作为损失函数。神经网络的尾部展开,一个用于classification ,另外一个用于regression。
思路二:取图像窗口
• 整体采取的还是刚才的classification + regression思路
• 取不同的大小的“框”
• 让框出现在不同的位置,得出这个框的判定得分,作为训练时的标签
• 预测时,取得分最高的那个框作为预测结果

用各种大小的框(遍历整张图片)将图片截取出来(一般是窗口滑动),输入到CNN,然后CNN会输出这个框的得分(classification)以及这个框图片对应的x,y,h,w(regression),我们以得分最大的那个框作为最终的预测位置。
注意:有的时候也会选择得分最高的两个框,然后取两框的交集作为最终的位置预测。

传统目标检测面临的问题:
1)基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余
2)手工设计的特征对于多样性的变化没有很好的鲁棒性

R-CNN(Region Proposal + CNN)

1.在图像中确定约1000-2000个候选框 (使用选择性搜索Selective Search)
2.每个候选框内图像块缩放(warp)至统一的227x227,并输入到CNN内进行特征提取,并将提取出的特征暂时存入硬盘。
3.对候选框中提取出的特征,使用SVM二分类器判别是否属于一个特定类(每一个类别对应一个SVM,用来判断是不是属于这个类别)。
4.对于属于某一类别的候选框,训练一个线性回归模型去判定这个框是否完美。

缺点:R-CNN流程的第一步中对原始图片通过Selective Search提取的候选框region proposal多达2000个左右,而这2000个候选框每个框都需要进行CNN提特征+SVM分类,计算量很大,导致R-CNN检测速度很慢,一张图都需要47s。网络结构如下图:
在这里插入图片描述

Fast R-CNN

1.在图像中确定约1000-2000个候选框 (使用选择性搜索Selective Search)
2.对整张图片输进CNN,得到feature map
3.找到每个候选框在feature map上的映射patch(这个区域也被称为Region Of Interest 或ROI),将此patch作为每个候选框的卷积特征输入到SPP layer(金字塔池化层)和之后的层
4.对候选框中提取出的特征,使用分类器判别是否属于一个特定类
5.对于属于某一类别的候选框,用回归器进一步调整其位置

对比R-CNN,Fast R-CNN主要有两个地方不同,第一是在最后一个卷积层后面加入了一个ROI pooling层,第二是在损失函数中使用了多任务损失函数(multi-task loss),将Bounding Box Regressing直接加入到CNN网络中进行反向传播训练。

(1)ROI pooling layer其实是一个SPP-NET(金字塔池化层)的精简版。SPP-NET对每个候选框使用了不同大小的金字塔映射,比如说使用 1 1 2 2 4 4 1*1,2*2,4*4 三个尺寸来划分候选框在特征图上对应的patch,最后得出1+4+16=21个区域,对于每个区域使用max pooling层,从而得到固定大小的输出(21 * 特征图深度)。而ROI pooling layer只需要下采样到一个7x7的特征图。这样所有的候选框都对应了一个7 *7 *512维度的特征向量作为全连接层的输入。

(2)Fast R-CNN直接使用softmax层替代SVM分类,同时将边框回归的损失函数也加入到了网络中,构成了多任务损失函数,这样整个训练过程是端到端的。

也就是说,之前R-CNN的处理流程是先提proposal,然后CNN提取特征,之后用SVM分类器,最后再做bbox regression,而在Fast R-CNN中,作者巧妙的把bbox regression放进了神经网络内部,与region分类和并成为了一个multi-task模型,实际实验也证明,这两个任务能够共享卷积特征,并相互促进。网络结构如下图所示:
在这里插入图片描述

R-CNN有一些相当大的缺点(把这些缺点都改掉了,就成了Fast R-CNN)。
大缺点:由于每一个候选框都要独自经过CNN,这使得花费的时间非常多。
解决:共享卷积层,现在不是每一个候选框都当做输入进入CNN了,而是输入一张完整的图片,在第五个卷积层再得到每个候选框的特征。

Faster R-CNN

1.对整张图片输进CNN,得到feature map
2.卷积特征输入到RPN(Region Proposal Network),得到候选框的特征信息
3.对候选框中提取出的特征,使用分类器判别是否属于一个特定类
4.对于属于某一类别的候选框,用回归器进一步调整其位置

可以看到,从Fast R-CNN到Faster R-CNN最大的变化是选择候选框的策略。Fast R-CNN使用选择性搜索,找出所有的候选框,这个过程非常耗时。所以在Faster R-CNN中,加入一个提取边缘的神经网络,也就是说找到候选框的工作也交给神经网络来做了。

所以,在Fast R-CNN中引入Region Proposal Network(RPN)替代Selective Search,同时引入anchor box应对目标形状的变化问题,anchor就是位置和大小固定的box,可以理解成事先设置好的固定的proposal(也就是候选框的前身),RPN需要计算ground-truth相对于anchor的偏移值,从而得到候选框,同时计算这个anchor中是否存在物体。确定候选框之后,之后的步骤和Fast R-CNN一样,使用ROI pooling处理候选框在对应的不同大小的patch,使其成为相同大小,输入到全连接层中。

在这里插入图片描述

从上图可以看到,一种网络,存在四个损失函数;
  • RPN calssification(anchor good.bad 确定这个anchor中是否有物体)
  • RPN regression(anchor->propoasal 将anchor回归获得候选框)
  • Fast R-CNN classification(over classes 对候选框中的物体进行分类)
  • Fast R-CNN regression(proposal ->box 对候选框进行下一步的回归,获得更精确的边框)
  
总的来说,从R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN一路走来,基于深度学习目标检测的流程变得越来越精简,精度越来越高,速度也越来越快。可以说基于Region Proposal的R-CNN系列目标检测方法是当前目标检测技术领域最主要的一个分支。同时因为这些技术需要先进行Region Proposal,再针对候选框进行回归与分类,所以我们也将采用这种思想的目标检测技术称为两步法

SSD

Faster R-CNN的方法目前是主流的目标检测方法,但是速度上并不能满足实时的要求。YOLO和SSD这类的方法慢慢显现出其重要性,这类方法使用了回归的思想,利用整张图作为网络的输入,直接在图像的多个位置上回归出这个位置的目标边框,以及目标所属的类别,这种没有事先通过算法生成候选框的思想称为一步法

早期的Yolov1存在很多问题,比如v1使用整图特征在7*7的粗糙网格内回归对目标的定位并不是很精准。那是不是可以结合Region Proposal的思想实现精准一些的定位?SSD结合YOLOv1的回归思想以及Faster R-CNN的anchor机制(人工规定的Region Proposal)做到了这点。

SSD从Faster R-CNN中吸收了anchor box这一思想,采用的是均匀地将不同尺寸的default box分配到不同尺度的feature map上。例如6个feature map的尺度,default box的大小从20%到90%的占比,同时有aspect_ratios = [[2], [2, 3], [2, 3], [2, 3], [2], [2]] ,最终可以计算出不同default box大小。网络结构如下:
在这里插入图片描述

Yolov3

前段时间Yolov3横空出世,并在速度和精度上打败了他的对手SSD,可以说是目前性能较好的一步法目标检测算法,v3经历了两个版本的迭代,在吸取前代产品经验的同时,也采取了其他目标检测算法(比如SSD)的一些优点,性能表现十分强劲。

在Yolov3中,作者提出了很多新思想,比如说使用三个不同的尺度特征图进行预测、图像上采样与融合、摒弃Pooling Layer(直接用conv的stride来实现降采样)、使用K-Means聚类得出anchor box的大小、摒弃使用softmax层对检测到的对象进行分类(使用二分类的logistic回归)等等。网络结构如下:
在这里插入图片描述
Yolov3具体细节可以看这篇博文,讲得十分详细:
一文看懂YOLO v3

Yolov3与SSD的区别

二者目前作为目标检测一步法中效果较好的算法,他们之间也存在一些区别,下面这篇文章详细介绍了他们之间的区别:
yolo-v3和SSD的一些对比

猜你喜欢

转载自blog.csdn.net/qq_41427568/article/details/102000012