經典影象處理演算法–YOLO,從yolov1到yolov4的版本迭代之路

YOLOV1

Yolo演算法採用一個單獨的CNN模型實現end-to-end的目標檢測,核心思想就是利用整張圖作為網路的輸入,直接在輸出層回歸 bounding box(邊界框) 的位置及其所屬的類別。

輸入圖像resize到448x448,然後送入CNN網路,最後處理網路預測結果得到檢測的目標。相比R-CNN演算法,其是一個統一的框架,其速度更快。

  • Yolo演算法模型的主體實現邏輯:採用預設預測區域的方法來完成目標檢測,具體而言是將448x448原始影象劃分為 7x7=49 個網格(grid),每個網格允許預測出2個邊框(bounding box,包含某個物件的矩形框),總共 49x2=98 個bounding box。我們將其理解為98個預測區,很粗略的覆蓋了圖像的整個區域,就在這98個預測區中進行目標檢測。
  • 其中每個網格中所對應生成的兩個bounding box,屬於隨機生成,後期需要不斷的透過回歸來更新bounding box框的位置。
  • 損失函式:計算思路分類誤差平方和
  • 模型預測

將圖像resize成448x448的大小,送入到yolo網路中,輸出一個 7x7x30 的張量(tensor)來表示圖像中所有網格包含的物件(概率)以及該物件可能的2個位置(bounding box)和可信程度(置信度)。在採用NMS(Non-maximal suppression,非極大值抑制)演算法選出最有可能是目標的結果。

  • 優缺點

演算法速度快;
準確率會打折扣
對於小目標和靠的很近的目標檢測效果並不好

YOLOV2

YOLOv2相對v1版本,在繼續保持處理速度的基礎上,從預測更準確(Better),速度更快(Faster),識別物件更多(Stronger)這三個方面進行了改進。其中識別更多物件也就是擴展到能夠檢測9000種不同物件,稱之為YOLO9000。 下面我們看下yoloV2的都做了哪些改進?

  • batch normalization(批標準化)

批標準化有助於解決反向傳播過程中的梯度消失和梯度爆炸問題,降低對一些超引數的敏感性,並且每個batch分別進行歸一化的時候,起到了一定的正則化效果,從而能夠獲得更好的收斂速度和收斂效果。在yoloV2中卷積後全部加入Batch Normalization

  • 使用高解析度影象微調分類模型

YOLOV2在採用 224x224 影象進行分類模型預訓練後,調整部分(再採用 448x448 的高解析度樣本對分類模型進行微調(10個epoch),使網路特徵逐漸適應 448x448 的解析度)。然後再使用 448x448 的檢測樣本進行訓練,緩解了解析度突然切換造成的影響。

  • 採用Anchor Boxes

YOLO1並沒有採用先驗框,並且每個grid只預測兩個bounding box,整個影象98個。YOLO2如果每個grid採用5個先驗框,總共有13x13x5=845個先驗框。透過引入anchor boxes,使得預測的box數量更多(13x13xn)。

  • 聚類選取anchor尺度

Faster-rcnn選擇的anchor比例都是手動指定的,但是不一定完全適合資料集。YOLO2嘗試統計出更符合樣本中物件尺寸的先驗框,這樣就可以減少網路微調先驗框到實際位置的難度。YOLO2的做法是對訓練集中標註的邊框進行聚類分析,以尋找聚類的頻率最高的前五種尺寸最為anchor box。

  • 細粒度特徵融合
    YOLO2引入一種稱為passthrough層的方法在特徵圖中保留一些細節訊息。具體來說,就是在最後一個pooling之前,特徵圖的大小是26x26x512,將其1拆4,直接傳遞(passthrough)到pooling後(並且又經過一組卷積)的特徵圖,兩者疊加到一起作為輸出的特徵圖。
  • 多尺度訓練
    YOLO2中沒有全連接層,可以輸入任何尺寸的影象。因為整個網路下採樣倍數是32,採用了{320,352,…,608}等10種輸入影象的尺寸,這些尺寸的輸入影象對應輸出的特徵圖寬和高是{10,11,…19}。訓練時每10個batch就隨機更換一種尺寸,使網路能夠適應各種大小的物件檢測。

YOLOV3

說明:yoloV3以V1,V2為基礎進行的改進,主要有:利用多尺度特徵進行目標檢測;先驗框更豐富;調整了網路結構;物件分類使用logistic代替了softmax,更適用於多標籤分類任務。
特點:針對小目標,精度有顯著提升

  • 利用多尺度特徵進行目標檢測
  • 網路越深,特徵圖就會越小,所以網路越深小的物體也就越難檢測出來
  • 在實際的feature map中,隨著網路深度的加深,淺層的feature map中主要包含低級的訊息(物體邊緣,顏色,初階位置訊息等),深層的feature map中包含高等訊息(例如物體的語意訊息:狗,貓,汽車等等)。因此在不同級別的feature map對應不同的scale,所以我們可以在不同級別的特徵圖中進行目標檢測
  • 綜述,即在淺層網路中檢測小目標,在深層網路中檢測大型目標;

當前層的feature map會對未來層的feature map進行上採樣,並加以利用。因為有了這樣一個結構,當前的feature map就可以獲得「未來」層的訊息,這樣的話低階特徵與高階特徵就有機融合起來了,提升檢測精度。在YOLOv3中,就是採用這種方式來實現目標多尺度的轉換的。

  • 先驗框更豐富;

  • 調整了網路結構
    在基本的影象特徵選取方面,YOLO3採用了Darknet-53的網路結構(含有53個卷積層),它借鑒了殘差網路ResNet的做法,在層之間設定了shortcut,來解決深層網路梯度的問題,shortcut如下圖所示:包含兩個卷積層和一個shortcut connections。

    yoloV3的模型結構如下所示:整個v3結構裡面,沒有池化層和全連接層,網路的下採樣是透過設定卷積的stride為2來達到的,每當透過這個卷積層之後影象的尺寸就會減小到一半。

  • 物件分類使用logistic代替了softmax,更適用於多標籤分類任務

預測物件類別時不使用softmax,而是被取代為一個1x1的卷積層+logistic啟動函式的結構。使用softmax層的時候其實已經假設每個輸出僅對應某一個單個的class,但是在某些class存在重疊情況(例如woman和person)的資料集中,使用softmax就不能使網路對資料進行很好的預測。

  • 輸入與輸出

YOLOV4

yoloV4總結了大部分檢測技巧,然後經過篩選,排列組合,挨個實驗(ablation study)哪些方法有效,總體來說,Yolov4並沒有創造新的改進,而是使用了大量的目標檢測的技巧。