02 YOLO系列總結

參考:

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之間,假設輸出結果的其中一個像素值爲(x,y,w,h,confidence),對應到原圖即爲上圖的藍色網格的檢測結果,該目標的bbox是紅色框。

1.2.1 (x, y)

(x, y)是紅色bbox的中心(原圖綠色點)相對於網格(當前網格是藍色)的左邊界和上邊界偏移距離,由兩個座標決定,分別是單元格左上角座標、bbox中心在原圖像的座標位置。對於上圖藍色網格座標爲(x_{col} = 1, y_{row} = 4),假設它輸出的是紅色框bbox,設bbox的中心座標(x_c, y_c),那麼最終預測的結果(x,y)是經過歸一化處理的,表示的是綠色中心相對於藍色網格的偏移,計算公式如下:

因爲bbox中心相對於單元格的偏移量,即綠色點如果正好在藍色單元格最左上角,則偏移量爲0,如果正好在最右下角,則相對於左邊界和上邊界偏移量都爲1,公式如下

\large x = \frac{x_c - w_i}{w_c}

\large y = \frac{y_c - h_i}{h_c}

其中,(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 = \frac{w_b}{w_i}

h = \frac{h_b}{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個條件概率定義爲\large p_r = (Class_i|Object),表示該網格存在目標且屬於第i類的概率。

測試的時候,將最終的輸出是置信度乘以這20個條件概率值,得出一組20個概率值,因爲有兩組bbox,這樣bbox1和bbox2的confidence分別乘以這20個條件概率值,就有兩組概率值。送入NMS,得到最終的輸出框結果。

1.3 損失函數

首先要明確兩個概念,一是網格中有無目標,二是網格中的一個目標只有一個box負責(responsible)另一個box也算沒有目標,根據在線計算IOU的大小確定哪一個負責。

其中,\sum_{i=1}^{S^2}是在遍歷網格,\sum_{j=1}^{B}是在遍歷每個網格的bbox,\large 1_{ij}^{obj}表示選取S^2*B個bbox中框出ground truth的那幾個bbox。剩下的未被選擇的,就給了\large 1_{ij}^{noobj}. λ是用來調節類別不平衡的超參數。

confidence損失:負責檢測的box的label是在線計算的IOU,不負責和無目標的都爲0,爲了平衡,加入λnoobj

位置損失:容易理解,負責檢測的纔有位置損失,其他的都不需回傳損失,也就不需要計算,此外小目標對於預測wh的誤差更敏感,用開根的方法緩解。舉例來說,大小爲10和大小爲100的目標,預測大小分別爲20和110,損失一樣但是顯然小目標檢測的更差一些,開根後,\large (\sqrt{20}-\sqrt{10})^2=1.7,而\large (\sqrt{110}-\sqrt{010})^2=0.24,相當於強化了小目標的損失。

類別損失:容易理解,含有目標的網格纔有類別損失,其他都不需要回傳損失,也就不需要計算。默認網格只出現一種類別,這當然是有缺陷的。yolov1對於一些聚集的目標,檢測效果會不好。其實聚集目標本身也算很難檢測的情況吧。

  • 可以看到損失函數包括5個部分。第一部分是x,y座標;第二部分是w,h,採用根號使得小方框size變化的損失比大方框size變化的損失大,因爲小目標對於預測wh的誤差更敏感;第三部分是方框置信度損失,迴歸目標是預測方框與實際方框的IOU值;前三部分都只在預測方框和實際方框有對應關係時才計算loss
  • 第四部分是沒有對應物體的方框置信度損失,實際的置信度都是0;
  • 第五部分是分類損失,當方格與物體有對應關係時,才計算分類損失。

因爲在圖片中很多方格都不包含物體,使得方格預測方框的置信分數趨於0。所以對包含物體的方格加大權重,對不包含物體的方格減小權重。論文中有\large \lambda _coord = 5\large \lambda_{noobj} = 5

 

待續。。。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章