如需講解視頻,請關注個人我的微信公衆號:小紙屑算法
YOLOv1是繼Faster R-CNN後,第一個one stage物體檢測算法,開創了物體檢測算法一個全新流派,自YOLOv1後,物體檢測基本分爲one stage和two stage兩個流派。微信
下圖是YOLO在整個物體檢測算法歷史上的座標。網絡
能夠看出,YOLOv1是在Faster R-CNN以後提出的,但查看首次上傳arXiv的時間可知(見下圖),YOLOv1和Faster R-CNN基本是同時提出的,所以YOLO做者動筆之時,Fast R-CNN是SOTA(state of the art),Faster R-CNN還沒有出世,所以YOLO做者的主要對比對象是Fast R-CNN。固然,做者後續仍是補充了與Faster R-CNN的對比結果作參考。函數
下面簡單分析下Fast R-CNN的原理。學習
Fast R-CNN主要由四部分組成(以下圖),首先是共用的Feature Extractor,而後是傳統的Region Proposal算法,有了共用的Extracted Feature Map和ROI(Region Of Interest)後,將Extracted Feature Map上對應ROI部分截取出來,通過ROI Pooling,轉成分辨率固定的Feature Map,輸入到物體檢測部分,以迴歸物體類別和bounding box,完成整個物體檢測流程。優化
因爲Fast R-CNN分爲Extract Feature和Region Proposal兩個過程,所以是two stage的,這致使了Fast R-CNN的經常準確度高,但速度作不到實時性。設計
YOLO的提出就是解決Fast R-CNN的缺點,將two stage合成爲一個stage,從而達到實時性。3d
具體YOLO是如何將two stage合成爲一個stage的呢?rest
1)首先,將輸入圖片劃分爲7x7的網格cdn
能夠看出,一個cell預測兩個框,但輸出的時候只能輸出一個預測結果,通常取置信度C值大的那個預測框做爲這個cell的預測結果,框的類別取p_ci最大的類別。 3)既然一個cell有兩個預測框,那每一個預測框的Ground Truth怎麼計算呢? 首先,一個Ground Truth框分配給其center所在的cell,以下圖,自行車的綠色Ground Truth框分配給粉色的cell,
其次,在一個cell內部,Ground Truth會分配給與其IOU最大的predictor,以下圖,粉色cell中的兩個預測框是紅色框,綠色GT框會分配給寬矮的紅色預測框。
有了輸出,有了GT,再設計設計網絡結構,即輸入到輸出的映射,就能夠利用梯度降低進行訓練了。
下圖是簡化版的網絡結構,
下圖是詳細的網絡結構,
能夠看出,圖片先經由一個做者設計的24層的Feature Extractor,提取特徵,而後再通過兩個全鏈接層,就獲得最後7x7x30的輸出。
須要注意的是,這個7x7的輸出的意義就是做者說的將網格劃分爲7x7的網格。
Loss主要分爲三個部分,位置損失、置信度損失和類別損失。
1)位置損失
2)置信度損失
Ci預測的是Pr(object)*IOU,綜合反映了預測框有object的機率和預測框與truth的IOU大小。 因此對於一個cell的C_i的標籤的計算方法是:
3)類別損失
預測的p_ci是條件機率,即Object已知的狀況下,Class_i的機率,若是GT的類別是ci,則p_ci的標籤是1,其餘p_ci的標籤爲0。
YOLO模型訓練採用瞭如下技巧: 1)數據加強 包括隨機縮放,隨機截取,隨機調整曝光度和飽和度 2)dropout 估計是全鏈接層,使用了dropout,dropout rate取0.5 3)優化器 採用momentum優化器,超參數beta取0.9 4)weight decay 採用了權重衰減,係數爲0.0005 5)batch size爲64 6)learning rate
做者還對YOLO進行了偏差分析,對比了Fast R-CNN與YOLO的偏差來源。 首先做者將識別結果分爲五類:
Fast R-CNN與YOLO的偏差組成以下圖:
能夠看出,Fast R-CNN以背景錯誤爲主,YOLO以位置錯誤爲主。
YOLO開創性的提出了一步式算法,作到了實時檢測和高準確率。