R-CNN笔记

参考文章:https://blog.csdn.net/WoPawn/article/details/52133338
文章写得非常详细,但是对R-CNN训练过程的样本标签部分写得不够清楚,于是阅读R-CNN项目源码,并记录笔记。

R-CNN源码地址:https://github.com/Liu-Yicheng/R-CNN

一、训练SVM的过程
1)假设数据集有两类花,A和B,对于每一类花训练一个SVM,也就是有一个属于A类的SVM和一个属于B类的SVM,A类的SVM的功能为:判断输入图像是否为花A,如果是,输出1,否则输出0。B类的SVM同理;

2)以训练花A的SVM为例子,对于花A数据集的每一张图像,使用selectivesearch算法提取图像的候选框;

3)A类花的SVM的输入数据是这样的:对于某张图像的每一个候选框(也就是该图像的一个区域,本质上还是图像),将它的大小resize为224×224,然后输入到AlexNet(训练好的),取fc7层的4096维向量作为SVM的输入向量;

4)A类花的SVM的标签数据是这样的:对于某张图像的每一个候选框,计算它和ground-truth(真实框)的IOU,如果IOU>0.3,则该候选框的标签为1(也就是认为这个候选框包含了花A),否则,该候选框的标签为0(也就是认为这个候选框不包含花A,为背景);

5)所以SVM的训练集的格式是这样的(候选框1的4096维特征向量,1),(候选框2的4096维特征向量,0或0)

二、训练边框回归的过程
1)按照源码的说法,只训练一个边框回归器;

2)边框回归器的输入:对所有种类的所有图像(A类花的所有图像和B类花的所有图像),使用selectivesearch算法提取每一张图像的候选框,同时记录该候选框的(x,y,w,h),(x,y)为框的中心坐标,对于每个框,输入到CNN提取它的4096维特征向量作为边框回归器的输入;

3)边框回归器的标签:贴一段源码

label = np.zeros(5)
label[1:5] = [(gx - px) / pw, (gy - py) / ph, np.log(gw / pw), np.log(gh / ph)]
if iou_val < self.reg_threshold:
	label[0] = 0
else:
    label[0] = 1

其中,gx、gy、gw、gh为真实框的中心宽高,px、py、pw、ph为该候选框的中心宽高

标签这样设置的解释:
px、py、pw、ph是通过selectivesearch算法得到的候选框,这个框的位置可能不够精确,因此我们需要通过一个变换进行调整:
在这里插入图片描述
其中,G’表示变换后的位置,那么最理想的情况就应该是调整后的候选框和真实框重合,也就是:
在这里插入图片描述
将这个等式带入上面的变换式子,得到最理想的变换应该为:
在这里插入图片描述
所以我们的标签设置为上面的那种形式,也就是我们训练这个回归器来让我们的变换更加接近理想的变换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值