1.4.2 Faster R-CNN的训练
由于RPN使用Fast R-CNN的网络模型可以更好地提取候选区域,而Fast R-CNN可以使用RPN生成的候选区域进行目标检测,两者相辅相成。Faster R-CNN尝试了多种模型训练策略,并最终采用了交替训练(alternating training)。
交替训练可以分成4个步骤:
(1)使用无监督学习即ImageNet的训练结果初始化网络训练RPN;
(2)使用RPN生成的候选区域训练Fast R-CNN,Fast R-CNN和RPN使用的是两个不同的输出层,也是通过ImageNet任务进行初始化;
(3)使用Fast R-CNN初始化RPN,但是共享的卷积层固定,只调整RPN独有的网络层;
(4)固定共享的卷积层,训练Fast R-CNN。
前面指出,RPN的输出是候选区域的坐标以及它们的置信度得分,所以通过RPN生成候选区域的步骤如下:
(1)所有在图像内部的锚点均输入训练好的网络模型,得到样本得分和预测坐标;
(2)使用NMS根据得分过滤锚点,NMS的IoU阈值固定为0.7,之后生成的便是候选区域。
从Faster R-CNN的开源代码中可以看出,它使用的是近似联合训练(approximate joint training),即将RPN和Fast R-CNN的损失函数简单地加在一起,作为一个多任务的损失函数进行学习。Faster R-CNN论文中也指出,这种方法忽略了“Fast R-CNN将RPN的输出作为其输入”这一事实。实际上,Faster R-CNN的RPN和Fast R-CNN并不是并行的多任务的关系,而是串行级联的关系。图1.17说明了并行多任务和串行级联的区别。在实际应用中,并行训练和串行训练的差距其实不是很明显,但是并行训练的方式需要的人为干预更少且效率更高,因此后面得到了更广泛的使用。
图1.17 并行多任务和串行级联的区别
Faster R-CNN的检测流程在使用RPN生成候选区域后,剩下的便和Fast R-CNN一样了。这里不赘述。