1. 程式人生 > >YOLOv1算法理解

YOLOv1算法理解

滑動窗口 位置 但是 算法理解 width 打分 fas 得出 gre

1,YOLOv1算法的簡介

YOLO算法使用深度神經網絡進行對象的位置檢測以及分類,主要的特點是速度夠快,而且準確率也很高,采用直接預測目標對象的邊界框的方法,將候選區和對象識別這兩個階段合二為一,

與faster rcnn區分開來,是一刀流的檢測方法。

Yolo算法不再是窗口滑動了,而是直接將原始圖片分割成互不重合的小方塊,然後通過卷積最後生產這樣大小的特征圖,基於上面的分析,可以認為特征圖的每個元素也是對應原始圖片的一個小

方塊,然後用每個元素來可以預測那些中心點在該小方格內的目標,這就是Yolo算法的樸素思想,

最新的YOLOv3算法再以往的結構上做出了改進,增加了多尺度檢測,以及更深的網絡結構darknet53,這是比較主要的改進,還有某些細節上的變動。

2,YOLOv1算法的原理

技術分享圖片

實際操作如圖所示,分為7*7個小格子,每個格子預測兩個bounding box。

如果一個目標的中心落入一個網格單元中,該網格單元負責檢測 該目標。

對每一個切割的小單元格預測(置信度,邊界框的位置),每個bounding box需要4個數值來表示其位置,(Center_x,Center_y,width,height),即(bounding box的中心點的x坐標,y坐標,bounding box的寬度,高度)

置信度定義為是否存在目標iou值的乘積,技術分享圖片

還要得到分類的概率結果;20個分類每個類別的概率。

7*7*30中的30=(20類概率+2*5(置信度,邊框位置))

技術分享圖片

2.1 YOLOv1的網絡結構

技術分享圖片

YOLO采用單個的卷積神經網絡進行預測,YOLO的整個結構就是輸入圖片經過神經網絡的變換得到一個輸出的張量 。 步驟如下:

(1)將輸入圖像調整為448×448,(2)在圖像 上運行單個卷積網絡,以及(3)由模型的置信度對所得到的檢測進行閾值處理

首先,YOLO速度非常快。由於我們將檢測視為回歸問題,所以不需要復雜的流程。測試時在一張新圖像 上簡單的運行我們的神經網絡來預測檢測

其次,YOLO在進行預測時,會對圖像進行全面地推理。與基於滑動窗口和區域提出的技術不同,YOLO在訓練期間和測試時會看到整個圖像,所以它隱式地編碼了

關於類的上下文信息以及它們的外觀。快速R-CNN是一種頂級的檢測方法,但是它看不到更大的上下文信息,所以在圖像中會將背景塊誤檢為目標。與快速R-CNN相比,YOLO的背景誤檢數量少了一半

然後,由於YOLO具有高度泛化能力,因此在應用於新領域或碰到意外的輸入時不太可能出故障。

所使用的卷積結構如圖所示:受到GoogLeNet圖像分類模型的啟發。網絡有24個卷積層,後面是2個全連接層,最後輸出層用線性函數做激活函數,其它層激活函數都是Leaky ReLU。

我們 只使用1*1降維層,後面是3*3卷積層,

技術分享圖片

3, YOLOv1的損失函數和訓練過程

YOLO的損失函數定義如下:

技術分享圖片

YOLO在ImageNet分類任務上以一半的分辨率(224*224的輸入圖像)預訓練卷積層,然後將分辨 率加倍來進行檢測。

訓練中采用了drop out和數據增強(data augmentation)來防止過擬合.

4. 預測過程以及結果的處理

直接把訓練好的YOLO網絡模型輸入一張圖片,得到一個7*7*30的結果向量,通過NMS(非極大值抑制)來選擇最終的結果;

NMS就是通過打分來選出最好的結果,與這個結果重疊的對象去掉,是一個不斷叠代的過程。

score = 某個對象的概率 * 置信度

技術分享圖片

所以對於每個網格有20*2個得分,每個對象有49*2個得分;這裏的2是bounding box的個數;

具體的過程是:

1,設置一個分數閾值,低於的直接置為0;

2,遍歷對於每個對象:

選出分數最高的那個及其bounding box放到輸出列表中;

將其他的與上面選出的分數最高的那個計算IOU,設置一個閾值,大於閾值的表示重疊度較高,把分數置為0;

如果所有的bounding box都在輸出列表中或者分數為0,那麽這個對象的NMS就結束

對接下來的對象執行此過程

3.得出輸出結果;

4. YOLOv1的特點總結

YOLO的一個貢獻是將檢測問題轉化為了回歸問題,相信這句話很多人見過很多次了。那到底是什麽意思呢?指的就是之前faster RCNN是先分兩步

先提取region proposal,也就是判斷是前景還是背景的問題,之後再分類,具體看前景是什麽東西。而YOLO直接通過regression一次既產生坐標,又產生每種類別的概率。

YOLO的特點在於快,其中一方面來源於regression機制,還有一個原因就在於region proposal的提取過程了。再YOLO中很少提region proposal的概念,

但是為了類比faster RCNN我們可以這樣理解,YOLO中粗暴地分成了7X7的網格,每個位置默認可能屬於2個object,那麽事實上就是提取了98個region proposal,

而faster RCNN是一種滑動窗口機制,每個feature map上都回歸出9個anchor,大約一共20k個anchor,在通過非極大值抑制等方法最終會得到300個region proposal。

兩者之間候選框差別巨大,因此,faster RCNN會準一點也是情理之中,而既然每個位置都要精修,當然效率就會低很多,也就不能滿足實時性要求了。另外,YOLO

精簡了網絡,比VGG要稍微計算量小一些,可能也會加快一些速度,但這些計算量比起前面提到的兩點已經不足為道。

YOLO對邊界框預測強加空間約束,因為每個網格單元只預測兩個盒子,只能有一個類別。這個空間約束限制了我 們的模型可以預測的鄰近目標的數量。我們的模型與群組中出現的小物體(比如鳥群)進行鬥爭。

YOLOv1算法理解