Faster Rcnn 源码记录

RBG大神的论文中采用alternative training,即rpn网络和fastrcnn网络交替训练,共有4个步骤
(1)训练rpn网络(max_iters=80000)
(2)用rpn网络生成的proposals作为输入训练fastrcnn,fastrcnn和rpn前面的卷积部分是共享权值的(max_iters=40000)
(3)继续训练rpn网络(max_iters=80000)
(4)用rpn网络生成的proposals作为输入训练fastrcnn,fastrcnn和rpn前面的卷积部分是共享权值的(max_iters=40000)
max_iters是最大训练次数,训练文件在py-faster-rcnn-master\tools\train_faster_rcnn_alt_opt

rpn训练的时候一个batch只有一张图片,生成的anchors大概为9*60*40,60*40是最后的feature map的大小,feature map中每一个位置对应9个anchors所以一共9*60*40个anchors,anchors的scale分为128*128,256*256,512*512,ratio为1:1,1:2,2:1,anchors和任何一个gt_boxes的IOU大于0.7或者IOU是最大的都视为正样本,IOU小于0.3的为负样本,其他的丢掉,由于scale比较大所以个人认为对于小目标的检测不鲁棒,在训练的时候会把超过边框的anchors删除掉(个人认为如果不删除越过边框的anchors会增加很多负样本影响最终结果),这里anchors会降到大约6K个,此外很多anchors都有很大的重叠区域,这里会用NMS(non-maxmimum suppression)也就是非极大抑制进一步减少anchors数量(具体代码没怎么看,猜测是重叠面积大于0.7的删除掉),最后保留下来的anchors大约为2000,测试的时候经过NMS后保留300。

rpn训练时batch是256,所以在标记labels的时候只有256个是0或者1,即背景和前景,其他都是-1,-1代表丢弃,anchors一共60*40*9个,按照IOU大于0.7为正,小于0.3大于0.1为负,其他都标-1,再把越过图片边界的标为-1,最后在通过NMS继续减少到2000,因为fastrcnn的batch是2,每张64个rois,这64个rois中的25%为前景,即每张图片最多16个前景,如果满足条件的rois不足则以小的记,测试的时候越过图片边界的不会丢弃而是把图片内的部分裁剪下来,丢弃图片外的部分,再通过NMS降到300

fastrcnn训练时每个batch2张图片,每张64个,一共128个rois,fastrcnn训练的rois来自rpn网络的输出,fastrcnn的标记labels的时候按照IOU大于0.5的为正,小于0.5大于0.1的为负(为什么不用0.7?不用0.7可能是为了增加recall,数据也会多一些,应该是用0.7的时候mAP是小于0.5的mAP也就是换为0.5增加的recall是大于损失的precision,这里mAP是每一类AP的均值,AP是pr曲线下的面积)

BBox回归要做归一化和转换,bbox回归预测的是gtboxes相对于rois的offset,代码如下:

    targets_dx = (gt_ctr_x - ex_ctr_x) / ex_widths
    targets_dy = (gt_ctr_y - ex_ctr_y) / ex_heights
    targets_dw = np.log(gt_widths / ex_widths)
    targets_dh = np.log(gt_heights / ex_heights)

转换完成后还要做归一化,详细代码见/lib/fast_rcnn/bbox_transform.py

rpn训练时每个batch一张img,训练时依次从训练集中取出一张img,取完一遍后洗一次数据,
fastrcnn和rpn相同,不过每个batch为2张img

NMS计算过程:按分数降序排序所有anchors,无条件保留置信度最高的anchors然后计算这个anchors和其他所有anchors的overlaps,保留overlaps小于threshold的anchors,因为大于threshold的anchors和当前置信度最高的anchors很有可能预测的是同一个object,而对于同一个object的预测我们只需要保留置信度最高的anchors即可(训练的时候threshold可以取的比较大,例如0,7,这时候对于同一个object的预测可能会保留下几个anchors,这样增加了模型的鲁棒性,而在预测的时候threshold取的可以比较小,例如0.3,这样会去掉更多的anchors减少整个运行时间),对于保留下来的anchors继续上述步骤

IoU计算:这里写图片描述如图设boxA和boxB的面积分别a和b,它们相交的部分面积为c,IoU(boxA, boxB) = c/(a+b-2c)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值