今天我们主要看下Faster RCNN算法的损失函数以及如何训练?
从上一期Faster RCNN的算法原理上,我们知道Faster RCNN算法有两部分,一个是用来提取候选框的RPN网络,一个是最后检测目标的分类回归网络。通过学习,我们知道RPN网络在提取候选框的时候有两个任务,一个是判断该anchor产生的候选框是否是目标的二分类任务,另一个是对该候选框进行边框回归的回归任务。
而Faster RCNN最后的目标检测网络同样也有两个任务,跟RPN网络类似,一个是判断RPN网络产生的候选框框住的物体是具体哪一类物体的分类任务,另一个是对该候选框进行回归的回归任务。
既然两个网络都是多任务网络,那么,我们先看看RPN网络的损失函数是怎么样的?先上RPN网络的总体损失函数,接下来分析,如下(公式可左右滑动):
上面损失函数可以明显的分成两部分,+号左边为分类的损失值,右边为回归的损失值。逐个看,先考虑分类的loss。


这个Faster RCNN模型的训练有些复杂,我们还是先把上期的这个算法流程图贴上,有助于下面训练流程的理解,如下:

从上图,我们可以看出,整个算法的两个网络(RPN和最终的分类回归网络)共用同一个卷积网络。那么该如何才能达到共用呢?这里分四步来训练:
ImageNet模型初始化,先独立训练一个RPN网络;ImageNet模型初始化,但是使用上一步训练好的RPN网络产生的候选框作为输入,训练一个Fast-RCNN网络;Fast-RCNN网络模型重新初始化RPN网络,但是不更新Fast-RCNN网络模型的共享卷积层,只更新RPN网络的特有层;2步的Fast-RCNN网络模型重新初始化,但是不更新Fast-RCNN网络模型的共享卷积层,使用第3步新的RPN网络重新产生候选框做输入,训练一个Fast-RCNN网络。以此达到RPN网络和最终的检测网络共享卷积层。相当于是先用一个ImageNet模型初始化训练,然后再用训练好的模型去微调两个网络。至此,我们已经了解了Faster RCNN的损失函数和训练过程。下期我们将继续学习常见的目标检测模型SSD算法。