前言
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,豈不是美滋滋。
怎麼“挪動”
挪動這個詞只是形象的說法。其實就是平移+縮放。
令
令
令
那麼平移我們可以表示爲:
縮放我們可以表示爲:
論文中對那些
這樣我們就得到了變換的一般形式:
最優化變換,也就是迴歸
按照上面的邏輯,每一張圖片都有一個最優的變換:
也就是說,一個d對應着一個t,用i表示一張圖片的序號:
看到這裏就清楚了,如果我們把d換成我們一般問題裏的x,把t換成一般問題 裏的y。現在就是要找一個x→y的關係,使得新來的x經過這個關係的一頓操作之後得到的結果,和最優的結果“差不多”。
需要說明的是,得到d的輸入並不是P這四個數,而是CNN pool5層的features,記爲
換成這裏的邏輯,就是要找到一個權重矩陣
最優一項是一個懲罰項,可能是爲了防止過擬合。這就簡單了,用最小二乘法解就可以了。
這樣的話,如果在test模型的時候,經過一堆CNN和其他的計算,我們得到了一個“暫時最優”的bb。經過我們在訓練時候bbr得到的那個變換