1. 程式人生 > 其它 >R-CNN系演算法

R-CNN系演算法

技術標籤:人工智慧演算法

Part 1理論知識學習:
首先我學習了R-CNN系的幾個主要演算法,
1.R-CNN
我在上一週瞭解了目標檢測的兩個主要任務為物體的分類和定位。為了完成這兩個任務,R-CNN的主要思想是利用計算機網路中滑動視窗的思想,採用對區域進行識別的方案。具體來說,就我理解應該是分以下四個步驟
一. 輸入圖片,用某種特定的演算法提取出2000個類別獨立的候選區
提取候選區。我們第一步的目的是獲得2000個目標候選區域,有很多演算法都可以完成這個任務,但是我看大多數用的好像都是一種叫Selective Search的演算法,這個演算法我大致看了一下。原理應該就是用傳統的方法將影象分成很多個小區域,再根據相鄰小區域的特徵,來合併這些小尺寸的區域,從而得到大尺寸的區域,實現候選去的選取。

二. 對每個候選區域用卷積神經網路(有待深入研究)獲取特徵向量
這一步主要使用CNN(convolutional neural networks)提取對應的特徵向量。用的是AlexNet模型,但是這裡好像涉及一個影象大小與模型相容的問題,而上一步用的selective search產生的區域大小和這個模型並不一致,R-CNN這個演算法暴力的將尺寸統一。
然後涉及到如何訓練資料的問題,這也分兩步走。
第一步是一個有監督的預訓練,採用ImageNet這個圖片資料庫作為樣本,只訓練和分類有關的引數(因為ImageNet資料只有分類,沒有位置標註),然後將圖片尺寸統一調整為227*227,最後一層為4097維向量->1000向量的對映。
第二步是針對特定樣本的微調,
在這裡插入圖片描述

然後採用訓練好的
三. 對每個區域的特徵向量,用向量機SVM分類
這一步我們首先向SVM輸入特徵向量,這裡的SVM我理解就是一個用於資料分類的分類器,然後得到輸出。這裡用於輸入的還是之前提到的ImageNet資料集。然後處理過程中,將2000×4096(2000個候選框,每個候選框4096個特徵向量)維特徵與SVM組成的權值矩陣4096×20相乘(這裡有20個SVM),以此過的2000×20維矩陣表示每個建議框是某個物體的得分。
然後再剔除一些重疊建議框,得到一些得分最高的候選框
四. 通過一個bounding box regression(邊框迴歸)來調整一下框的範圍和大小。

這一步主要是做邊框的修正工作,輸入卷積神經網路pool5層的4096維特徵向量,輸出為xy方向的縮放和平移,實現邊框的修正,在測試之前需要對迴歸器進行訓練。

R-cnn總結
總的來看其有兩個方面的突出點

  1. 用卷積神經網路進行特徵提取
  2. 使用邊框迴歸進行邊框的修正
    缺點也有
  3. 耗時比較長,不論是selective search還是序列cnn的傳播,都大大增加了時間的開銷
  4. 我發現我們需要單獨的訓練三個模組,包括cnn特徵向量的提取,SVM分類,邊框修正,這三個模組的分別訓練對儲存空間的消耗非常大。

2.Faster R-CNN
這個應該是比較常用的模型,與前者不同的是,其不使用selective search演算法,而通過一個Region Proposal Network (RPN)生成待檢測的區域,這使得生成Rol(region of interest,即感興趣區域)區域的時間大大的減少。
在這裡插入圖片描述

這幅圖詳細的解釋了Faster R-CNN的流程:

  1. 我們用共享卷積層來提取全圖的特徵 feature maps
  2. 把上一步得到的特徵圖譜輸入RPN,由RPN生成待檢測的框(即指定Rol的位置),這裡對Rol包圍框進行第一次修正
  3. Rol Pooling Layer根據剛才RPN的輸出,在第一步的feature map上提取出每個Rol對應的特徵,並將維度設定為特定值。
  4. 這一步使用到全連線層(即FC Layer)對框進行一個分類,並且進行第二次的包圍框的修正。
    我們可以看見Faster R-CNN實現了一種端到端的訓練,最大的特色就是用RPN來替代傳統的SS演算法,以此來獲取Rol。
    下週繼續深入的看一下RPN的具體內容。

Faster R-CNN的主要優點就是拋棄傳統的滑動視窗和SS方法,用RPN直接生成檢測框,大大的提升了檢測框的生成速度。
1.1 RPN的工作原理。
在這裡插入圖片描述

RPN分為兩條支線:

No.1上方一條主要通過Softmax來分類anchors(理解為一個個按照固定比例預定義的框,用來輔助模型進行訓練,讓模型對物體的大小和形狀有個大致認識,算是人為新增的先驗知識)來獲得foreground(前景,為檢測目標)和background(背景,非檢測目標)。
No.2而下方一條支線用於計算anchors的邊框偏移量,以此來獲取精確的proposals。
到了最後的Proposal層,其綜合foreground anchors和偏移量獲取proposals,同時剔除太小和超出邊界的proposals。至此就完成了目標定位的功能。
Tips:
Softmax:
為深度學習中非常重要的一個函式,把輸入對映為0-1之間的實數,並且歸一化保證和為1,多分類的概率和也為1。
可以分為兩部分來理解,對於max我們都很熟悉,比如有兩個變數a,b。如果a>b,則max為a,反之為b。用偽碼簡單描述一下就是 if a > b return a; else b。
但max很明顯是有問題的,如果將max看成一個分類問題,就是非黑即白,最後的輸出是一個確定的變數。更多的時候,我們希望輸出的是取到某個分類的概率,或者說,我們希望分值大的那一項被經常取到,而分值較小的那一項也有一定的概率偶爾被取到,所以我們就應用到了soft的概念,即最後的輸出是每個分類被取到的概率
Anchors:
理解為一個個按照固定比例預定義的框,用來輔助模型進行訓練,讓模型對物體的大小和形狀有個大致認識,算是人為新增的先驗知識。
我們知道RPN是依賴於一個共享特徵圖上的滑動視窗的,他為每個位置生成9種預先設定好比例的目標框即anchor。

Concluding:
總的來說RPN就是在原尺度的圖上,設定大量的候選anchor,緊接著我們去判斷這些anchor是屬於前景還是背景(即判斷這個anchor有沒有覆蓋目標),以及為屬於前景的anchor進行第一次座標修正。
Tips:
如何判斷前景還是背景:
使用SoftmaxLoss直接訓練,在訓練的時候排除掉了超越影象邊界的anchor。如果一個anchor與ground truth的IoU在0.7以上,那這個anchor就算前景(positive)。如果這個anchor與ground truth的IoU在0.3以下,那麼這個anchor就算背景(negative)。
邊框修正:
在這裡插入圖片描述

如圖綠色表示的是飛機的實際框標籤(ground truth),紅色的表示的其中一個候選區域(foreground anchor),即被分類器識別為飛機的區域,但是由於紅色區域定位不準確,這張圖相當於沒有正確檢測出飛機,所以我們希望採用一種方法對紅色的框進行微調,使得候選區域和實際框更加接近。