1.R-CNN
对于多个目标的情况,就不能以固定个数输出物体的位置值
1.1 目标检测-Overfeat模型
滑动窗口
- 目标检测的暴力方法是从左到右、从上到下滑动窗口,利用分类识别目标。
- 为了在不同观察距离处检测不同的目标类型,我们使用不同大小和宽高比的窗口。如下图所示;
??注:这样就变成每张子图片输出类别以及位置,变成分类问题。 ??但是滑动窗口需要初始设定一个固定大小的窗口,这就遇到了一个问题,有些物体适应的框不一样。
- 所以需要提前设定K个窗口,每个窗口滑动提取M个,总共KxM个图片,通常会直接将图像变形转换成固定大小的图像,变形图像块被输入CNN分类器中,提取特征后,我们使用一些分类器识别类别和该边界框的另一个线性回归器。
??总结:这种方法类似一种暴力穷举的方式,会消耗大量的计算力量,并且由于窗口大小问题可能会造成效果不准确。但是提供了—种解决目标检测问题的思路。
1.2 完整R-CNN结构
- 在CVPR 2014
- 候选区域方法(region proposal method):提供了物体检测的一个重要思路
- RCNN步骤:
(1) 对于一张图片,找出默认2000个候选区域(SelectiveSearch方法) (2) 2000个候选区域做大小变换,输入AlexNet当中,得到特征向量 [2000 , 4096] (3) 经过20个类别的SVM分类器,对于2000个候选区域做判断,得到[2000,20]得分矩阵。见下列特征向量训练分类器SVM (4) 2000个候选区域做NMS(非最大抑制),取出不好的,重叠度高的一些候选区域,得到剩下分数高,结果好的框 (5) 修正候选框bbox的回归微调
1.2.1 特征向量训练分类器SVM
- R-CNN选用SVM进行二分类。假设检测20个类别,那么会提供20个不同类别的SVM分类器,每个分类器都会对2000个候选区域的特征向量分别判断一次,这样得出[2000,20]的得分矩阵;
- 猫分类器: 2000个候选区域做判断,得到2000个属于猫的类别
- 狗分类器:2000个候选区域做判断,得到2000个属于猫的类别
- …
- …
- [2000,20]
1.2.2 非最大抑制(NMS)
- 目的
- 筛选候选区域,目标是一个物体只保留一个最优的框,来抑制那些冗余的候选框
- RCNN预测2000个候选框,得到3个(比如有3个ground truth)比较准确的候选框
- 迭代过程
(1)对于所有的2000个候选区域得分进行概率筛选,0.5 2000—>5个 (2)剩余的候选框 对于每个候选框找到自己对应ground truth (3)第一轮:对于右边车辆,假设B是得分最高的,与B的IoU>0.5删除。现在与B计算loU,DE结果≥0.5,剔除DE,B作为一个预测结果; 第二轮:对于左边车辆,AC中,A的得分最高,与A计算lou,C的结果≥0.5,剔除C,A作为一个结果; (4)最终结果:理想状态,每一个Ground truth都有一个候选框预测
1.2.3 修正候选区域
- 为了让候选框标注更准确率,去修正原来的位置。
- A是候选框,G是目标GT框
- 让A与G做回归训练,得到四个参数
RCNN输出:一张图片预测一个X候选框,x*w = y_locater
- y_locate:是真正算法输出的位置
2.R-CNN的改进-SPPNet
2.1改进的地方
- 图片输入到网络先得到一个feature map
- 原图中通过SS得到的候选区域直接映射feature map中对应位置
- 左上角的点;x’ = [x/S]+1
- 右下角的点:x’ = [x/S]-1
- 其中S就是CNN中所有的strides的乘积,包含了池化、卷积的stride。
论文当中S=16=2x 2×2×2 原图:特征图中xmin‘, ymin’ = [xmin/16]+1,ymin/16+1 特征图:xmax’,ymax’= [xmax/16]+1,ymax/16+1
- 映射过来的候选区域(假如还是2000个)的特征,经过SPP层(空间金字塔变换层),S输出固定大小的特征向量
2.2 spatial pyramid pooling
- 候选区域的特征图转换成固定大小的特征向量
- spp layer会将每一个候选区域分成1x1,2x2,4x4三张子图
- (16+4+1)x256=21×256=5376
- Spatial bins (空间盒个数)∶1+4+16=21
3. Fast R-CNN
3.1改进的地方:
- 提出一个Rol pooling
- 分类是用softmax计算:K个类别加上”背景"类·
- 与SPPNet—样的地方:
(1)首先将整个图片输入到一个基础卷积网络,得到整张图的feature map (2)将选择性搜索算法的结果region proposal (Rol)映射到feature map中
3.2 Rol pooling
- 为了减少计算时间并且得出固定长度的向量。
- 使用一种4*4=16空间盒数
- 因此Fast R-CNN要比SPPNet快很多也是因为这里的原因
- 训练会比较统一:废弃了svm以及sppnet
- roi pooling layer + softmax
从输入端到输出端直接用一个神经网络相连,整体优化目标函数。
3.2.1多任务损失-Multi-task loss
平均绝对误差(MAE)损失即L1损失+交叉嫡损失
- 对于分类loss,是一个N+1路的softmax输出,其中的N是类别个数,1是背景,使用交叉嫡损失
- 对于回归loss,是一个4xN路输出的regressor,也就是说对于每个类别都会训练一个单独的regressor的意思,使用平均绝对误差(MAE)损失即L1损失
Fast R-CNN的缺点 使用Selective Search提取Region Proposals,没有实现真正意义上的端对端,操作也十分耗时
4 Faster R-CNN
4.1算法改进
- 候选区域筛选融合到网络当中
四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架 - 区域生成网络+Fast R-CNN
- RPN替代了SS选择性搜索算法
(1) RPN网络用于生成region proposals (2)通过softmax判断anchors属于foreground或者backgroundo (3)bounding box regression修正anchors获得精确的proposals。 (4)得到默认300个候选区域给roi pooling继续后面fast rcnn的步骤
4.2 RPN原理
- 用n*n(默认3×3=9)的大小窗口去扫描特征图得到K个候选窗口
- 每个特征图中像素对应的9个窗口大小
- 三种尺度{128,256,512},三种长宽比{1:1,1:2,2:1}
- 3× 3=9不同大小的候选框
(1)窗口输出[N,256]——>分类:判断是否是背景 (2)回归位置:N个候选框与自己对应目标值GT做回归,修正位置。 (3)得到更好的候选区域提供给ROl pooling使用
4.3Faster RCNN训练
- RPN训练:
(1)分类:二分类,softmax,logisticregression。 (2)候选框的调整:均方误差做修正 - Fast RCNN部分的训练:
(1)预测类别训练: softamx (2)还有预测位置的训练:均方误差损失 - 样本准备:正负anchors样本比例:1:3
- 优点:
(1)提出RPN网络 (2)端到端网络模型 - 缺点:训练参数过大
|