本文來自公眾號“AI大道理”
解碼就是將預測得到的調整參數應用於先驗框,從而得到預測框。
YOLOv3借鑒RPN網絡使用anchor boxes來預測邊界框相對先驗框的offsets。
YOLOv3預測邊界框中心點相對於對應cell左上角位置的相對偏移值,使用sigmoid函數處理偏移值,這樣預測的偏移值在(0,1)范圍內(每個cell的尺度看做1),把邊界框中心點約束在當前cell中。
根據邊界框預測的4個offsetstx,ty,tw,th,可以按如下公式計算出邊界框實際位置和大小:
(cx,xy)為cell的左上角坐標,在計算時每個cell的尺度為1,所以當前cell的左上角坐標為((1,1)。
由於sigmoid函數的處理,邊界框的中心位置會約束在當前cell內部,防止偏移過多。
而pw和ph是先驗框的寬度與長度,它們的值也是相對於特征圖大小的,在特征圖中每個cell的長和寬均為1。
這里記特征圖的大小為(W,H),可以將邊界框相對於整張圖片的位置和大小計算出來(4個值均在0和1之間)
將上面的4個值分別乘以圖片的寬度和長度(像素點值)就可以得到邊界框的最終位置和大小了,這就是YOLOv3邊界框的解碼原理。
(1)生成先驗框
以13*13這個特征層為例,一共有13*13個網格,每個網格有3個先驗框。
生成的先驗框的中心是網格的左上角。
先驗框的寬高可以自己設定或者通過K-means聚類得到。
(2)縮放先驗框
解碼是在特征層上進行的,所以需要縮放先驗框至特征層大小的比例,計算出先驗框在特征層上對應的框高。
(3)調整先驗框
解碼每次只能對一個特征層進行解碼,因此需要進行3次循環解碼。
yolov3網絡的預測結果得到一維的參數,這些參數包含了寬高的調整參數、中心的調整參數、置信度、類別概率等。
先驗框的中心位置的調整參數,sigmoid使得每個物體由左上角的網格點進行預測,因為0-1的話中心只能往右下角偏移。
得到這些調整參數利用解碼原理中的公式作用到先驗框,對先驗框進行調整,獲得最終的預測框。
(4)得到預測框
此時獲得的scaled_anchors大小是相對於特征層的。
先驗框的調整是在特征圖上進行調整的,然后再放大到原圖上得到最終的預測框。
Yolov3 的解碼就是利用預測結果的調整參數,從而調整先驗框得到預測框的過程。
調整是在特征圖上進行的,因此需要先根據特征圖大小縮放先驗框,然后利用公式作用到先驗框上,實現先驗框的調整。
再將調整后的先驗框放大到原圖上,得到預測框。
這就是整個解碼過程了。
——————
淺談則止,細致入微AI大道理
掃描下方“AI大道理”,選擇“關注”公眾號
—————————————————————
—————————————————————