SSD Detection 錨框生成

SSD Detection的錨框生成

[default bbox] 輸入feature map大小爲 h*w,設錨框大小s∈(0,1],寬高比爲r (r>0), 那麼錨框的寬和高分別可以表示爲 ws\sqrt{}r 和 hs/ \sqrt{}r 。當中心位置給定時,已知寬高的錨框則是確定的。

 

假設我們設定一組大小爲s_{1},…,_{}s_{n}, 和一組寬高比爲r_{1},…,r_{m}。如果以每個像素爲中心時,使用所有的大小與寬高比的組合,輸入圖像將一共得到whnm個錨框。雖然這些錨框可能覆蓋了所有的真實邊界框,但計算複雜度容易過高。因此,我們通常只對包含s_{1}r_{1}的大小與寬高比的組合感興趣,即

(s_{1},r_{1}),(s_{1},r_{2}),…,(s_{1},r_{m}),(s_{2},r_{1}),(s_{3},r_{1}),…,(s_{n},r_{1}).

也就是說,以相同像素爲中心的錨框的數量爲n+m−1。對於整個輸入圖像,我們將一共生成wh(n+m−1)個錨框。

 

訓練過程中,生成的錨框如何匹配gt bbox

假設圖像中錨框分別爲A_{1}A_{2},,,,,,,,, A_{n_{a}},真實邊界框分別爲B_{1}B_{2},,,,,,,,,,B_{n_{b}}n_{a}n_{b}。定義矩陣\subset \mathbb{R}^{^{^{n_{a}\times n_{b}}}}其中第i⾏第j列的元素x_{ij}爲錨框A_{i}與真實邊界框B_{i}的交併⽐。

⾸先,我們找出矩陣X中最⼤元素,並將該元素的⾏索引與列索引分別記爲i_{1},j_{1}。我們爲錨框A_{i_{1}}分配真實邊界框B_{j_{1}}。顯然,錨框A_{i_{1}}和真實邊界框B_{j_{1}}在所有的“錨框—真實邊界框”的配對中相似度最⾼。

接下來,將矩陣X中第i_{1}⾏和第j_{1}列上的所有元素丟棄。找出矩陣X中剩餘的最⼤元素,並將該元素的⾏索引與列索引分別記爲i_{2}j_{2}。我們爲錨框A_{i_{2}}分配真實邊界框B_{j_{2}},再將矩陣X中第i_{2}⾏和第j_{2}列上的所有元素丟棄。此時矩陣X中已有兩⾏兩列的元素被丟棄。依此類推,直到矩陣X中所有n_{b}列元素全部被丟棄。這個時候,我們已爲n_{b}個錨框各分配了⼀個真實邊界框。

接下來,我們只遍歷剩餘的n_{a}n_{b}個錨框:給定其中的錨框A_{i},根據矩陣X的第i⾏找到與A_{i}交併⽐最⼤的真實邊界框B_{j},且只有當該交併⽐⼤於預先設定的閾值時,才爲錨框A_{i}分配真實邊界框B_{j}

 

訓練過程中,錨框和匹配的gt bbox如何計算偏移量

如果⼀個錨框A被分配了真實邊界框B,將錨框A的類別設爲B的類別,並根據B和A的中⼼座標的相對位置以及兩個框的相對⼤小爲錨框A標註偏移量。由於數據集中各個框的位置和⼤小各異,因此這些相對位置和相對⼤小通常需要⼀些特殊變換,才能使偏移量的分佈更均勻從而更容易擬合。設錨框A及其被分配的真實邊界框B的中⼼座標分別爲(x_{a}, y_{a})和(x_{b}, y_{b}), A和B的寬分別爲w_{a}w_{b},⾼分別爲h_{a}h_{b},⼀個常⽤的技巧是將A的偏移量標註爲

其中常數的默認值爲\mu _{x} = \mu _{y} = \mu _{w} = \mu _{h} = 0; \sigma _{x} = \sigma _{y} = 0.1; \sigma _{w} = \sigma _{h} = 0.2。如果⼀個錨框沒有被分配真實邊界框,我們只需將該錨框的類別設爲背景。類別爲背景的錨框通常被稱爲負類錨框,其餘則被稱爲正類錨框。

詳情

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