Faster R-CNN 实际上就是由 Fast R-CNN 和 RPN 两个网络结合的,可以使用 end2end 和 alternative 两种方式来训练,两种方法训练出来的网络准确度基本没有多大的区别,但是使用 end2end 训练,即端到端训练可以节省很多时间。这篇文章参考 Ross' Girshick 在 ICCV15 上的演讲报告,主要讲 end2end 方法。
一、alternative 训练
在 Faster RCNN 中论文使用了 alternative optimization 。分为四步进行:
(1)首先训练 RPN。这个网络使用一个 ImageNet 预训练模型来初始化,然后端到端地 fine-tune,来进行区域建议。
(2)第二步,使用第一步 RPN 生成的建议通过 Fast R-CNN 训练另外一个检测网络。这个检测网络同样也使用 ImageNet 预训练模型来初始化。在这一步两个网络还没有共享卷积层。
(3)第三步,使用检测网络来初始化 RPN 训练,完成共享卷积层,且只 fine-tune RPN 特有的层。这一步两个网 络共享卷积层了。
(4)最后,保持共享卷积层, fine-tune Fast R-CNN 的全卷积层。
二、end2end 训练
在 Ross' Girshick 在 ICCV15 上的演讲报告上,介绍了一种近似联合优化,Approx. joint optimization。与论文中 的方法不一样,近似联合优化把 Fast R-CNN 和 RPN 网络写在了同一个网络中去,同时地训练两个网络。这种方法 训练的网络终 mAP 与 alternative 训练的相差无几,但是训练时间花费却大大的缩减了。
(一)训练时间花费
slow R-CNN 和 SPP-net 的训练时间:
- Fine-tuning (backprop, SGD): 18 hours / 16 hours
Feature extraction: 63 hours / 5.5 hours
- Forward pass time (SPP-net helps here)
- Disk I/O is costly (it dominates SPP-net extraction time)
- SVM and bounding-box regressor training: 3 hours / 4 hours
- Total: 84 hours / 25.5 hours
slow R-CNN 训练花费了太多的时间。
Fast R-CNN 训练只有一个阶段,训练网络中所有的层。
(二)端到端训练 Fast R-CNN
在一个网络中有两个 Loss 分支
- Branch 1: softmax classifier
- Branch 2: linear bounding-box regressors
- 全局的 Loss 就是两个 Loss 的和
使用 SGD 来联合 Fine-tune 网络
- 优化两个任务的特征
- 错误后向传播至卷积层