深度學習之物體檢測——YOLO(三)_PyTorch實現
阿新 • • 發佈:2019-01-09
過程
構建26層網路
作者採用GoogLeNet作為網路結構,但是並不使用inception模組,而是採用1x1和3x3大小的濾波器進行替代。具體的網路結構請參考部落格:深度學習之物體檢測——YOLO(一)_介紹。
計算損失
YOLO模型的損失函式比較複雜,包含三種損失:box損失、置信度損失、類別損失。具體的表示式也請檢視上面指定的部落格。
首先應該根據標記資訊計算grid_mask矩陣:即損失函式表示式中的
1obji ,size=(7*7*1)。計算圖片中的物體中心位置,然後令中心所在的格子對應的grid_mask為1,其餘的都為0。
負責類別誤差。然後計算box_mask矩陣:即損失函式表示式中的
1 ,size=(7*7*2)。計算責任格子中的兩個box與真實box之間的IOU,IOU大的box對應的box_mask為1。
負責box座標誤差和部分置信度誤差。- noobj:即損失函式表示式中的
1noobjij ,為1−boxmask
負責剩下的置信度誤差。
用訓練好的模型檢測物體
對一張圖片的輸出需要進行置信度閾值過濾和NMS操作,最終剩下的box作為預測結果。
實現時遇到的問題
實現過程中對於標記中的box表示和網路輸出的box表示混亂,最終確定以下原則:
- 所有box表示均用(x_center, y_center, width, height)。
- 標記中的box表示和輸出box表示一致,都是在448*448圖片中的相對值
另外在還有兩個特殊情況:確定責任box的時候會用到box在448*448圖片中的絕對位值表示以計算IOU;在將檢測結果繪製到原影象中時需要用到box在原圖中的絕對位置。