關於RCNN中Bounding-box regression的個人理解

前言

RCNN可以說是深度學習應用到目標檢測領域一個不小的貢獻。最近看了RNN的文章,對裏面的Bounding-box regression迴歸不甚理解,google一番,把學到的東西寫在這裏。
參考的文章

爲啥要回歸

鑑於bounding box太長,下面簡寫爲bb,bounding box regression 簡寫爲bbr

首先,原始的bb是用selective research選出來的,這相當於是外部的算法,硬加到了CNN中。當然,經過一大堆的過濾和NMS(非最大值抑制),我們可以認爲一張圖就得到了一個“暫時最優”的bb。也就是detection暫時的工作結果。
但是,這樣就可以了嗎?以下圖爲例:

這裏寫圖片描述

紅色框是我們預先propose出來的。綠色的框是Ground truce,也就是label,是最優的。這兩個框顯然不太重合。那麼問題來了,如果有一種辦法,能夠讓我們在經過了一大堆CNN計算之後,得到的這個“暫時最優” 的框“挪動” 那麼一下,更接近Ground truce,豈不是美滋滋。

怎麼“挪動”

挪動這個詞只是形象的說法。其實就是平移+縮放

P={Px,Py,Pw,Ph} 表示我們的“暫時最優” 框。x、y表示框中心的座標,w、h表示寬和高。

G={Gx,Gy,Gw,Gh} 表示Ground truth。

G^={G^x,G^y,G^w,G^h} 表示我們 變換後 得到的框。

那麼平移我們可以表示爲:

G^x=Px+Δx
G^y=Py+Δy

縮放我們可以表示爲:

G^w=PwΔw
G^h=PhΔh

論文中對那些Δ 是這樣表示的:

Δx=Pwdx(P)
Δy=Phdy(P)
Δw=edw(P)
Δh=edh(P)

這樣我們就得到了變換的一般形式:

G^x=Px+Pwdx(P)
G^y=Py+Phdy(P)
G^w=Pwedw(P)
G^h=Phedh(P)

最優化變換,也就是迴歸

按照上面的邏輯,每一張圖片都有一個最優的變換

Gx=Px+Pwtx(P)
Gy=Py+Phty(P)
Gw=Pwetw(P)
Gh=Pheth(P)

也就是說,一個d對應着一個t,用i表示一張圖片的序號:

diti

看到這裏就清楚了,如果我們把d換成我們一般問題裏的x,把t換成一般問題 裏的y。現在就是要找一個x→y的關係,使得新來的x經過這個關係的一頓操作之後得到的結果,和最優的結果“差不多”。

需要說明的是,得到d的輸入並不是P這四個數,而是CNN pool5層的features,記爲Φ5 。這樣,纔不是“硬”擬合,如果只是輸入P代表的四個數的話,那就是一個CNN外部的統計問題了,CNN在這個bbr裏面一點作用也沒起到,但是仔細想的話,bb的位置確實應該由CNN計算得到的features來fine-tune。所以,我們定義一個權重矩陣 wi 來表示這個關係:

di=wTiΦ5i

換成這裏的邏輯,就是要找到一個權重矩陣w ,使得下面的loss最小:

loss=iN(tiwTiΦ5i)2+λ||wi||2

最優一項是一個懲罰項,可能是爲了防止過擬合。這就簡單了,用最小二乘法解就可以了。

這樣的話,如果在test模型的時候,經過一堆CNN和其他的計算,我們得到了一個“暫時最優”的bb。經過我們在訓練時候bbr得到的那個變換w ,對pool5得到的feature操作一下,就得到了一個變換d,再用這個d對我們測試用圖propose出來的那個bb操作一下,就將bb“優化”了。而論文中的數據顯示,bbr確實是有用的。

發佈了34 篇原創文章 · 獲贊 50 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章