一.RCNN
框架:
1.selective search
2,区域预处理,尺寸缩放到227×227
3.利用Alexnet(去掉最后分类层,4096维向量),做特征提取,一个物体一个SVM分类,(当时认为SVM比softmax分类好)bounding box回归
4.正负样本选择方法
全连接层最后一层换成分类数+背景,IOU>0.5,正样本,IOU<0.5,负样本,每个类别对应一个SVM分类器
5.回归,利用的是第五层卷积特征做回归
6.测试,测试出来的最大分值的框,做NMS去掉多余的框
7.评价指标,召回率例如是坏人就抓回监狱
速度慢的原因:每个区域都需要卷积,用于SVM、b-box 回归的特征需要存储到磁盘中,这将需要占用大量的磁盘空间,而且提取这些特征也会耗费好多时间。
问题:训练时间很长(84小时),Fine-tune(18)+ 特征提取(63)+ SVM/Bbox训练(3),测试阶段很慢:VGG16一张图片47s,复杂的多阶段训练。
二.SPP-Net
1.改进:(1)共享卷积,直接在Conv5用特征
(2)引入空间金字塔池化(spp),为不同尺寸的区域在conv5输出上提取特征,映射到尺寸固定的全连接层
2.spp网络结构
3.分块,块里面做最大池化
4.特征位置与原图对应
5.训练过程:注意与RCNN区别,冻结卷积层权重
问题:
• 继承了R-CNN的剩余问题,需要存储大量特征,复杂的多阶段训练,训练时间仍然长(25.5小时),Fine-tune(16)+ 特征提取(5.5)+ SVM/Bbox训练(4),带来了新问题,SPP层之前的所有卷积层参数不能fine tune,误差过不了spp层,因为计算困难。
三.Fast R-CNN
1.改进:
比R-CNN,SPP-Net更快的trainng/test,更高的mAP, 实现end-to-end(端对端)单阶段训练,多任务损失函数(Multi-task loss), 所有层的参数都可以fine tune, 不需要离线存储特征文件
2.引入新技术
感兴趣区域池化层(RoI pooling layer)替换spp层, 多任务损失函数(Multi-task loss)
3.roi pooling,注意:spp和roi的区域都是通过slective search选择的,此时误差可传过roi了。
roi pooling缺点:
由于两次量化带来的误差;
(1)将候选框边界量化为整数点坐标值。
(2)将量化后的边界区域平均分割成 k x k 个单元(bin),对每一个单元的边界进行量化。
针对修改的roi align
- 遍历每一个候选区域,保持浮点数边界不做量化。
- 将候选区域分割成k x k个单元,每个单元的边界也不做量化。
- 在每个单元中计算固定四个坐标位置,用双线性内插的方法计算出这四个位置的值,然后进行最大池化操作。
对小目标检测有很大改善
https://www.cnblogs.com/zf-blog/p/9934086.html
4.重叠区域误差传播做法
5
5.修正框
6.损失函数
7.奇异值分解,加速全连接
8.性能比较
四,Faster R-CNN
1.网络结构
如上图,一副P*Q的图像,先缩放到M*N大小,然后进入backbone提取特征,对于RPN,先用3*3卷积,在两个1*1卷积分别生成positive anchors和对应bounding box regression偏移量,然后proposal层负责综合positive anchors和对应bounding box regression偏移量获取proposals.而roi pooling则利用proposals提取出相应的feature map进入后续的全连接分类.
2.改进
RPN理解
https://blog.csdn.net/bingochenjx/article/details/78422290
rpn代替selective search
3.RPN,conv5经3x3卷积核,1x1卷积核得到的特征去做回归,另一个1x1卷积核得到的特征去做分类。
4.anchor选择方法,一般k=9
首先我们需要知道 anchor 的本质是什么,本质是 SPP(spatial pyramid pooling) 思想的逆向。而SPP本身是做什么的呢,就是将不同尺寸的输入 resize 成为相同尺寸的输出。所以SPP的逆向就是,将相同尺寸的输出,倒推得到不同尺寸的输入。接下来是 anchor 的窗口尺寸,这个不难理解,三个面积尺寸(128^2,256^2,512^2),然后在每个面积尺寸下,取三种不同的长宽比例(1:1,1:2,2:1).这样一来,我们得到了一共9种面积尺寸各异的 anchor 。示意图如下
至于这个 anchor 到底是怎么用的,这个是理解整个问题的关键。
下面是整个 Faster RCNN 结构的示意图:
利用anchor是从第二列这个位置开始进行处理,这个时候,原始图片已经经过一系列卷积层和池化层以及relu,得到了这里的 feature:51x39x256(256是层数)
在这个特征参数的基础上,通过一个3x3的滑动窗口,在这个51x39的区域上进行滑动,stride=1,padding=2,这样一来,滑动得到的就是51x39个3x3的窗口。对于每个3x3的窗口,作者就计算这个滑动窗口的中心点所对应的原始图片的中心点。
然后作者假定,这个3x3窗口,是从原始图片上通过SPP池化得到的,而这个池化的区域的面积以及比例,就是一个个的anchor。换句话说,对于每个3x3窗口,作者假定它来自9种不同原始区域的池化,但是这些池化在原始图片中的中心点,都完全一样。这个中心点,就是刚才提到的,3x3窗口中心点所对应的原始图片中的中心点。
如此一来,在每个窗口位置,我们都可以根据9个不同长宽比例、不同面积的anchor,逆向推导出它所对应的原始图片中的一个区域,这个区域的尺寸以及坐标,都是已知的。而这个区域,就是我们想要的 proposal。所以我们通过滑动窗口和anchor,成功得到了 51x39x9 个原始图片的 proposal。
接下来,每个 proposal 我们只输出6个参数:每个 proposal 和 ground truth 进行比较,把与ground truth 中重叠最大的 bounding box 的iou当成是这个proposal的iou, iou>0.7, 认为这个proposal是positive;iou<0.3, 认为这proposal是negative,我们希望positive的proposal包含前景的概率高一些,negative包含背景的概率高一些;iou位于这之间的不做处理。
然后对每个proposal进行分类和bounding box regression:得到的前景概率和背景概率(2个参数)(对应图上的 cls_score);由于每个 proposal 和 ground truth 位置及尺寸上的差异,从 proposal 通过平移放缩得到 ground truth 需要的4个平移放缩参数(对应图上的 bbox_pred)。
所以根据我们刚才的计算,我们一共得到了多少个anchor box呢? 51 x 39 x 9 = 17900
约等于 20 k
4,训练过程,先训练rpn做好anchor,在做fast rcnn,注意共享卷积层以后,要冻结卷积层
5,性能比较
6,网络总体比较
fast rcnn多任务损失函数
7.带FPN的RPN
对于FPN的话,也就是需要将每一层feature map逐个输入到RPN网络,同时每个feature map负责不同大小的目标.
五.R-FCN
1,全连接会丧失空间信息
2,红色框是R-FCN的特有之处,所有通道数等于分类数+背景
3,每类对应每层通道
4,feature map 可视化
5,损失函数
六.cascade rcnn
faster rcnn存在问题:
train时:RPN阶段选择2000左右proposals,在选择IOU大于一定阈值,比如0.5的,一般会选择128个,满足1:3比例,在进入fast rcnn经过roi pooling 在进行分类与回归;
inference:RPN阶段选择300左右proposals,直接roi pooling进行分类与回归,那么这里就没有iou的选择。这里就能看出train和inference时,回归的框质量明显不一样,也就是mismatch问题。通常阈值取0.5时,mismatch问题还不会很严重
从实验看出来推理时只有RPN选择的iou和训练时候的iou接近是,性能才最好,否则就是mismatch问题.也就看出来了单一阈值训练出的检测器效果非常有限,单一阈值不能对所有的Proposals都有很好的优化作用.
上图就是cascade rcnn框架,RPN提出的proposals大部分质量不高,导致没办法直接使用高阈值的detector,Cascade R-CNN使用cascade回归作为一种重采样的机制,逐stage提高proposal的IoU值,从而使得前一个stage重新采样过的proposals能够适应下一个有更高阈值的stage。对于(b)detector会改变样本的分布,这时候再使用同一个共享的H对检测肯定是有影响的;对于(c)c3高质量检测头容易过拟合,但是还要去预测低质量框,检测效果更差。
参考:
https://zhuanlan.zhihu.com/p/32702387
https://zhuanlan.zhihu.com/p/31426458
https://zhuanlan.zhihu.com/p/145842317
https://zhuanlan.zhihu.com/p/42553957