讀論文系列:Object Detection CVPR2016 YOLO
CVPR2016: You Only Look Once:Unified, Real-Time Object Detection
轉載請註明作者:夢裡茶
YOLO,You Only Look Once,摒棄了RCNN系列方法中的region proposal步驟,將detection問題轉為一個回歸問題
網路結構
- 輸入圖片:resize到448x448
- 整張圖片輸入卷積神經網路(24層卷積+2層全連接,下面這張示意圖是Fast YOLO的)
- 將圖片劃分為SxS個格子,S=7
- 輸出一個SxS大小的class probability map,為圖片上每個格子所屬的分類
- 輸出為每個格子輸出B個bounding box,每個bounding box由x,y,w,h表示,為每個bounding box輸出一個confidence,即屬於前景的置信度
於是輸出可以表示為一個 的tensor,訓練只需要根據數據集準備好這樣的tensor進行regression就行
- 對所有bounding box按照confidence做非極大抑制,得到檢測結果
訓練
Loss
- 前兩行為定位loss, 為定位loss的權重,論文中取5
- 第三行為一個bounding box屬於前景時的置信度回歸loss,
- 當格子中有對象出現時,真實 為1,
- 是一個條件表達式,當bounding box「負責(is responsible for)」圖中一個真實對象時為1,否則為0,
- 所謂「負責」,指的是在當前這個格子的所有bounding box中,這個bounding box與真實的bounding box重疊率最大
- 第四行為一個bounding box屬於背景時的置信度回歸loss,
- 為了避免負樣本過多導致模型跑偏, ,
- 是一個條件表達式,為 取反
- 於是我們可以發現一個格子的兩個bounding box的分工:一個貢獻前景loss,一個貢獻背景loss ,不論是前景背景box,我們都希望它們的confidence接近真實confidence,實際上,如果 =1, 第四五行可以合併為一項求和,但由於背景box太多,所以才單獨拆開加了權重約束
- 第五行為分類loss, 是一個條件表達式,當有對象出現在這個格子中,取1,否則取0
YOLO里最核心的東西就講完了,其實可以把YOLO看作固定region proposal的Faster RCNN,於是可以省掉Faster RCNN里region proposal部分,分類和bounding box regression跟Faster RCNN是差不多的
細節
Leaky Relu
網路中只有最後的全連接層用了線性的激活函數,其他層用了leaky Relu:f(x)=max(x, 0.1x)
對比Relu和leaky Relu
在x小於0的時候,用了0.1x,避免使用relu的時候有些單元永遠得不到激活(Dead ReLU Problem)
Fast YOLO
卷積層更少,只有9層卷積+2層全連接,每層filters也更少,於是速度更快
實驗效果
- 對比當前最好方法:
Fast YOLO速度最快,準確率不太高,但還是比傳統方法好,YOLO則比較中庸,速度不慢,準確率也不太高,但也還行。
- 再看看具體是在哪些類型的圖片上出錯的:
主要是定位不準(畢竟沒有精細的region proposal),但是在背景上出錯較少(不容易把背景當成對象)
缺點
- 固定的格子是一種很強的空間限制,7x7的格子決定了整張圖片最多預測98個對象,對於對象數量很多的圖片(比如鳥群)無能為力
- 難以泛化到其他形狀或角度的物體上
- 損失函數沒有考慮不同尺寸物體的error權重,大box權重和小box權重一樣
Summary
Anyway,YOLO結構還是挺優雅的,比Faster RCNN黑科技少多了,更重要的是,它是當時最快的深度學習檢測模型,也是很值得肯定的。
推薦閱讀:
※DarkNet-YOLOv3 訓練自己的數據集 Ubuntu16.04+cuda8.0
※CVPR2018 | 直接建模視覺智能體?讓「小狗」動起來~
※菜鳥學tensorflow
※Focal Loss for Dense Object Detection解讀
※用於三維重建和3d deep learning的公開數據集
TAG:目標檢測 | 計算機視覺 | 深度學習DeepLearning |