SSD Detection的錨框生成
[default bbox] 輸入feature map大小爲 h*w,設錨框大小s∈(0,1],寬高比爲r (r>0), 那麼錨框的寬和高分別可以表示爲 wsr 和 hs/ r 。當中心位置給定時,已知寬高的錨框則是確定的。
假設我們設定一組大小爲,…,, 和一組寬高比爲,…,。如果以每個像素爲中心時,使用所有的大小與寬高比的組合,輸入圖像將一共得到whnm個錨框。雖然這些錨框可能覆蓋了所有的真實邊界框,但計算複雜度容易過高。因此,我們通常只對包含或的大小與寬高比的組合感興趣,即
(,),(,),…,(,),(,),(,),…,(,).
也就是說,以相同像素爲中心的錨框的數量爲n+m−1。對於整個輸入圖像,我們將一共生成wh(n+m−1)個錨框。
訓練過程中,生成的錨框如何匹配gt bbox
假設圖像中錨框分別爲,,,,,,,,,, ,真實邊界框分別爲,,,,,,,,,,,且 ≥ 。定義矩陣X ,其中第i⾏第j列的元素爲錨框與真實邊界框的交併⽐。
⾸先,我們找出矩陣X中最⼤元素,並將該元素的⾏索引與列索引分別記爲,。我們爲錨框分配真實邊界框。顯然,錨框和真實邊界框在所有的“錨框—真實邊界框”的配對中相似度最⾼。
接下來,將矩陣X中第⾏和第列上的所有元素丟棄。找出矩陣X中剩餘的最⼤元素,並將該元素的⾏索引與列索引分別記爲, 。我們爲錨框分配真實邊界框,再將矩陣X中第⾏和第列上的所有元素丟棄。此時矩陣X中已有兩⾏兩列的元素被丟棄。依此類推,直到矩陣X中所有列元素全部被丟棄。這個時候,我們已爲個錨框各分配了⼀個真實邊界框。
接下來,我們只遍歷剩餘的 − 個錨框:給定其中的錨框,根據矩陣X的第i⾏找到與交併⽐最⼤的真實邊界框,且只有當該交併⽐⼤於預先設定的閾值時,才爲錨框分配真實邊界框。
訓練過程中,錨框和匹配的gt bbox如何計算偏移量
如果⼀個錨框A被分配了真實邊界框B,將錨框A的類別設爲B的類別,並根據B和A的中⼼座標的相對位置以及兩個框的相對⼤小爲錨框A標註偏移量。由於數據集中各個框的位置和⼤小各異,因此這些相對位置和相對⼤小通常需要⼀些特殊變換,才能使偏移量的分佈更均勻從而更容易擬合。設錨框A及其被分配的真實邊界框B的中⼼座標分別爲(, )和(, ), A和B的寬分別爲和,⾼分別爲和,⼀個常⽤的技巧是將A的偏移量標註爲
其中常數的默認值爲 = = = = 0; = = 0.1; = = 0.2。如果⼀個錨框沒有被分配真實邊界框,我們只需將該錨框的類別設爲背景。類別爲背景的錨框通常被稱爲負類錨框,其餘則被稱爲正類錨框。