標籤:

yolo 目標檢測演算法個人總結(yolov1)

yolo 目標檢測演算法個人總結

目前yolo目標檢測有兩個版本,分別為v1和v2。因工作需要用yolo演算法檢測人物,所以這段時間重點看了這兩篇論文,並實現了對應的tensorflow代碼。這裡記錄下在論文閱讀過程中的一些細節信息,留給自己,同時也希望各位能指出本人理解錯誤的地方,謝謝!

一:yolo v1

關於yolo v1演算法的詳解在網上已經非常多了,在這裡我大概敘述下演算法的流程,以及在開發過程中遇到的一些想不明白的細節問題,以及最後自己的解決方法。

yolo v1在檢測目標時,不同於之前RCNN系列的方法,是將檢測對象的類別和位置同時進行預測,是一種回歸問題。主要步驟為:卷積層進行圖像特徵提取;全連接層用於後續類別和目標位置的回歸預測。

具體預測方法:目標可能位於圖像的不同局部區域,因此,作者首先將圖像分割成S*S個柵格單元,並同時期望每一個柵格單元能完成識別和檢測落入到該單元的目標。基於此,作者提出對每一個柵格單元,主要預測以下幾個值:1 預測的B個Box的置信度;2 每個Box的位置(Box中心坐標x,y以及Box的寬和高);3 在當前柵格單元有對象的條件下,輸入每個類別的概率;作者同時還指出,一個柵格單元只負責檢測一個目標,並且B個Box只有一個用於預測目標的位置,這句話為我們對Train的Image的類別標記和計算loss值提供了依據。具體loss計算文章中有非常詳細的介紹,截圖如下:

關於loss中的參數,原文有非常詳細的介紹,在這裡就不一一展開。只列舉出,我在實現的過程中為難的地方

1 文章中每一個柵格單元會預測2個Box,那麼類別標記的時候這兩個Box怎麼處理的?

我在實現過程中,並沒有找到作者關於這2個Box的說明,更別說其他的細節了。後來,我想,其實這裡預測幾個Box其實並不重要,作者的目標是一個柵格單元只檢測出一個目標,理論上一個Box就能達到要求,作者在這裡選擇兩個Box我想主要是由於不同的物體形狀上可能差異比較大,兩個Box可以分別負責預測兩種形狀的物體(w>h or w<h)。因此,我在處理時,對於根據目標的長、寬比確定選擇哪一個Box作為作者所說的"responsible"。並沒有計算Box與ground truth的IOU,並找到最大的那個。(這裡有處理錯誤,還請指出來)

2 作者說每一個柵格單元是否包含object的判斷方法是:檢測目標Box的中心點是否落入到該單元。由於我的最終目標是要檢測人,人一般會比較大,Box的中心點位置標記為object往往不能覆蓋到人的有用信息(如下圖中黃色矩形示意),這會較低召回率。為此,類別標記時,我們將一個object差分為4個object,具體如圖所示(原來的框+3個新框)。這樣明顯增加了類別的召回率。測試時確實效果好了不少。

推薦閱讀:

目標檢測|YOLOv2原理與實現(附YOLOv3)
yoloV3論文解讀及應用注意事項
深度學習之目標檢測的前世今生(Mask R-CNN)
綜述:3D目標檢測於RGB-D(Object detection in RGB-D images)
PASCAL VOC數據集的標註格式

TAG:目標檢測 |