由於YOLOv1是端到端進行訓練,因此YOLOv1只有壹條單壹的網絡分支。YOLOv1輸入為 的圖像,經過壹個修改的GoogLeNet網絡(網絡到底什麽樣的其實不用管,只要知道是壹堆卷積和池化的堆疊即可),後面接壹些全連接層(同樣無所謂接什麽全連接層,看下參數或者源碼就直接懂了),最後接到壹個 的全連接層,直接reshape為 (這裏reshape成這樣是有意圖的,具體參見下面部分)。
YOLOv1將壹張圖像(例如 )劃分為 個網格(YOLOv1中 ,如下圖所示),壹*** 個網格。
損失函數有多個部分,我們現在把它們分開來說,後面直接挨個加起來即可。
第壹部分如下所示,計算預測邊界框和GT框中心點之間的差距。其中 表示第 個網格的第 個邊界框是否負責壹個物體,是為1,不是為0。
第二部分類似第壹部分,主要計算預測寬高和GT寬高損失。這裏加上根號表示大邊界框小偏差應該比小邊界框小偏差更重要。
第三部分計算對於每個邊界框的置信度分數與預測的置信度分數之間差距。 表示置信度分數, 表示預測的邊界框和對應GT框的IoU。
最後壹部分計算類概率損失, 表示當網格中沒有物體時不懲罰。
其中, , 。
論文原文: /hackernoon/understanding-yolo-f5a74bbc7967
NMS參考: /presentation/d/1aeRvtKG21KHdD5lg6Hgyhx5rPq_ZOsGjG5rJ1HP7BbA/pub?start=false&loop=false&delayms=3000#slide=id.p