Paper地址:R-CNN
一、Object Detection With R-CNN
目标检测有两大任务:一个是确定object的类别,另一个是确定object的位置
基本流程如下:
1.给出一张图片,利用selective search生成约2000个region proposals
2.将proposal resize到固定大小,然后输入到CNN,提取每个proposal 固定长度 (4096维)的特征向量。
3.将提取的特征输入到FC层,利用SVM对该proposal进行打分、分类。SVM权重(4096,C)
4.针对每一个类别:
(1)对每个region的score进行排序,设一个阈值,将score低于阈值的region去掉。
(2)使用NMS(非极大值抑制):选取得分最大的region,计算其与其他region的IoU,如果IoU大于给定阈值,则去掉其他region。然后在剩下的region中,选择得分次大值,重复之前的流程。最后剩下的基本就是包含object的bbox了。
5.对于判断为本类的候选框,且与GT的IoU大于0.6的。利用回归模型对bbox进行位置精修(位置精修内容较多,放后面)
6.这样,类别和位置都得到了
由于在目标检测上,标注的数据少,因此本文:
首先在ImageNet数据集上进行有监督预训练
然后在object detection这一特定领域的数据集PASCAL上进行fine-tuning。
二、位置精修
利用回归模型对bbox的位置进行精细修改,回归模型如下:
P(Px,Py,Pw,Ph)表示region proposal的位置
G(Gx,Gy,Gw,Gh)表示GT的位置
通过如下公式修正proposal的位置
其中:
d§是proposal的pool5 feature的线性函数。公式中的fi5§则是pool5的4096维feature。
此时,我们需要优化W。(正则项lambda=10000)
其中,
-------------------------------总结位置精修过程----------------------------------------------------
位置精修也就是网络的regression部分。
**输入:**经过flatten操作得到的4096维特征向量
**输出:**预测的位置偏移量(object相对于proposal的位置偏移量)
我们的W*fi5(特征向量)可以预测出object相对与proposal的位置偏移,然后利用标准的真实[tx,ty,tw,th],可以计算出loss,然后optimize,得到最优的W。训练过程结束。
测试阶段: 利用优化好的W*fi5,得到预测的位置偏移量,然后用这个偏移量修正proposal的位置。
---------------------------------------------总结结束-------------------------------------------------------------------
三、训练
训练的目的:得到最优的参数
预训练完成后,将N+1维的layer替换1000维的layer。然后将与GT的IoU >= 0.5 的bbox作为正样本,其余作为负样本。每次SGD迭代时,使用32个正样本box(对所有类)和96个背景box,构建128个样本的mini-batch。
在训练SVM分类器这边:将每类的GT作为正样本,IoU小于0.3的作为负样本。
PS:作者发现cnn softmax分类器的结果比SVM分类器的结果低。 SVM适用于少样本训练,0.3是实验得到的最佳阈值。
四、参考文献
1.https://wenku.baidu.com/view/cb977f29f68a6529647d27284b73f242336c31df.html
2.http://blog.youkuaiyun.com/App_12062011/article/details/67632620