【目標檢測從放棄到入門】SSD / RCNN / YOLO通俗講解

Remixxx發表於2020-03-27

最近有幸在專案上接觸到了深度學習中的目標檢測領域,通過數週來的實踐和相關知識的查閱,現在也算是在能在目標檢測入門處徘徊了。這篇文章會在三大目標檢測經典演算法原理上加上自己的理解,希望大家看了此文能不再一臉懵逼地出去。

目標檢測

什麼是目標檢測

一句話概括即:在檢視中檢測出物體的【類別】和【位置】。

【目標檢測從放棄到入門】SSD / RCNN / YOLO通俗講解

目標檢測的三大演算法

上面我們已經說了,目標檢測就是分類和定位(迴歸,注:迴歸即得到確定值)的問題。分類問題我們可以輸入圖片至分類器處理,而定位問題需要將物體框選出來,那麼怎麼確定選框呢?這裡我們可能需要一堆的「侯選框」。

看到這裡我們大概確定了目標檢測問題需要兩步走:

  1. 侯選框選取;
  2. 將侯選框中的物體分類;(後面需要剔除得分低的框)

這樣就得到了【兩步走(Two-Stage)】的演算法原型,代表是【RCNN】,之後的【Fast-RCNN】、【Faster-RCNN】都是基於它迭代的。

那能不能在侯選框選取的同時預測分類呢?也是可以的,這樣就有了【SSD】和【YOLO】(One-Stage)。

下面我們來「稍微」詳細地說一下每個演算法具體的檢測步驟。(非科班同學,有錯誤還望指正~)

RCNN及其迭代物(2-stage)

1、主要思想

所謂RCNN就是【Region】+【CNN】。完美地對應到了上述說的選框+分類。

關於CNN是什麼,如果想要深入的話大家可以看看這篇文章:一文看懂卷積神經網路。這裡也簡要概括下,CNN即對輸入圖片通過【降維】(卷積、啟用、池化)等操作得到【圖片的特徵向量】作為【全連線層(就是多個神經網路層合併起來)】的輸入,最後輸出結果。

可以看下圖,[x1, x2...xn]就可以看作是降維後的特徵向量,然後通過神經網路處理得到輸出的結果。

【目標檢測從放棄到入門】SSD / RCNN / YOLO通俗講解

Region就是我們上面提到的侯選框,RCNN對於候選區域的確定是通過視窗掃描的方式。玩個經典遊戲,在鳥中找到烏。我們可能會用眼睛逐行逐字掃描,這裡我們可以將每個字看成一個格子,然後判斷格子裡面的字是不是烏。這個過程其實就是對RCNN的粗糙理解了。前期的選區選擇主要採用的是【滑動視窗】技術,就是在檢視起始點中確定一個選框,然後每次將選框移動特定的距離,再對視窗中的物體進行檢測。

【目標檢測從放棄到入門】SSD / RCNN / YOLO通俗講解

2、RCNN

看到上面,相信大家已經覺察到滑動視窗技術一個明顯的弊端,我們不好確定初始視窗是否恰好能包裹到需要檢測的物體,這就需要對初始視窗尺寸做非常多次的嘗試,如果待檢測物體數量較多,待檢測視窗的個數更是成倍的增加,而且每次嘗試都包含一次完整的CNN運算過程,這顯然是非常耗時的。

所以RCNN在侯選框的選擇上由滑動視窗技術改成了SS(selective search選擇性搜尋)技術。意思是通過紋理、顏色將檢視劃分開,再從中確定大約2000個區域作為候選區域,然後對其進行分類處理。

3、Fast-RCNN

Fast-RCNN的改進點在於:

  1. 首先將圖片輸入到CNN得到特徵圖
  2. 劃分出特徵圖中的SS區域(這個在原圖中得到)得到特徵框,在ROI池化層中將每個特徵框池化到統一大小
  3. 最後將特徵框輸入全連線層進行分類和迴歸

ROI池化層是將不同尺寸的特徵框轉化層相同尺寸的特徵向量,以便進行後續的分類和輸出迴歸框操作。它可以加速處理速度。

4、Faster-RCNN

Faster—RCNN步驟與Fast-RCNN類似。比較大的突破是:將侯選框提取技術由SS改為RPN。 RPN的簡要原理是:

  1. 為輸入特徵圖的每個畫素點生成9個侯選框,如下圖紅框處;

【目標檢測從放棄到入門】SSD / RCNN / YOLO通俗講解

  1. 對生成的基礎侯選框做修正處理,就是刪除不包含目標的候選框;
  2. 對超出影像邊界的侯選框做裁剪處理
  3. 忽略掉長或者寬太小的侯選框
  4. 對當前所有候選框做得分高低排序,選取前12000個侯選框
  5. 排除掉重疊的侯選框
  6. 選取前2000個做二次修正

SSD(1-stage)

對比與RCNN,SSD省去了候選區域的選擇,而是將圖片的feature maps分成n*n(下圖n最大為38)個塊,在每個塊的中心點預設4~6個預設候選區域。

如下圖,SSD首先是將圖片進行特徵提取,然後再加入多個輔助卷積層,設定各層的預設候選區域。設定多個卷積層的原因是為了更好地識別不同尺寸的目標。

【目標檢測從放棄到入門】SSD / RCNN / YOLO通俗講解

訓練時,將生成的預設候選區域與實際標註區域做交併集合處理,具體計算為:IoU =(候選 ∩ 實際)/(候選 ∪ 實際),若IoU值大於0.5,即其與實際區域正匹配,這樣我們就能得到目標的大致形狀。下圖為8*8的圖片,在檢測人時,SSD在單元格(4,5)的中心點(綠色點)處設定了3個預設侯選框(綠框),與真實框(藍框)對比,可以發現1、2的相似度比較高。

【目標檢測從放棄到入門】SSD / RCNN / YOLO通俗講解

這裡簡單說明下多卷積層的用途。下圖中,b為8 * 8特徵圖,c為4 * 4特徵圖。對於貓的檢測,圖b可以較好地確定選擇區域。而對於狗的檢測,圖b的候選區域(右側)顯然沒很好地將目標包裹,而c特徵圖則比較好地處理了對狗的檢測。

因此,高解析度特徵圖有利於檢測小尺寸物體,低解析度特徵圖有利於檢測大尺寸物體

【目標檢測從放棄到入門】SSD / RCNN / YOLO通俗講解

YOLO(1-stage)

YOLO大致的原理與SSD相似。但YOLO在檢測時只利用了最高層的feature maps,而不同於SSD使用了多個輔助卷積層生層多個尺寸的feature maps(金字塔結構)。這裡就不再贅述了。

相關文章