内容主要来自:(1)一文读懂目标检测 https://zhuanlan.zhihu.com/p/40986674
(3)边框回归详解https://blog.csdn.net/zijin0802034/article/details/77685438
目标检测的目的是在给定图片中找到物体所在的位置并标注出物体类别。目前常用的目标检测方法包括三类:
- 传统目标检测方法(区域选择+特征提取+分类)
- 候选区域/框+深度学习分类(RCNN, SPP-net, FastRCNN, Faster-RCNN, R-FCN等)
- 基于深度学习的回归方法(Yolo, SSD, DenseBox等)
1.图像识别和目标检测
1.1图像识别
对于一个简单的图像识别任务(识别图中的物体并使用方框圈出它的位置)
该任务本质上是由图像识别和定位两个问题组成。图像识别的输入为图片,输出为物体类别,可以使用准确率进行评估;定位任务的输入为图片,输出为方框在图片中的位置(x,y,w,h),使用IOU(产生的方框与待识别方框的重叠率)进行评估。
关于定位任务,解决思路包括以下几种:
(1)当做回归问题进行处理,预测(x,y,w,h)四个参数的值,得到方框的位置:
步骤包括:
- 搭建一个识别图像的神经网络
- 修改神经网络的尾端,添加分类和卷积两部分
- 对于回归部分使用欧式距离损失进行训练
- 预测时使用两个部分分别完成不同的功能
(2)图像窗口思路
- 继承(1)中的分类+回归思路
- 取不同大小的框
- 让框出现在不同位置,得到框的判定得分(遍历图片)
- 取得分最高的框
- 根据得分高低判断目标位置,可能选择两个得分最高的框作为最终的位置预测
1.2目标检测
当图像物体较多时,任务变为了多个物体的识别和定位。使用传统目标检测方法:区域选择+特征提取+分类的方法容易出现窗口冗余、特征鲁棒性差的问题。
2.候选区域框+深度学习分类
2.1RCNN
预先找出图中目标可能出现的位置(候选区域),利用图像纹理、边缘、颜色等信息,保证在选取较少的窗口的情况下保持较高的召回率。
对于RCNN,其简要步骤如下:
- 输入测试图像
- 利用选择性搜索算法在图像中从上到下提取2000个左右可能包含物体的候选区域
- 将不同的候选区域大小缩放至统一的大小(227*227)并输入CNN,将CNN某层的输出作为特征
- 将每个候选区域提取的特征使用SVM分类(每个类别对应一个SVM,用于判断是否属于这个类别)
- 使用回归器对候选框的位置进行修正
2.2 SPP-net
SPP:空间金字塔池化
CNN一般都含有卷积层和全连接层,其中卷积层的输入图像不需要固定尺寸,但全连接层的输入需要固定大小,因此全连接面对不同尺寸的输入数据时需要对输入数据进行crop或resize,从而统一图片的尺寸大小。crop和resize导致图像被拉伸变形或者裁剪至残缺,限制了识别的精确度。
R-CNN与SPP Net检测流程的比较:
- 实现了CNN的多尺度输入:SPP-Net在最后一个卷积层后接入了金字塔池化层,保证传导下一个全连接层的输入是固定的
- 只对原图进行一次卷积计算,得到整张图的卷积特征feature map,然后找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层进行特征提取。
2.3 Fast RCNN
在RCNN的基础上增加了SPPNet的方法。RCNN的缺点在于使用选择性搜索来提取潜在边界框的bounding box作为输入,导致计算机对所有候选区域进行特征提取时会有重复计算。
- 与RCNN相比,FastRCNN在最后一个卷积层后加了一个ROI pooling layer(SPP Net的精简版,SPP Net对每个候选区域采用了不同大小的金字塔映射,ROI pooling layer仅仅下采样到一个7*7的特征图),将不同大小的输入映射到一个固定尺度的特征向量。
- Fast RCNN直接使用softmax替代了RCNN中的SVM分类,同时在网络中加入了多任务损失函数边框回归,将模型合并为一个端到端的模型。
2.4 Faster RCNN
Fast RCNN的缺点在于选择性搜索找出所有搜索框耗费大量时间。Faster RCNN算法加入了一个提取边缘的神经网络,将寻找候选框的工作交给了神经网络来做。
具体是,引入Region Proposal Network(RPN)替代选择性搜索,同时引入anchor box应对目标形状的变化问题。RPN位于最后一个卷积层的后面。
RPN操作:
- 在特征图上滑动窗口
- 建立一个神经网络用于物体分类和框位置的回归
- 滑动窗口的位置提供了物体的大体位置信息
- 框的回归提供了框更精确的位置
Faster RCNN包括四种损失函数:RPN分类、RPN回归、Faster RCNN分类、Faster-RCNN回归
2.5 RCNN及其演变算法的总结
(1)RCNN
在图像中使用选择性搜索寻找候选框——将候选框内的图像块resize成相同大小,输入CNN进行特征提取——针对候选框中提取的特征,使用SVM判断其类别——对于属于某类别的候选框,利用回归器调整其位置
(2) Fast RCNN
在图像中使用选择搜索确定候选框——使用CNN求整张图片的feature map——找到每个候选框在特征图上的映射patch,将patch作为卷积特征输入SPP layer和之后的层——对候选框中的特征使用softmax判断其类别——对于属于某一个类别的候选框,使用回归器进一步调整它的位置
(3)Faster RCNN
使用CNN求整张图片的特征图——将卷积特征输入到RPN,得到候选框的特征信息——针对候选框中提取的特征,使用分类器判断其类别——对于属于某类别的候选框,利用回归器调整其位置
3.基于深度学习的回归方法
3.1YOLO
Faster RCNN在速度上无法满足实时性的要求。YOLO应用了回归的思想,利用整张图作为网络输入,直接在图像的多个位置上回归出位置的目标边框和目标类别。
步骤如下:
- 给定输入图像,划分为7*7网格
- 对每个网格均预测两个边框(包括了每个边框是目标的置信度和边框区域在多个类别上的概率)
- 根据阈值在上步得到的7*7*2个目标窗口中,利用阈值去除可能性比较低的窗口,然后利用非极大值抑制去除冗余窗口
Yolo中置信度包含了两个方面:边界框含有目标的可能性大小Pr;边界框的准确度。边界框不包含目标时为Pr=0,,否则为1;边界框的准确度使用预测框与实际框的IOU来表征。因此置信度定义为Pr(object)*IOU。置信度表征了边界框中目标属于各个类别的可能性大小以及边界框匹配目标的好坏。
这样每个边界框的预测值包含了5个元素(x,y,w,h,c),其中c为置信度。对于每个单元格还要给出C个类别的概率值。
类别概率值与置信度相乘可以得到类别的置信度
Yolo没有Region Proposal机制,导致目标无法被精准定位,检测精度不是很高
3.2 SSD
SSD结合了Yolo的回归思想和Faster RCNN的anchor机制。
SSD获取目标位置和类别的方法与YOLO相同。在预测某个位置时,YOLO使用的是全图的特征,SSD仅使用了这个位置周围的特征。SSD借助Faster RCNN的anchor机制,使用较小的画框提取每个位置的特征,然后利用特征回归得到目标的坐标信息和类别信息。SSD中的anchor作用在多个特征图上。
- SSD采用多尺度特征图,比较小的特征图用于检测相对较小的目标,较大的特征图用于检测较大的目标
- 使用卷积进行检测:YOLO最后采用全连接层,而SSD使用卷积提取不同特征图的检测结果
- SSD每个单元设置了尺度和长宽比不同的先验框,预测的边界框以先验框为基础。
SSD对每个先验框输出一套独立的检测值,对应一个边界框。输出包括两部分:一是各个类别的置信度或评分,SSD将背景也划分为一个特殊的类别;第二部分为边界框的位置(x,y,w,h)
训练步骤:
- 使用先验框对训练图片中的真实目标进行匹配,SSD首选对图片中的每个真实目标找到IOU最大的先验框进行匹配;如果一个先验框没有任何的真实目标匹配,则为背景样本(负样本);对于未匹配的先验框,若某个真是目标的IOU大于某个阈值(一般为0.5),则该先验框也与这个真真实目标匹配。(一个真实目标可能与多个先验框匹配,但一个先验框只能匹配一个目标)。
- 使用数据扩增提升SSD的性能。
- 预测时,首先根据置信度确定每个预测框的类别(置信度最大者)和置信度值,过滤掉属于背景的预测框。然后根据置信度阈值过滤到阈值较低的预测框,对剩下的预测框进行解码得到真实的未知参数,解码后根据置信度进行加农徐排列,保留最大的k个预测框。然后使用NMS算法过滤掉重叠度较大的预测框,即为最终的检测结果。
附注:
边框回归:选择性搜索提取的候选区域无法对物体进行准确的定位,因此需要进行fint-tuning使其与实际情况贴近。
候选区域/窗口一般使用四维向量(x,y,w,h)表示,分别表示窗口中心点的坐标和宽高,目标是寻找一种关系使得输入的原始窗口与真实窗口接近的回归窗口。实现的思路是平移+尺度收缩,也就是学习原始窗口的dx、dy、dw和dh。在RCNN等算法中,输入为窗口的卷积特征,输出为需要进行的平移变换和尺度缩放。
上图中P为原始图,G为真实图,G^为最终得到的图
dx,dy,dw和dh得到的为预测值G^,也就是真正需要的平移量(tx,ty)和尺度所放量(tw,th)。