Faster RCNN

  • 来记一下 Faster RCNN 吧…… 免得没看多少又忘光了

主要解决什么问题

目标检测之前都在用 selective search,实在是太慢了。

解决的思路

这篇工作搞了个 Region Proposal Network,把生成 proposal 的工作交给 GPU,可以加速

20190214220216.png

无处不在的 Attention……

核心知识点

RPN

20190214231238.png

用一个 3x3 的滑动窗口去处理 feature,然后把它送进一个 box-regression 和一个 box-classification 网络(都是全连接的)。
cls 和 reg 网络实际上用的是 1x1 卷积。

在滑动的过程中,每一点上,造九个 box 出来(3种大小 x 3种尺寸)。

不能训练左右的 anchor,否则由于负样本过多可能模型对正样本不是那么敏感。

新的层用标准差为 0.01 的高斯分布初始化,之前的其它层用 imagenet 上的分类网络 pretrain

训练方式

想要共享 RPN 和 Fast RCNN 之间的 feature

Alternating:先 RPN,再用 proposal 去训练 Fast RCNN。得到的网络再去初始化 RPN。迭代地来

Approximate Joint:一起训练,每一轮 SGD 里,先得到proposal,然后假装它是固定的,来训练 Fast RCNN。

作者表示这种做法忽视了 RPN 网络生成的bounding box 的坐标的梯度(后面直接用了,梯度没有传播),因此只是近似的方法

Non-Approximate Joint:

需要一个 RoI warping 层来解决上面梯度的问题。。感觉意思是搞了个梯度不会丢失的 ROI pooling 层?

4-Step Alternating:

  1. 先训 RPN(用 ImageNet 上 pretrain的 model,在一个 region proposal task 上面 fine-tune)
  2. 用 Fast RCNN 训练一个独立的 detection 网络(利用上一步得到的 proposal)。注:这个也是 ImageNet pretrain,这一步之后两个网络还没有共享卷积层。
  3. 用 detector network 来初始化 RPN 的训练,但是固定住共享的卷积层的权重,只 fine-tune RPN 中独立的层。(现在这两个网络有共享的卷积层了。
  4. 最后继续固定那几个层的权重,fine-tune 只在 Fast-RCNN 里的层。

nms

non-maximum suppression,用来消灭重复的 porposal regions(根据 cls 分数来评定)。paper 里写的 IoU threshold 竟然是 0.7……

存在的问题

改进(?)

other comment

http://closure11.com/rcnn-fast-rcnn-faster-rcnn%E7%9A%84%E4%B8%80%E4%BA%9B%E4%BA%8B/