1.R-CNN(Region with cnn)
产生原因:原始的detection问题中,使用滑窗对图片进行处理,对所有的区域选择进行遍历,但是这需要耗费大量的计算能力
在R-CNN中,
- 首先使用selective search对图像进行处理来给出一定数量的建议区域,将每一个RoI预处理到 227∗227 227 ∗ 227 大小
- 对每一个selective search的建议区域使用cnn进行特征提取,cnn网络使用pre-train的结果进行fine-tune得到适合当前实际具体问题的网络
- 对于n类的detection问题,训练n个二分类SVM,对于一个建议区域,会从n个SVM中得到n个分数,取其中最高的作为当前的区域的类别
- 进行bounding box regression来对建议区域进行精修
使用的数据集中,会将图像中实际的物体进行框选,同时含有类别标签,这个区域记为ground-truth
定义 IoU(A,B) =
|A⋂B|/|A⋃B|
|
A
⋂
B
|
/
|
A
⋃
B
|
训练流程:
- pre-train:使用ILVCR 2012的全部数据进行训练,对于一张图片,输出维度为1000的类别标号
- fine-tune: 对于n类的detection问题,首先将pre-train的模型最后一层的1000-way的softmax层改成(n+1)-way(n class + ground)的softmax
使用的数据:由selective search提供,当该建议区域和所有训练数据中标记出的ground-truth(不论属于哪一个类别)的IoU<0.5时记为一个负样本,否则为正样本
最后fine-tune出一个二分类的网络,判断当前的输入的建议区域是否含有有意义的信息,即不是背景
- 对于每一个类训练一个单独的SVM
使用的数据:与此类别ground-truth的IoU<0.3的建议区域在fine-tune之后的网络中FC7的输出记为负样本,相关类别的ground-truth在FC7的输出为正样本 - 对每个类分别进行bounding box regression训练
使用conv5的输出作为训练数据,要求使用的数据来源于与相关类别的真值IoU>0.6的建议区域
在BoundingBox Regression的过程中,不直接对坐标本身建模优化,使用一组四维的变换参数建模来获得一个与尺度无关的变换。
测试过程
- 对于使用的输入图像,使用selective search得到1000-2000个建议区域,缩放或剪裁到固定的大小
- 对于每一个类别独立进行,使用fine-tune之后的网络计算输入在FC7和conv5的输出。FC7的输出送到n个SVM中,选择那些在当前类别对应的SVM中取得最大值的样本,使用其conv5的输出来进行bounding box regression精细化边框
缺点
- 对于每一个建议区域都进行一次特征提取,速度慢
- 非end-end模型,分阶段训练
2.SPP-Net
对样本进行的crop和warp会对图片原本的信息造成一定的损坏
这些操作的目的是为了使得输入的大小一致,对于卷积操作而言,输入的维度没有限制,输出的维度h会随之动态变化,主要的问题来自于卷积操作之后的全连接层要求输入的维度固定
改进1. Spatital Pyramid Pooling
使用空间金字塔池化对尺度不一样的建议区域进行处理,最后得到维度不变的输出,即使输入的图片尺度不一样,使用相对的大小而不是绝对的大小就可以得到维度一样的输出
如上图所示,将图片平均分为4*4,2*2,1*1块,分别进行最大(或者其他)池化,则无论输入的图像维度如何,输出都是
16+4+1=21
16
+
4
+
1
=
21
维
改进2. 全局卷积
对整张图进行一次全局的卷积来提取整张图片的特征,在进行全连接之前,根据卷积的比例关系找到原图中建议区域在新的feature map中的映射位置,对其进行spp再放进FC层,得到的输出输入到SVM得到结果。
缺点:
- 只对全连接层进行fine-tune
- 本身属于多尺度的操作,梯度回传难度很大,所以进行回避,之前的参数都不参加finetune
3. Fast R-CNN
特点:基于SPP-Net进一步改进
改进1. RoI Pooling
SPP的单层特例
改进2. Multi-task loss function
将分类的损失和bounding box regression的损失函数进行合并,使得可以只用一步同时完成分类和选框的修改。
使用Bounding Box Regression的损失也为将位置的偏移损失和分类的损失拉到同一个尺度上而不至于产生过于强的对位置的偏倚。
不同尺度的相同内容图,得到的feature map一样,但是如果直接计算偏移量,就意味着相同的输入有不同的输出,显然不满足函数的定义。
缺点:
- selective search仍然是一个独立的模块
4. Faster R-CNN
特点:在网络中集成区域建议,Fast R-CNN + Region Proposal Network
RPN:
是一种attention机制
两层的CNN网络结构:
输入:conv5的输出
- 第一层
3∗3
3
∗
3
的kernel size, 256个filter
其实是对feature map上的每个position进行遍历,使用周围的一个receptive field来增强模型的鲁棒性。 第二层的第一个分支 1∗1 1 ∗ 1 的kernel size 4∗k 4 ∗ k 的输出 给出K个建议区域的相对于anchor的位置,每个4维的输出都是从anchor box到predicted box的变换。
在loss中使用的是从predicted box到anchor box的变换和从ground truth到anchor box的变换对应的四维参数的smooth L1 loss。
这k组变换系数在整个feature map上进行share。第二层的第二个分支 1∗1 1 ∗ 1 的kernel size 2∗k 2 ∗ k 的输出 给出K个建议区域是否是一个object的二维分值(object score, non-object score)
包含object和不包含的分支此处分别预测,增强鲁棒性。
K值由两个值尺度scale个长宽比ratio决定,若有m个ratio,n个scale,则K =
m∗n
m
∗
n
输入图像的每一个像素都可以是Region的中心,若conv5的输出为
W∗H
W
∗
H
,则Anchor Box参考框的数目为
W∗H∗K
W
∗
H
∗
K
scale invariance:
为了得到scale invariance,经典的方法有使用不同尺寸的输入和filter
本文中对不同的scale和aspect ratio进行遍历可以从某种程度上得到scale invariance
match策略:
- 与任意一个ground truth的IoU最大的anchor被设为positive
- 所有与任意ground truth的IoU大于0.7的anchor设为positive
使用这些配对结果在loss和优化过程中使用。