目标检测1: rcnn流程梳理及边框损失函数loss分析

个人理解,有很多错误,推荐看论文。

1. rcnn 流程梳理及边框损失函数loss分析

论文地址(https://arxiv.org/pdf/1311.2524v3.pdf)

预测图像时:

对于一张图像,使用select search算法得到大约2000个region proposals(候选区域);

resize候选区域为227*227,送入vgg/alexnet网络提取特征(vgg/alexnet使用imagenet分类模型训练,在voc数据(classes=20)上进行微调,采用倒数第二次的全连接输出(4096个特征)作为特征);

对每个候选区域的特征,采用训练好的20个svm(每类都训练一个svm)对进行二分类,只分是该类和不是该类(而不是用softmax直接多分类,文中发现直接用softmax时的mAP比较低),得到是该类的score;

取每个候选区域score最大的作为该类或者采用一定阈值进行过滤,对每个候选区域的框进行nms,过滤掉iou大于设定阈值的候选区域;

训练时:

微调基础网络:利用voc数据微调vgg/alexnet,输出softmax分21类(20类+1类背景);对每张图像提取2000个候选区域,对于每类,groundtruth的box和候选区域之间的iou>0.3的是该类的正样本,其他情况被认为负样本,这样每类的正样本负样本都有了,对每一类都可以训练一个二分类的svm(因此对于voc数据得训练20个2分类的svm);

注意:在微调vgg/alexnet时和训练svm时正负样本的定义是不一样的。微调时正样本为20类物体,没有物体(背景)为负样本;训练集svm时正样本为该类物体,不是该类则为负样本(要注意的是,“不是该类”里面也包括是其他类的物体)。

回归框:

P为所有图像经过select search 后选出2000个候选区域(当然这些图像会被IOU的阈值过滤掉许多)的位置(包括中心Px, 中心Py, 宽度Pw, 高度Ph, 这些位置都是已知的)。G为物体真实的位置(框用Gx, Gy, Gw, Gh表示)。P的位置肯定与真实的G有偏差,所以现在指定了一种学习方法,让P的值通过某种变换更接近真实G。这种变换用dx(P), dy(P), dw(P), dh(P)表示,请注意,理解时把dx(P), dy(P), dw(P), dh(P)分别当作一个整体,看作一种函数的变换。

有了变换函数,就可以根据P的位置预测边框的位置了,使用预测公式如最下面图中的公式(1)(2)(3)(4):(请把dx(P), dy(P), dw(P), dh(P)这些变换函数分别当作一个整体)。Px, Py, Ph, Pw都已知,只要把变换函数训练出来就可以拿来预测边框了,预测的x,y,w,h分别用G^x, G^y, G^w, G^h表示,我们的目标当然是预测的G^x, G^y, G^w, G^h与真实的Gx, Gy, Gw, Gh误差loss越小越好,因此从现在开始就可以写边框的loss函数了。

这里我们可以理解一下一直被当作整体的dx(P), dy(P), dw(P), dh(P)。它们是候选区域P经过alexnet前向传播第5层池化层的输出(φ)与一个矩阵w乘积的结果,这个矩阵w就是要学习的参数。因此从现在开始我们可以把dx(P), dy(P), dw(P), dh(P)分别用wxφ,wyφ, wwφ, whφ 表示了。

根据以上分析,我们就可以写个loss函数了:loss_our = min (G^-G)的平方。其实我们写的这个损失函数本质上和论文中公式(5)是一样的。

我们把公式(1)到公式(4)进行变化:可得

dx(p) = (G^x-Px)/Pw

dy(p) = (G^y-Py)/Ph

dw(p) = log(G^w/Pw)

dh(p) = log(G^h/Ph)

我们把dx(P), dy(P), dw(P), dh(P)分别用wxφ,wyφ, wwφ, whφ 表示。可得

wxφ = (G^x-Px)/Pw

wyφ = (G^y-Py)/Ph

wwφ = log(G^w/Pw)

whφ = log(G^h/Ph)

上面的4个公式wxφ,wyφ, wwφ, whφ的值是根据预测的结果G^x, G^y, G^w, G^h反推计算出来的。而真实的结果是可以通过公式(6)-公式(9)计算出来的,即tx, ty, tw, th。因此,我们目的是让wxφ,wyφ, wwφ, whφ的值和tx, ty, tw, th之间的误差越小越好,因此就又可以写个loss函数了,如公式5所示(公式中的λ是正则化项,目的是让w的值更小使得训练出来的参数更简单)。因此公式5的loss和我们的loss_our本质上是一样的。

有了回归框的loss,我们再使用分类的交叉熵loss,二者相加得到总loss。有了总loss,就可以根据梯度下降进行反向传播训练模型了。

下一篇:faster-rcnn:https://blog.csdn.net/u010397980/article/details/85055840

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章