Fast-R-CNN、Faster-R-CNN阅读笔记

  • Fast-R-CNN
    • loss由两部分组成,分类loss是预测的分类向量p在真实类别u上的值的log loss, 回归loss是当真实类别非背景时真实的bbox和预测的bbox的(x, y, h, w)的loss,当真实类别为背景时不计算bbox的loss,即为0,注意这里的xywh并不是bbox的左上角xy和长宽hw,而是对ROI的大小和位置的调整,λ文中设为1
  • Faster-R-CNN
    • Faster-R-CNN其实就是RPN+Fast-R-CNN,前提是你把FastRCNN仅当作detector而将其于前面Region Proposal的部分分开的话。Fast-RCNN不是unified的,因为需要selective search作为网络前面的处理部分,而Faster-R-CNN就是完全unified的,以图片为输入,以分类结果和bbox为输出的end2end网络
    • 具有平移不变性(translation-invariant)
    • RPN部分和fastrcnn部分是分开训练的
      • RPN的loss function是这样的,RPN是一个二分类detection,有物体和没有物体(背景),而不管物体是什么类别,anchor只要满足两种情况之一
        • 在输出的所有proposal中,与label的某个proposal有最高的IOU值
        • 与proposal的IOU值大于0.7
      • 标签即为正例,而不满足以上条件且与proposal的iou值小于0.3为负例
      • 不满足正例和负例的anchor,对loss没有贡献,被抛弃 
      • loss是这样的
      • 其中pi是输出的分类概率,0为no-object,1为object,ti是输出的bbox的参量,i表示第i个anchor
        • Lcls(pi,pi*)采取的是FastRCNN中的loss
        • Lreg采取下列形式:

          其中     x     x_a     x*    分别表示预测结果的x, anchor的x, groundtruth的x,即目标是希望对anchor的proposal的修正能尽量精确
      • 每个anchor对应了k个不同scale和ratio的bbox,也就对应了k个regressor,这k个regressor是不共享参数的,但是用于这k个regressor的feature是从同一个featrue map上框出来的一样大小的sub feature map 
      • 训练过程中,anchor只取positive或negative的,但是不是全都取,因为negative(背景)anchor明显比较多,所以只随机sample256个anchor且尽量取128个positive的,如果positive的不足128个,就取全部的positive,剩下的用negative来填
      • 权重初始化为0均值0.01方差的高斯分布
      • 总的来说RPN网络先在每个像素点都设置k个anchor(也可以说1个anchor,k个region),然后送入二分类器和regressor,但是计算loss的时候只选择其中一部分来计算loss
    • RPN和fastRCNN的训练组合方式有三种:

      文章采取的是第一种,所以后两种就不说了:
    • 由于FastRCNN和RPN是共享最前面得到feature map 的convolution,所以这一层的训练是最难的,采取这样的策略:
      • 先train  RPN,这时这一层用pretrained 的 vgg 来初始化并且在训练RPN 的过程中也fine-tune它
      • 然后train fast-RCNN,这时这一层依然是用pretrained 的vgg来初始化并且fine-tune,而使用RPN去掉这一层的剩下部分来对feature map 提取proposal,而且RPN的参数是fixed的
      • 第三步,拿fast-RCNN fine-tune的vgg层来给RPN使用并fix,而train RPN后面的参数
      • 最后,第二步和第三步train得的FastRCNN和RPN就是共享最前面feature extraction层的unified的了,直接组合起来就行了
      • 最后,上述步骤可以iter地重复,但是论文说实验发现iter并没有太大的性能提高
    • training中anchor boxes超出边界的抛弃
      testing中anchor boxes超出边界的clip
      重叠的用阈值为0.7的NMS来筛除
      最后一张1000*600的图片大概产生2000个anchor,而FastRCNN只取其中topN个
    • 关于RPN的其它细节,以下blog讲得很详细:
      https://blog.csdn.net/JNingWei/article/details/78847696
    • ROIpooling对小物体的检测可能出现偏差,可更换为ROI Align:
      关于ROI Align的详解这篇blog讲得还不错:https://blog.csdn.net/bruce_0712/article/details/80287385
      关于ROI pooling 的详解也在这篇blog里有
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值