1. 程式人生 > >Rich feature hierarchies for accurate object detection and semantic segmentation Tech report 論文解讀

Rich feature hierarchies for accurate object detection and semantic segmentation Tech report 論文解讀

一、R-CNN的三個模組

  1. 每個圖片生成獨立類別的 region proposal,這些 proposals 定義了可用於檢測器的候選框集合
  2. 使用大型的卷積神經網路,可以從每個region proposal中提取固定長度的特徵向量
  3. 一組能區分每個類別的線性向量機組

 

二、測試階段

1.Region Proposal

論文中提到了很多生成獨立類別 region proposal的方法,作者選擇了selective search的方法確定2000個region proposal,關於selective proposal的詳述,請參照論文《Selective Search for Object Recoginition》,這裡簡單說明下使用到的區域合併演算法:

輸入:圖片(RGB通道)

輸出:目標位置

1.使用《Efficient Graph-Based Image Segmentation》中的方法獲取原始分割區域:R=\{r_1,r_2,...,r_n\}

2.初始化相似度集合S=\phi

3.對相鄰區域(r_i,r_j),計算兩區域的相似度Similarity(r_i,r_j),並加入到相似度集合S

4.當相似度集合不為空時(此時集合S內是相鄰區域的相似度)

(1) 選相似度最高的區域Similarity(r_i,r_j)

(2) 將兩個區域合併成一個區域r_t

(3) 從相似度集合S去除與 r_i 相鄰相似度的集合,從相似度集合S去除與 r_j 相鄰相似度集合

(4) 計算 r_t 與其相鄰區域的相似度。

(5) 把 r_t

 加入到區域集合 R中

5.獲取R中每個區域的bbox

 

2.Feature extraction

從每一個region proposal提取4096維度的特徵向量。提取的方法是使用訓練好的AlexNet模型,為了能適應網路227\times227的固定輸入,所以需要將每個region proposal調整到這個尺寸。

調整的方法有很多,論文這裡使用了最簡單的方法。

即對整個區域不保持橫縱比縮放到所需要的大小。在縮放之前,首先擴大被縮放區域,讓縮放後的區域邊界與之前的區域邊界相隔p個padding,本文中取的是16個,然後不管影象的大小強制縮小到所需求的尺寸。

 

3.Test-time detection

之前使用selective search在測試圖片上提取了2000個region proposal,然後把每個region proposal歸一化到227\times227尺寸,輸入到AlexNet網路中,每個region提取到4096個特徵向量,這樣有2000\times4096維度的特徵,再把這些特徵向量匯入到事先訓練好的SVM中,分別對每個類別進行打分,選擇分數最高的作為最終預測結果。這時候可能會出現多個bbox,使用NMS對每一類剔除IOU與得分較高的selected region

 

三、訓練階段

1.Supervised pre-training

使用ILSVRC2012只有影象類別標籤,沒有影象物體標註的資料集,預先訓練好網路模型AlexNet

 

2.Domain-specific fine-tuning

這一階段使用既有影象中物體的類別標籤,又有影象物體的位置的PASCAL VOC 2012資料集,針對AlexNet網路進行一些微調,將原來1000個類別的輸出換成21個類別(20個類和1個背景),選擇學習率為0.001,每一個mini-batch包含有32個正樣本和96個副樣本。通過每個region proposal與ground-truth box的IOU來判斷正負樣本,如果IOU大於等於0.5就是正樣本,反之為負樣本。總的來說就是為了訓練AlexNet網路的引數。

 

3.Object category classifiers

在訓練線性SVM前,需要劃分正負樣本。包含在ground-truth box內的region proposal作為正樣本,完全不包含在ground-truth box的region proposal作為負樣本,同時設定閾值,對ground-truth box 與 region proposal的 IOU<0.3 的也作為負樣本,剩餘的全部丟棄。然後針對每一個類別訓練一個線性的SVM分類器。然而這會帶來一個問題就是,正樣本數量相對於負樣本數量會少很多,於是作者採用了standard hard negative mining method 的方式訓練。簡單解釋下就是在訓練過程中,有一些得分很高的false positive,這就是所說的hard negative,分類器會誤判這些hard negative,那麼簡單的方法就是把這些拿出來再訓練一次。

讀到這裡,很不清楚為什麼不採用CNN進行分類,還有為什麼重新設定了IOU的閾值。這在附錄中解釋基本上都是從實驗結果做出的改善。

 

 4.Bounding-box regression

設第 i 個region proposal P^i=(P^i_x,P^i_y,P^i_w,P^i_h),其中前量兩個表示中點座標,後兩個分別表示寬和高,為簡單起見,後面就不考慮上標 i了。ground-truth box的數學表示式:G=(G_x,G_y,G_w,G_h),所以現在我們希望能學習一種轉化方式,可以將 P 對映到 G

對映d關係如下:

\tilde{G_x}=P_wd_x(P)+P_x \ \ \ \ \ \ \ \ \ \ \ \ (1)

\tilde{G_y}=P_hd_y(P)+P_y \ \ \ \ \ \ \ \ \ \ \ \ (2)

\tilde{G_w}=P_wexp(d_w(P)) \ \ \ \ \ \ \ \ \ \ \ \ (3)

\tilde{G_h}=P_hexp(d_h(P)) \ \ \ \ \ \ \ \ \ \ \ \ (4)

 

d_*(P)表示(d_x,d_y,d_h,d_w)中的一種,在AlexNet的pool5層,抽象整個線性關係為:

d_*(P)=w_*^T\phi_5(P) \ \ \ \ \ \ \ \ \ \ \ \ (5)

這裡的\phi(P)是Proposal的特徵向量,其中w_*^T就是要學習的迴歸引數。

 

因此損失函式為:

w_*=arg\min \limits_{\tilde{w}_*}\sum_{i}^{N}(t_*^i-\tilde{w}_*^T\phi(P^i))^2+\lambda\left \| \tilde{w}_* \right \|^2 \ \ \ \ \ \ \ \ \ \ \ \ (6)

 

上述的損失函式有個引數t,定義如下:

t_x=(G_x-P_x)/P_w \ \ \ \ \ \ \ \ \ \ \ \ (7)

t_y=(G_y-P_y)/P_h \ \ \ \ \ \ \ \ \ \ \ \ (8)

t_w=log(G_w/P_w) \ \ \ \ \ \ \ \ \ \ \ \ (9)

t_h=log(G_h/P_h) \ \ \ \ \ \ \ \ \ \ \ \ (10)

 

這裡做一個總的說明,來描述上面函式式表達的意思,首先P,G,\tilde{G}分別表示region proposal box,ground-truth box,bounding box

函式關係式的目的式尋找到一個對映d,使:d(P)=\tilde{G}\approx G

簡單來就是讓P經過一個平移或者縮放過程得到\tilde{G}

(1)(2)式子代表平移,(3)(4)代表縮放,現在的問題式如何得到對映關係d,因此定義(6)式的loss函式,這裡的 t 表示原始P與真正的結果G之間的偏移值,如(7)(8)(9)(10)式