[ 教學 ]  關於物件偵測 PART II : R-CNN
  回覆文章總數:

關於物件偵測 PART II : R-CNN

  By : Leadtek AI Expert     239

嗨~大家~還記得我們上次介紹過的一階段物件偵測的YOLO (v1~v3)嗎? 

甚麼!忘光光了嗎? 來來來~我們來複習一下


物件偵測(Object Detection)主要分成兩種不同方法實現,以程序來說可分成一階段的物件偵測(one-stage object detection)和二階段的物件偵測(two-stage object detection),常見的應用方法如下:

一階段物件偵測:YOLO (v1~v3)
二階段物件偵測:R-CNN (或Fast R-CNN及Faster R-CNN)

今天我們要來介紹二階段的R-CNN 應用方法。


R-CNN

當圖片輸入到R(region)-CNN後,先經過了Region Proposals階段找出可能有物件的區域,再經由feature extractor擷取特徵,確認該區域是否有物件後 (object localization),最後輸出類別結果 (classification)。

 


R-CNN在Region Proposals階段所使用的方法為Selective Search (簡稱SS)。Selective Search計算了原始圖片各地方與鄰近區域之間的相似度後,將相似度最高的區域合併成一個群組(group),經由迭代後,最後整張圖形成一個group,此演算法稱為Hierarchical Grouping Algorithm。

 

圖片來源


R-CNN進行步驟為何?

R-CNN一般是以下列步驟進行分類物件篩選

1. 在原圖中找出2000個可能有物件的區域 (Region Proposals)。

2. 將該區域變更尺寸(resize)至227x227 (AlexNet) / 224x224 (VGG16),經由CNN擷取特徵。

3. 最後輸出層 (4096維)分別預測類別 (SVMs)及預測框的修正 (Bbox reg)。

 

圖片來源


R-CNN缺陷:

此類型的方法最大的缺點除了速度較慢外,並且要求Region Proposal尺寸一致,導致因經過尺寸變化使得影像失真,而丟失原有訊息或引入太多背景資訊,最後造成準確率下降。



Fast R-CNN:

由於在R-CNN中利用SS得到的Region Proposals都會進入CNN做特徵擷取,所以有2000個區域就要做2000次特徵擷取動作。而事實上在CNN做特徵擷取時,有些Region Proposal是有部分區域互相重疊的,這意味著在CNN特徵擷取階段時重複計算了重疊的地方。

圖片來源


在特徵圖上的Region Proposals我們稱為region of interest (ROI),Fast R-CNN將所有的ROI resize到6x6的尺度,再經由fully connected layers (FCs),最後輸出預測框的回歸值 (平移縮放量,Linear)以及類別誤差 (softmax)。


圖片來源

Fast R-CNN優勢及缺點:

Fast R-CNN改善R-CNN模型運算時間,因為只需要做一次CNN,所以有效節省整體運算時間,並且使用單一網路,也簡化了模型訓練過程。不過在找出候選框的過程,其實也非常耗時,所以為了解決這項問題,Faster R-CNN也就誕生了。



Faster R-CNN:

Faster R-CNN為了使得在預測時的速度提升,捨棄了SS演算法,加入了一個為CNN架構的Region Proposal Network (RPN),來獲取Region Proposals。

 

圖片來源


下面透過一張圖,更仔細說明在feature extractor輸出特徵圖後的流程。

 


其中RPN代替SS演算法接在最後一層卷積層後,並且由RPN進行訓練後得到候選區域。RPN流程則如下圖所示。

 


在Faster R-CNN中引入了anchor box,所以估計預測框的回歸數值改成了對於anchor box的平移縮放量。Anchor box為自定義三個尺寸大小為(8, 16, 32),長寬比例為: (0.5, 1, 2),所以anchor box的數量為3 * 3 = 9 = K。另外,因為過程總共做了4次的maxpooling,Feature map上 (8, 16, 32)映射在原圖的尺寸為(128, 256, 512),放大了16倍。

 

圖片來源



關於RPN:

於RPN Region Proposal階段部分,RPN會從一個特徵圖輸出兩個卷積層,其中channel數為2K的卷積層則表示為某anchor box是否為物件的機率(foreground),或者是背景的機率(background)。因為anchor box有9個,所以總共通道數為2 * 9 = 18預測值。channel數為4K的卷積層則表示為某anchor box與真實框之間的平移縮放量(𝒕_𝒙, 𝒕_𝒚, 𝒕_𝒘, 𝒕_𝒉) ,所以總共通道數為4 * 9 = 36預測值。

至於RPN是如何定義正負樣本?原圖在Feature extractor後輸出得到的特徵圖,Faster R-CNN在該特徵圖每一元素的中心點設為anchor point,並將9種anchor box 與anchor point重疊後,計算anchor box與真實框之間的IOU。

IOU如果大於閥值 (0.7),則該位置的該anchor box為正樣本;IOU小於閥值(0.3),則該位置的該anchor box為負樣本。由於有些真實框可能分配不到anchor box做預測,所以Faster R-CNN也把與真實框有最大的IOU的anchor box設為正樣本。


關於ROI:

RPN輸出ROI流程如下所示。

1. 預測出正樣本的anchor box,經由box線性回歸修正後得到ROI。

2. ROI依據foreground機率由高到低排序,取前6000個ROI。

3. 丟棄超出圖片邊界和尺寸過小的ROI。

4. 做Non-maximum suppression過濾位置與大小相近的ROI。

5. ROI依據foreground機率由高到低排序,取前300個ROI當作RPN的輸出。


RPN輸出的ROI由於尺寸的大小不一,最後都會resize到7x7的大小 (通道數保持不變),當作後面classifier的輸入。可以下圖腳踏車為例了解。

圖片來源


類別的輸出層為類別數量+1背景值,當我們找到了最高機率對應的類別時 (假設為腳踏車),在ROI線性回歸相對應位置則是ROI應修正的平移縮放量。

 

圖片來源

整體來說,從R-CNN、Fast R-CNN至Faster R-CNN,基於深度學習目標檢測的流程變得越來越精簡,精確度越來越高,速度也越來越快。而基於Region Proposal的R-CNN系列目標檢測方法是當前目標檢測技術領域最主要的一個分支。


以下是回覆文