Object detection(4): Faster R-CNN
主要贡献
- 提出 RPN 网络, 将region proposal 和目标检测统一到一个卷积网络中
- anchor 的使用
网络结构
faster rcnn 检测流程如上图所示:
- 图像经过卷积层提取 feature maps
- 然后在RPN中为特征图上的每个位置使用 sliding window
- 对于 feature map 上的每一个位置, 使用 k 个不同长宽比的 anchor box 生成region proposal
- 得到 region proposal 后, 之后的流程与 fast rcnn 一样 fast rcnn笔记.
Region Proposal Networks
RPN 网络接受任意尺寸的图像输入, 输出一系列矩形 object proposals 以及每个 proposal 是否包含物体的 score.
为了生成region proposal, 使用空间大小为 n * n 的小网络在最后一层卷积层得到的feature maps 上滑动, 每次将得到的 n * n * channel 的特征送入并列的两个fc, 分别完成 物体/背景 分类, 与bounding box 回归. sliding window 以 n * n 卷积实现.
anchors
如上图所示, 在每一个 sliding window 的位置, 同时预测多个 region proposal, 因为同一个位置可能包含多个不同长宽比的物体. 假设每个 location 预测 $k$ 个proposal, 那么回归层输出 $4k$ 个坐标, 分类层输出 $2k$ 个 score. 论文中使用了3个尺度和长宽比, 可得到 9 个 anchor.
loss function
训练 rpn 时, 对于每一个 anchor, 分配一个二值类别标签. 正例: (1) anchor / anchors 与 GT 具有最大的IOU. (2) anchor 与任意的 GT IOU 大于0.7. 负例: anchor 与所有GT的IOU都小于0.3. 其余的anchor不作标记, 不计入损失.
$$L({p_i},{t_i})=\frac{1}{N _{cls}} \sum _i L _{cls} (p_i, p _i ^*) + \lambda \frac{1}{N _{reg}} \sum _i p_i ^ * L _{reg} (t_i, t _i ^*)$$
第一项分类损失(是否存在对象). 第二项是仅当存在对象(即$p_i ^* = 1$)时边界框的回归损失.
因此,RPN网络将预先检查包含对象的位置, 相应的位置和bounding box 将传递到检测网络, 以检测对象类别并返回该对象最终的bounding box. 同时, RPN 得到的 proposals 会存在冗余, 会先使用 NMS减少到N(300)个.
4-Step Alternating Training
由于 faster rcnn 中 RPN 与坚持检查网络共享卷积层. 因此需要将其进行联合训练.
- 训练 RPN 网络. 该网络使用ImageNet预先训练的模型进行初始化,并针对 region proposal 任务进行端到端微调
- 使用上一步生成的region proposals 单独训练fast rcnn. 该检测网络也由ImageNet预训练模型初始化. 此时, 两个网络不共享卷积层
- 使用检测器网络初始化RPN训练, 但是固定了共享卷积层, 仅微调了RPN拥有的层. 现在, 这两个网络共享卷积层
- 保持共享卷积层固定不变, 对Fast R-CNN的独有的层进行微调. 至此, 两个网络共享相同的卷积层并形成统一的网络.
- 可继续交替训练多次, 论文中说继续训练没有带来很明显的提升