目標檢測分爲二階段和一階段的方法,二階段方法主要有Fast R-CNN系列,Mask R-CNN等,主要方法是用算法生成一些列做爲樣本的候選框,而後再使用卷積神經網絡進行樣本的分類;網絡
一階段方法(End to End方法)主要有SSD系列,YOLO系列,這種方法是將目標邊框的定位問題轉化爲迴歸問題處理。ide
因爲思想的不一樣,二階段檢測方法在檢測準確率和定位精度有優點,一階段檢測方法在速度上佔有優點。函數
因此YOLO的核心思想是,直接在輸出層迴歸bounding box的位置和bounding box所屬的類別(整張圖做爲網絡的輸入,把 Object Detection 的問題轉化成一個 Regression 問題)。oop
YOLO的物體檢測精度低於其餘state-of-the-art的物體檢測系統。性能
YOLO對小物體的檢測效果很差(尤爲是密集的小物體,由於一個柵格只能預測2個物體)。學習
Resize成448 \(\times\) 448,圖片分割獲得7 \(\times\) 7 網格(cell)測試
過濾獲得的bbox, 使用nms算法google
網絡示意圖:es5
最後reshape層的計算:(5 = x,y,w,h,confidence)
\[ filter = (BboxNum\times5+Class) \]
這裏BboxNum = 2, Class = 20,因此filter是30。
網絡結構借鑑了 GoogLeNet 。24個卷積層,2個全連接層。(用1×1 reduction layers 緊跟 3×3 convolutional layers 取代Goolenet的 inception modules )
每一個1 \(\times\) 1 \(\times\) 30 對應其中一個cell, 每一個cell須要預測兩個bounding box的中心座標(\(x_c\),\(y_c\),\(w\),\(h\)),其中\(x_c,y_c\)被歸一化到0~1之間,w,h經過圖像的width和height歸一化到0~1之間。 每一個bounding box除了要回歸自身的位置以外,還要附帶預測一個confidence值。 這個confidence表明了所預測的box中含有object的置信度和這個box預測的有多準兩重信息:
\[ confidence=Pr(Object)\times IOU^{truth}_{pred} \]
第一項:\[Pr(Object)\]: 表明的是若是人工標註的框(ground truth box)落在一個gird cell中,則取1,不然取0。
第二項: \[IOU^{truth}_{pred}\]: 預測的bounding box和實際的ground truth box之間的IOU值。
這樣前10個框來源就清楚了,即:\(BboxNum \times 5\).
剩餘的20維度是用來對20個類進行預測,因此總共須要輸出是 \[7 \times 7 \times (5 \times 2 + 20)\]。
關鍵內容:損失函數的設計
說明:每行是一個cell對應的兩個bounding Box的相關信息,一共有\(7\times7\)這麼多的行
對應類別計算方法,須要與confidence相乘,獲得如下矩陣:
按照下圖所示步驟進行操做,這只是示意其中一個類,每一行都要進行以下操做:
在全部作完nms以後選擇對應的框畫出來
獲得如下效果:
總圖:
損失函數由三個方面組成,一個是定位損失(localization error),一個是置信度損失,一個是分類損失(classification error)。簡單的所有采用了sum-squared error loss來作這件事會有如下不足:
如何解決,從新設計新的loss計算方案:
一個網格預測多個bounding box,在訓練時咱們但願每一個object(ground true box)只有一個bounding box專門負責(一個object 一個bbox)。具體作法是與ground true box(object)的IOU最大的bounding box 負責該ground true box(object)的預測。這種作法稱做bounding box predictor的specialization(專職化)。每一個預測器會對特定(sizes,aspect ratio or classed of object)的ground true box預測的愈來愈好。(我的理解:IOU最大者偏移會更少一些,能夠更快速的學習到正確位置)
測試階段,使用nms的時候,按照如下方式進行衡量是否保留改框:
\[ Pr(Class_i|Object)\times Pr(Object)\times IOU^{truth}_{pred}=Pr(Class_i)\times IOU^{truth}_{pred} \]