參考:
https://www.jianshu.com/p/cad68ca85e27
https://arxiv.org/abs/1506.02640
https://www.jianshu.com/p/13ec2aa50c12
https://www.imooc.com/article/36391
https://www.jianshu.com/p/f87be68977cb
https://www.cnblogs.com/xiongzihua/p/9315183.html
1. YOLO v1
網絡框架:
1.1 其中,輸入圖像大小是448*448*3,輸出大小是7*7*30,如上圖,最後輸出的一個像素值對應原圖中的一個網格,即相當於將原圖分割成7*7的網格:
- 最後輸出的每個像素值都是一個30維的向量,每個像素對應原圖中的一個網格,30等於2×5+20,即2個bbox值(bbox值包括座標和寬高),同時爲每個bbox值預測一個置信度(confidence scores)。20表示某個類的中心落在當前單元格內的概率。
- 即前面10個值用來確定目標的位置(定位),後面20個值用來確定目標的類別(分類)。
- 輸出結果中的一個像素,只能有一個類別,即要麼是狗,要麼是自行車,所以對應到原圖中的網格,每個網格負責預測一種物體;爲何用兩個bbox,爲了更準確的定位出物體。
1.2 分類功能簡單,即20個0到1的值,哪個位置上的值大即屬於哪個類,難點是定位功能:
因爲定位和分類一樣也視爲迴歸任務,所以需要將座標數據值歸一化爲0到1之間,假設輸出結果的其中一個像素值爲,對應到原圖即爲上圖的藍色網格的檢測結果,該目標的bbox是紅色框。
1.2.1 (x, y)
(x, y)是紅色bbox的中心(原圖綠色點)相對於網格(當前網格是藍色)的左邊界和上邊界偏移距離,由兩個座標決定,分別是單元格左上角座標、bbox中心在原圖像的座標位置。對於上圖藍色網格座標爲,假設它輸出的是紅色框bbox,設bbox的中心座標,那麼最終預測的結果是經過歸一化處理的,表示的是綠色中心相對於藍色網格的偏移,計算公式如下:
因爲bbox中心相對於單元格的偏移量,即綠色點如果正好在藍色單元格最左上角,則偏移量爲0,如果正好在最右下角,則相對於左邊界和上邊界偏移量都爲1,公式如下
其中,(w_i,h_i) 是單元格左上角座標,w_c, h_c是每個單元格的寬、高,(x_c, y_c) 是原圖像的座標位置,x就是相對於單元格的左邊界偏移的距離。所以x, y區間都是[0, 1]。
同理,y值一樣,這樣就實現了原圖中所有的座標值都是0到1。
每個網絡只有有一個類別,類別的中心只能在網格內移動。
1.2.2 (w,h)
(w,h)是紅色bbox相對於整個圖片的比例。預測的bbox的真實寬高爲w_b, h_b,如上圖所示。(w_i,h_i)表示的是原圖寬、高,計算公式如下:
其中w_i值爲448,假設w_b值爲160,則w = 160 / 448 = 0.3571.
1.2.3 confidence
這個置信度是由兩部分組成,一是格子內是否有目標(有爲1,無爲0),二是bbox的準確度(IoU,設置IoU是爲了定位更準)。即如果有目標,置信度爲IoU,否則置信度爲0。用來評估目標位置是否準確,而不管具體類別。
一個網格,有兩個bbox,所以就有兩個confidence
1.2.4 C類的條件概率
20個條件概率定義爲,表示該網格存在目標且屬於第i類的概率。
測試的時候,將最終的輸出是置信度乘以這20個條件概率值,得出一組20個概率值,因爲有兩組bbox,這樣bbox1和bbox2的confidence分別乘以這20個條件概率值,就有兩組概率值。送入NMS,得到最終的輸出框結果。
1.3 損失函數
首先要明確兩個概念,一是網格中有無目標,二是網格中的一個目標只有一個box負責(responsible)另一個box也算沒有目標,根據在線計算IOU的大小確定哪一個負責。
其中,是在遍歷網格,是在遍歷每個網格的bbox,表示選取個bbox中框出ground truth的那幾個bbox。剩下的未被選擇的,就給了. λ是用來調節類別不平衡的超參數。
confidence損失:負責檢測的box的label是在線計算的IOU,不負責和無目標的都爲0,爲了平衡,加入λnoobj
位置損失:容易理解,負責檢測的纔有位置損失,其他的都不需回傳損失,也就不需要計算,此外小目標對於預測wh的誤差更敏感,用開根的方法緩解。舉例來說,大小爲10和大小爲100的目標,預測大小分別爲20和110,損失一樣但是顯然小目標檢測的更差一些,開根後,,而,相當於強化了小目標的損失。
類別損失:容易理解,含有目標的網格纔有類別損失,其他都不需要回傳損失,也就不需要計算。默認網格只出現一種類別,這當然是有缺陷的。yolov1對於一些聚集的目標,檢測效果會不好。其實聚集目標本身也算很難檢測的情況吧。
- 可以看到損失函數包括5個部分。第一部分是x,y座標;第二部分是w,h,採用根號使得小方框size變化的損失比大方框size變化的損失大,因爲小目標對於預測wh的誤差更敏感;第三部分是方框置信度損失,迴歸目標是預測方框與實際方框的IOU值;前三部分都只在預測方框和實際方框有對應關係時才計算loss;
- 第四部分是沒有對應物體的方框置信度損失,實際的置信度都是0;
- 第五部分是分類損失,當方格與物體有對應關係時,才計算分類損失。
因爲在圖片中很多方格都不包含物體,使得方格預測方框的置信分數趨於0。所以對包含物體的方格加大權重,對不包含物體的方格減小權重。論文中有,
待續。。。