论文笔记:YOLO
原文:You Only Look Once: Unified, Real-Time Object Detection
YOLO
1、四個問題
要解決什么問題?
- 對于目標檢測任務來說,速度較快的算法性能較弱,然而性能較強的算法(如:R-CNN系列)耗時則更多,很難達到實時性的要求。
- 大多數像RCNN這類的算法流程是,第一步先獲取候選區域(region proposal),接著進行后處理(消除重復框,對候選框進行分類等等)。這樣的操作往往很慢也很難優化,因為每個獨立的模塊都要單獨訓練,實時性要求也達不到。
用了什么方法解決?
- 將目標檢測直接轉換為一個回歸問題,直接使用一個神經網絡來預測候選框和物體類別。
效果如何?
-
YOLO網絡的速度有很大提高。
-
基本的YOLO網絡可以做到45FPS。
-
對于較小的Fast YOLO模型,幀數可以達到155FPS,且相比于其他實時檢測模型效果更好。
-
對背景的分類錯誤少了很多。
還存在什么問題?
- YOLO在準確率上還比不過state-of-the-art的模型。
- 與R-CNN系列相比,候選框的預測有較大誤差,且對新數據的泛化能力較弱。
- 對于數量較多的小物體,如一群小鳥,識別效果不好。
2、論文概述
2.1、總體框架
2.2、統一檢測(Unified Detection)
- 將輸入圖像劃分為S×SS \times SS×S個單元格(grid cell)。如果某個物體的中心在某個單元格內,那么那個單元格就負責檢測那個物體。
- 每個單元格(grid cell)要預測BBB個bounding box,每個bounding box除了要預測框的位置外,還要預測一個置信率(confidence)。具體來說,每個bounding box包含5個預測值:xxx、yyy、www、hhh和置信率(confidence)。
- (x,y)(x, y)(x,y)表示的是預測的bounding box的中心點坐標。
- www、hhh表示的是bounding box的寬和高。
- confidence包含了兩重信息:
- 有多確信這個單元格(grid cell)內有物體?
- 預測的bounding box有多精確?
- 計算公式:Pr(object)?IOUpredtruthPr(object) * IOU_{pred}^{truth}Pr(object)?IOUpredtruth?。
- 如果這個單元格內有物體,則Pr(object)Pr(object)Pr(object)取1,否則取0。
- IOUpredtruthIOU_{pred}^{truth}IOUpredtruth?表示的是預測的bounding box與ground truth之間的重疊比例,它這里用的是intersection over union (IOU) 這個指標。
2.3、網絡結構
- 網絡結構如下:
2.4、訓練
- 先在ImageNet上對前20個卷積層接上一個平均池化層和全連接層進行預訓練。
- 隨后保留那20個卷積層,再加上4個新的卷積層和2個全連接層,新加的層使用隨機權重初始化。
- 由于還需要對細粒度視覺信息進行分類,故將輸入圖片的分辨率調整為448×448448 \times 448448×448(原始分辨率為224×224224 \times 224224×224)。
- bounding box預測的中心點坐標xxx和yyy用對應網格的偏移歸一化到0-1之間;bounding box預測的寬高w和h用整幅圖像的寬高歸一化到0-1之間。
- 網絡中使用leaky ReLU替代ReLU。
- 在計算loss時,作者最初全部采用了平方和誤差 (sum-squared loss)。
- 采用平方和誤差的原因是,它很容易優化。
- 然而,也存在幾個問題:
- 將分類誤差和定位誤差看做同等重要顯然是不靠譜的。
- 另外在一幅圖像中,大多數網格不含有任何對象。這會將這些單元格的置信率(confidence)推為0,由于數量眾多,很可能會掩蓋掉含有目標的單元格反向傳播回來的梯度。結果就是導致模型不穩定,甚至發散。
- 如下圖所示,可以看出,在y=xy=\sqrt{x}y=x?上取兩個鄰近的點做差值。如果值比較小,y=xy=\sqrt{x}y=x?在較小的地方變化率相對更大,那么這個差值也會更大一些。這樣子反應到loss上,就是在較小的box上小偏差會造成更大的loss,而較大的box上小偏差得到的loss則沒那么大。
- loss函數完整形式:
- 1iobj\mathbb{1}_{i}^{obj}1iobj?表示目標是否出現在網格單元iii中 ,1ijobj\mathbb{1}_{ij}^{obj}1ijobj?表示網格單元iii中的第jjj個邊界框預測器“負責”該預測。
- 這個loss中,只有當某個單元格中有對象的時候才會計入分類錯誤,即對分類錯誤進行懲罰。
- 只有當某個 box predictor 對某個 ground truth box 負責的時候,才會對 box 的 coordinate error 進行懲罰,而對哪個 ground truth box 負責就看其預測值和 ground truth box 的 IoU 是不是在那個 cell 的所有 box 中最大的。
2.5、推斷(測試)
- 對于每張圖片,使用如下評分公式獲取每個bounding box對應不同類的confidence結果,即class-specific confidence scores :
Pr(Classi∣Object)?Pr(Object)?IOUpredtruth=Pr(Classi)?IOUpredtruthPr(Class_i | Object) * Pr(Object) * IOU_{pred}^{truth} = Pr(Class_i) * IOU_{pred}^{truth}Pr(Classi?∣Object)?Pr(Object)?IOUpredtruth?=Pr(Classi?)?IOUpredtruth?
- Pr(Object)?IOUpredtruthPr(Object) * IOU_{pred}^{truth}Pr(Object)?IOUpredtruth?就是每個bounding box的confidence。
- Pr(Classi∣Object)Pr(Class_i | Object)Pr(Classi?∣Object)為分類結果。
- 基于class-specific confidence scores設置閾值篩選bounding box,最后再使用非極大抑制(NMS)去除重疊的框。
2.6、資料推薦
總結
- 上一篇: 论文笔记:PointSIFT
- 下一篇: 论文笔记:Inception v1