YOLOv1,v2,v3,v4,v5 發展史

YOLO 系列算法是目標檢測 one-stage 類的代表算法,本文將從 問題背景,創新點等方面比較,瞭解它們的的發展歷程。


一、任務描述


目標檢測是爲了解決圖像裏的物體是什麼,在哪裏的問題。輸入一幅圖像,輸出的是圖像裏每個物體的類別和位置,其中位置用一個包含物體的框表示。

查看源圖像


需要注意,我們的目標,同時也是論文中常說的感興趣的物體,指我們關心的類別(行人檢測只檢測人,交通檢測只關心交通工具等),或者數據集包含的類別,並不是圖像裏所有的物體都是目標,比如建築,草坪也是物體,但他們常常是背景。

從計算機視覺的角度看,目標檢測是分類+定位,從機器學習的角度看,目標檢測是分類+迴歸。

二、設計思想


目標檢測架構分爲兩種,一種是two-stage,一種是one-stage,區別就在於 two-stage 有region proposal 過程,類似於一種海選過程,網絡會根據候選區域生成位置和類別,而 one-stage 直接從圖片生成位置和類別。

今天提到的 YOLO 就是一種 one-stage 方法。

YOLO 是 You Only Look Once 的縮寫,意思是神經網絡只需要看一次圖片,就能輸出結果。

img

YOLO 一共發佈了四個版本,其中 YOLOv1 奠定了整個系列的基礎,後面的系列就是在第一版基礎上的改進,只爲提升性能。

YOLO的檢測方法如下:

  • 將輸入圖像劃分爲 S×S 網格(grid),比如這裏劃分成 7×7=49 個 grid,如果目標的中心落入網格單元,則該網格單元負責檢測該目標。注意不是整個物體落入單元格,只需要物體中心在即可。

在這裏插入圖片描述

 

  • 每個網格單元預測 B(文中 B=2) 個邊界框和這些框的置信度得分。這個分數反映這個框包含物體的概率 Pr(Object) 以及預測框的位置準確性 IOU,所以置信分數也由這兩部分定義:
  • 每個 bounding box 都要包含 5 個預測值,x, y, w, h, confidence。(x,y)框中心是相對於網格單元的座標,w 和 h 是框相當於整幅圖的寬和高,confidence 代表該框與 ground truth 之間的 IOU(框裏沒有物體分數直接爲 0 )

在這裏插入圖片描述

 

  • 因爲位置和類別需要同時預測,所以每個單元格除了輸出 bounding box 也輸出物體的條件概率(該物體屬於某一類的概率,當然這些概率以包含對象的網格單元爲條件)。每個網格單元輸出一個概率集合,不考慮這個 grid 預測幾個 bounding box。

在這裏插入圖片描述

  •  

測試階段,在測試時,我們將條件分類概率與各個框的置信度預測相乘,作爲每個框特定於每個類的置信分數(這個分數編碼了類別和位置兩部分信息)。
與 R-CNN 系列方法相比:

R-CNN 及其變體採用 region proposals 而不是滑動窗口法找物體,是一種多階段方法。調網絡的時候需要分開調,運行慢。

YOLO 與 R-CNN 相似的地方是在網格單元找可能的邊界框,用 CNN 提取特徵。不同的是,加在網格單元的空間限制有助於防止同一個目標的重複檢測,預測的邊界框也少(98 個),還有把多個階段結合成一個階段。

三、發展歷程


1. YOLOv1


問題背景

之前 two-stage 方法如 R-CNN 把檢測問題分成兩部分,先生成候選區域(region proposal),再用分類器對區域分類,多階段訓練導致不易優化。

創新點

把檢測當作迴歸問題,用一個網絡輸出位置和類別,實現了一個 unified system,從檢測的角度是 one-stage的

訓練流程

和 R-CNN 差不多

首先 ImageNet 1000類 競賽數據集上對卷積層進行預訓練
然後再把網絡根據檢測任務微調
檢測流程

輸入一幅多目標圖像
將圖像劃分成多個網格
通過網絡得到每個網格的分類概率,以及各網格預測的框+置信度
針對每個框,把概率與置信分數相乘,作爲每個框特定於每個類的置信分數
輸出位置和類別信息


優點

快。因爲迴歸問題沒有複雜的流程(pipeline)。
可以基於整幅圖像預測(看全貌而不是隻看部分)。與基於滑動窗口和區域提議的技術不同,YOLO在訓練和測試期間會看到整個圖像,因此它隱式地編碼有關類及其外觀的上下文信息。因爲能看到圖像全貌,與 Fast R-CNN 相比,YOLO 預測背景出錯的次數少了一半。
學習到物體的通用表示(generalizable representations),泛化能力好。因此,當訓練集和測試集類型不同時,YOLO 的表現比 DPM 和 R-CNN 好得多,應用於新領域也很少出現崩潰的情況。


缺點

空間限制:一個單元格只能預測兩個框和一個類別,這種空間約束必然會限制預測的數量;
難擴展:模型根據數據預測邊界框,很難將其推廣到具有新的或不同尋常的寬高比或配置的對象。由於輸出層爲全連接層,因此在檢測時,YOLO 訓練模型只支持與訓練圖像相同的輸入分辨率。
網絡損失不具體:無論邊界框的大小都用損失函數近似爲檢測性能,物體 IOU 誤差和小物體 IOU 誤差對網絡訓練中 loss 貢獻值接近,但對於大邊界框來說,小損失影響不大,對於小邊界框,小錯誤對 IOU 影響較大,從而降低了物體檢測的定位準確性。

2. YOLOv2


問題背景

 

YOLOv1 檢測性能低


當前的檢測任務受數據集標籤的限制(數據集必須有標籤或通過分類賦予標籤)。但是,標記檢測圖像比標記分類圖像昂貴得多,所以檢測數據和分類數據不是一個規模。
創新點

針對第一個問題,使用一些方法提升 YOLOv1 的性能,得到 YOLOv2。
針對第二個問題,提出了 ImageNet 和 COCO 數據集的結合方法,以及聯合訓練方法,訓練 YOLOv2 後得到的模型叫 YOLO9000。


提升性能的方法

Accuracy: Batch Normalization, High Resolution Classifier, Convolutional With Anchor Boxes, , Direct location prediction, Fine-Grained Features, Multi-Scale Training
Speed: 提出一個新網絡 Darknet-19
訓練流程
論文提出了一種聯合訓練算法,該算法可以在檢測和分類數據上訓練目標檢測器。 利用標記的檢測圖像來學習精準定位,同時使用分類圖像來增加其“詞彙量”和健壯性。

分類檢測數據集結合方法:

檢測數據集的標籤少且普通,分類數據集的標籤多且具體,如果我們想在兩個數據集上訓練,就得把它們的標籤合併起來。很多分類方法都用一個 softmax layer ,但它的前提是假設所有類互斥,但我們的數據集類別是不都是互斥的(有可能是包含關係,例如狗和金毛犬),所以我們使用了一個多標籤模型來組合數據集(無互斥的要求),及使用多個 softmax 。

大多數分類方法都假定標籤採用扁平結構,但是對於組合數據集我們需要層次化的結構。
ImageNet 標籤採用有向圖結構。在這裏,作者把數據集的結構簡化爲結構樹(hierarchical tree)。

通過改造圖,最後得到一個 WordTree,這樣每個節點/標籤都有自己的概率,解決了類別之間不互斥的問題,就能在檢測集和分類集上聯合訓練。

聯合訓練方法:

把檢測和分類數據混合,訓練過程中遇到帶標籤的檢測圖像,就基於 YOLOv2 整個損失函數進行反向傳播,遇到分類圖像,只反向傳播網絡的分類損失。

3. YOLOv3


問題背景

YOLOv3 的提出不是爲了解決什麼問題,整篇論文其實是技術報告。
YOLOv3 在 YOLOv2 基礎上做了一些小改進,文章篇幅不長,核心思想和 YOLOv2、YOLO9000差不多。
模型改進

邊界框預測:定位任務採用 anchor box 預測邊界框的方法,YOLOv3 使用邏輯迴歸爲每個邊界框都預測了一個分數 objectness score,打分依據是預測框與物體的重疊度。如果某個框的重疊度比其他框都高,它的分數就是 1,忽略那些不是最好的框且重疊度大於某一閾值(0.5)的框
類別預測:和 YOLOv2 一樣,YOLOv3 仍然採取多標籤分類
多尺度預測
使用新網絡 Darknet-53 提取特徵


4. YOLOv4


問題背景

YOLO 原作者之前宣佈退出CV界,YOLOv4 的作者其實不是前三篇 YOLO 的一作
YOLOv4 是對 YOLOv3 的一個改進。它的改進方法就是總結了幾乎所有的檢測技巧,又提出一點兒技巧,然後經過篩選,排列組合,挨個實驗(ablation study)哪些方法有效。
值得注意的是文章第二部分相關工作,簡直就是目標檢測的一個簡單綜述,閱讀該部分,你就能瞭解模型及方法,如果它提到的每個方法你都瞭解,說明你在這個方向的研究較全面深入(我沒達到)。
框架方法
下面這幅論文中的圖介紹了 YOLOv4 檢測器的構成及使用的訓練方法,這些是經過大量實驗選出的性能最好的組合

5.YOLOv5

四、總結


回顧 YOLO 系列的發展,我們可以看出 YOLO 後期沒有提出新穎的想法,更重視應用落地。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章