1. 程式人生 > >深度學習之物體檢測——YOLO(三)_PyTorch實現

深度學習之物體檢測——YOLO(三)_PyTorch實現

過程

構建26層網路

作者採用GoogLeNet作為網路結構,但是並不使用inception模組,而是採用1x1和3x3大小的濾波器進行替代。具體的網路結構請參考部落格:深度學習之物體檢測——YOLO(一)_介紹

計算損失

YOLO模型的損失函式比較複雜,包含三種損失:box損失、置信度損失、類別損失。具體的表示式也請檢視上面指定的部落格。

  • 首先應該根據標記資訊計算grid_mask矩陣:即損失函式表示式中的1obji,size=(7*7*1)。計算圖片中的物體中心位置,然後令中心所在的格子對應的grid_mask為1,其餘的都為0。
    負責類別誤差。

  • 然後計算box_mask矩陣:即損失函式表示式中的1

    objij,size=(7*7*2)。計算責任格子中的兩個box與真實box之間的IOU,IOU大的box對應的box_mask為1。
    負責box座標誤差和部分置信度誤差。

  • noobj:即損失函式表示式中的1noobjij,為1boxmask
    負責剩下的置信度誤差。

用訓練好的模型檢測物體

對一張圖片的輸出需要進行置信度閾值過濾和NMS操作,最終剩下的box作為預測結果。

實現時遇到的問題

實現過程中對於標記中的box表示和網路輸出的box表示混亂,最終確定以下原則:

  • 所有box表示均用(x_center, y_center, width, height)。
  • 標記中的box表示和輸出box表示一致,都是在448*448圖片中的相對值

另外在還有兩個特殊情況:確定責任box的時候會用到box在448*448圖片中的絕對位值表示以計算IOU;在將檢測結果繪製到原影象中時需要用到box在原圖中的絕對位置。

程式碼