1. 程式人生 > >yolo v1演算法理解

yolo v1演算法理解

寫的比較明確,不是籠統的介紹,yolo 目標檢測演算法個人總結(yolov1) - 朱勇的文章 - 知乎

https://zhuanlan.zhihu.com/p/27515705

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個新框)。這樣明顯增加了類別的召回率。測試時確實效果好了不少。