目標檢測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

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