AI大視覺(八) | Yolov3 如何調整先驗框進行解碼?


  本文來自公眾號“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大道理”,選擇“關注”公眾號

—————————————————————

​     

—————————————————————

投稿吧   | 留言吧

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM