論文筆記:YOLO
簡介
這是CVPR2016的一篇很經典的目標檢測論文,一階段目標檢測鼻祖,提出了一個非常實時的目標檢測算法。YOLO把檢測問題視爲一個單純的迴歸問題,比起之前的算法,YOLO預測出假陽性結果(把背景預測成某個類別)的可能性比較低,但是位置誤差比較大。當然,YOLO最大的特點就是速度快,可以實現實時檢測。
方法
- 將圖片分成S*S個格子(s=7)
- 每個格子負責預測中心B個(B=2)落在格子內的物體的檢測框和1個類別,x,y,w,h,confidence(都是0-1),和類別(20類的話,就是20個0-1範圍的數字表示每個類別的概率),也就是網絡輸出尺寸是一個20+2*5的向量
- 通過每個格子預測出的向量,就可以知道所有的檢測結果(檢測框中心位置、尺寸、confidence、類別),再通過設置閾值和NMS,就可以把符合要求的結果篩選出來。
網絡設計
訓練
loss採用SSE(平方和誤差),因爲這樣的loss容易訓練,但是這樣的話,會存在這幾個問題:
- 位置誤差和分類誤差同等對待並不合理
- 很多格子裏面沒有任何物體,直接這麼訓練容易讓所有confidence收斂到0
因此,增加有物體的格子的loss權重,減小沒有物體的格子的loss權重,取λcoord = 5 , λnoobj = 0.5進行加權計算loss。
此外,爲了反映小物體的尺寸小偏差比大物體的尺寸小偏差影響嚴重,box寬高選擇開根後誤差的平方進行計算。
計算公式如下:
侷限性
- 每個格子只能預測兩個框,一個類別,導致網絡難以處理成羣小目標;
- 難以處理長寬比不尋常的目標;
- 訓練時對大小目標的誤差一視同仁,然而實際上一個小偏差對於大目標來說影響很小,但是對於小目標來說影響很大。
實驗結果