今天我们主要看下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
算法。