❝前面我们学习了
❞Faster RCNN
的原理流程,特别是RPN
网络的原理,详情如下:
目标检测算法Faster RCNN详解
目标检测算法Fast RCNN详解
目标检测算法SPP-Net详解
目标检测算法R-CNN详解
今天我们主要看下Faster RCNN
算法的损失函数以及如何训练?
从上一期Faster RCNN
的算法原理上,我们知道Faster RCNN
算法有两部分,一个是用来提取候选框的RPN
网络,一个是最后检测目标的分类回归网络。通过学习,我们知道RPN
网络在提取候选框的时候有两个任务,一个是判断该anchor
产生的候选框是否是目标的二分类任务,另一个是对该候选框进行边框回归的回归任务。
而Faster RCNN
最后的目标检测网络同样也有两个任务,跟RPN
网络类似,一个是判断RPN
网络产生的候选框框住的物体是具体哪一类物体的分类任务,另一个是对该候选框进行回归的回归任务。
既然两个网络都是多任务网络,那么,我们先看看RPN
网络的损失函数是怎么样的?先上RPN
网络的总体损失函数,接下来分析,如下(公式可左右滑动):
上面损失函数可以明显的分成两部分,+
号左边为分类的损失值,右边为回归的损失值。逐个看,先考虑分类的loss
。
上式中 为anchor
预测为目标的概率, 为ground truth
,如下:
如果anchor
为正,则ground truth
标签 为1
,否则为0
。
而分类的loss
函数为交叉熵,如下:
当 为0
时:
当 为1
时:
其中 为mini-batch
大小。熟悉机器学习损失函数的,这点还是很好理解的,不熟悉的可在【智能算法】公众号回复【机器学习】进行学习。接下来,我们看下回归部分的损失。
上面总的损失函数中 表示bounding box
的4
个参数, 是与positive anchor
对应的ground truth
的4个坐标参数,当 为0
时,回归的loss
为0
,当 为1
时,才需要考虑回归的loss
。
损失函数中的 如下:
其中R
为
是回归loss
的权重,例如 , 为anchor
位置的数量,这里大约为40*60=240
。
而 计算如下:
其中 是预测框中心的坐标和宽高, 为anchor box
中心的坐标和宽高。
其中 是真实标注框中心坐标和宽高。
到这里可能会有些迷糊了,有 ,又有 ,还有 ,这里简单说下,这三个框框啥意思,首先 是RPN
网络预测出来框框, 是anchor
产生的候选框,而 这个是物体真实标注的框框。损失函数的目的就是让R=0
,也就是 ,那么也就是说尽量让,即达到预测框跟真实标注重合。
而算法最后的分类回归网络的损失函数则和RPN
的损失函数很是相似,输出层分类的loss
为softmax
交叉熵,回归的loss
跟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
算法。