目标检测
目标检测的任务:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/525d59e13b34cff53fc385e69c63c280.png)
发展历程:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/79324cbeb1f588e84b1fc7c68d399bf5.png)
两阶段方法
基于候选区域的目标检测器
先产生候选区域然后再进行CNN分类
R-CNN
1.输入图像
2.提取一些候选的检测框(约2000个)
3.为每一个候选检测框提取CNN特征
4.为每个检测框分类
候选区域生成(selective search)
选择性搜索(一种层次聚类算法):根据颜色,纹理,尺寸和空间交替相似度提取候选区域。
如上图,左图自下而上第一层,先用传统方法进行分割(分水岭算法,底层图像处理算法等),可以分割得到许多局部区域,在区域中提取一轮的候选框。之后对这些分割区域进行合并,根据颜色,纹理和空间交叠相似度等,得到第二层,该层分割区域数量变少,区域大小变大,是更加粗粒度区域。在该区域可以再次得到一些候选框。对这些区域进一步合并,可以得到更大尺度的候选框。
存在问题:
1.对于每张图片需要额外步骤去提取候选框
2.存储候选框需要消耗大量的资源
2.由于当时使用的是Alexnet提取特征,输入尺寸固定,需要拉伸候选框,严重影响CNN提取特征的质量
区域分类
为每一个类(包括背景类)训练SVM
存在问题:
SVM需要单独训练,网络更复杂,耗时很长
边界框回归
通过学习一种映射关系,对目标候选框的位置进行精化。
SPP-Net
R-CNN是逐个候选区提取cnn特征,要花费大量的计算时间和存储空间。
SPP-Net是一次性提取cnn特征,再在特征图上找出对应的候选区域。减少了特征提取时间和存储空间
spatial pyramid pooling
将图片划分为44的小格,每个小格取一个数,22的小格每个小格进行池化和对整张图像进行全局池化,然后在合并起来,这样得到的输出就是固定的
空间池化层实际就是一种自适应的层,这样无论你的输入是什么尺寸,输出都是固定的(21xchannel)
SPP 显著特点
1.不管输入尺寸是怎样,SPP 可以产生固定大小的输出
2.使用多个窗口(pooling window)
3.SPP 可以使用同一图像不同尺寸(scale)作为输入, 得到同样长度的池化特征。
通过SPP可以将任意大小的ROI特征统一成相同尺寸,提升cnn提取的特征质量
Fast R-CNN
将分类损失和回归损失统一在一个框架内
RoI Pooling
将特征图块转换为固定的大小
不同于SPP-Net的空间金字塔池化,RoI Pooling 输出6x6的特征图,如果不能取整,则向下取整
多任务损失
softmax + regressor
Faster R-CNN
端到端检测网络,极大提升检测速度
在Fast R-CNN网络的基础上进行更改,在最后一个卷积层后添加Region Proposal Network(RPN)网络。
候选区域由RPN网络直接生成,不再靠额外的候选区域生成算法,就形成了端对端的训练网络
Faster R-CNN在单一尺度特征图上使用RPN网络,提取region proposal,并使用单张特征图进行预测
RPN网络
直接在卷积特征图上计算目标可能的位置
检测的是通用目标出现的概率
参数解释:3*3(2k+4k)的卷积核在特征图上滑动,2k对应k个anchor的前景/背景分类,4k对应k个anchor的位置偏置,k个形状的anchor boxes
具体做法:
在最后一层特征图上使用滑动窗口,构建一个小网络,来判断每个anchor(锚点)区域内是否存在目标,确定anchor边界框的位置(不同形状的锚点框在边界框回归函数中的体现),滑动窗口在特征图上的位置,对应原图上的位置,边界框回归,使anchor位置更加精确,由RPN网络可以定位出原图中可能存在物体的候选区域
FPN
特征融合,多层预测以提升精度
b:典型的目标检测过程,先进行特征提取,再在特征图上预测。
a:图像金字塔:在不同尺度上检测,再把结果合并。
c:特征金字塔:输入图像,提取它的浅层特征(上下文信息),中层特征,高层特征(语义信息),在不同特征层上做预测,在做结果融合。
d:特征金字塔网络:先正常提取特征,再反卷积放大,把相应层的图像1x1卷积,传过来,进行融合,再进行预测。
FPN在特征金字塔上使用RPN网络提取region proposal,并在特征金字塔的多个尺度上进行预测
Mask-RCNN
检测与分割一体化,优化了RoI Pooling,提出RoI Align,解决了misalignment问题,强化了基础网络,使用了ResNet-101+FPN用作特征提取网络,处理分割任务使用全卷积网络
RoI Align
RoI Align采用双线性插值
一阶段方法
单次目标检测器
直接对输入图像应用算法,直接在输出层回归边界框的位置及其所属的类别。
没有显式的目标区域位置检测
YOLO:实时检测
检测速度非常快。在做预测的时候,使用的是全局图像,背景错误分类为目标的概率低。学到物体更泛化的特征表示。
YOLO将物体检测任务当做一个regression问题来处理,使用一个神经网络,直接从一整张图像来预测出bounding box 的坐标、box中包含物体的置信度和物体的probabilities。
使用的是 GoogLeNet 架构
流程:
1.将输入图像划分成S*S个网格
2.每个网格预测B个边界框和这个边界框是物体概率,每个边界框会预测出5个值:x,y,width,height和置信度-(Pr(Object)*IoU(truth&pred)),分别是含有 object 的置信度和这个 box 预测的有多准的信息
3.每个网格预测C个类的概率
损失函数
YOLO检测:
在 test 的时候,每个网格预测的 class 信息和边界框预测的置信度相乘,就得到每个 bounding box 的 class-specific confidence score:
得到每个 box 的 class-specific confidence score 以后,设置阈值,滤掉得分低的 boxes,对保留的 boxes 进行 NMS 处理,就得到最终的检测结果。
对于一张特征图,在每一个位置上提取预设数量的default box,直接在特征图上提取,进行预测,使网络不需要先提取候选目标区域
SSD
VGG16 + 多个卷积层(分辨率逐渐降低) +在6个不同尺度上进行预测(预测前直接提取预设数量的default box) + NMS(非极大值抑制)
损失函数
default box
指在feature map的每个小格(cell)上都有一系列固定大小的box,预设一些目标预选框,后续通过softmax分类+bounding box regression获得真实目标的位置。对于不同尺度的feature map 上使用不同的Default boxes。
NMS(非极大值抑制)
产生proposal后使用分类网络给出每个框的每类置信度,使用回归网络修正位置,最终应用NMS.
消除冗余的检测框
将同一类的所有检测框,按照分类置信度排序,分类置信度最高的检测框与其它检测框的重叠面积(IoU)大于一定阈值的检测框删除。再从未处理的框中重复上述操作,直至没有候选框。
IoU-Net
解决的问题:
分类置信度和定位准确度不对齐:
仅依靠分类置信度来作为NMS中的关键依据,可能会导致大量高质量边界框丢失。
网络结构:
1.PrRoI-Pooling更好的解决misalignment
2.单独的IoU分支,提取每个边界框的定位置信度
3.使用Jittered RoIs提取RoI,更好的训练IoU分支
Jittered RoIs:偏置和打乱,来创建更多的训练样本
PrRoI-Pooling
PrRoI Pooling直接使用积分取均值
IoU
存在的问题:
1.IoU与常用的损失没有强相关性
2.如果对象不重叠,则IoU值为0,不会反映两个形状间的距离
3.IoU无法正确区分两个对象的对齐方式(左对齐,还是右对齐)
GIoU
损失函数
“c”的含义:
两个区域的最小外接凸多边形
实验表明,只需将边界框回归分支的损失改为GIoU-Loss,即可获得2%-14%的检测性能提升