天天看點

R-CNN論文詳細解讀

R-CNN是13年https://arxiv.org/abs/1311.2524的論文。對計算機視覺的影響很大!

基礎知識掌握:

①先來簡單區分計算機視覺的任務:

R-CNN論文詳細解讀

簡單來說,分類(classify)、定位(localization)和檢測(detection)的差別如下: 

classify:是什麼? 

localization:在哪裡?是什麼?(單個目标) 

detection:在哪裡?分别是什麼?(多個目标)

②物體檢測算法中常用到的幾個概念:Bbox,IoU,非極大值抑制

Bounding Box(bbox):

bbox是包含物體的最小矩形,該矩形既不太大以至于留出太多非物體空間,也不太小以至于沒包住物體。

物體檢測中關于物體位置的資訊輸出是一組(x,y,w,h)資料,其中x,y代表着bbox的左上角(或者其他固定點,可自定義),對應的w,h表示bbox的寬和高.一組(x,y,w,h)可以唯一的确定一個定位框。

Intersection over Union(IoU):

對于兩個區域R和R′,則兩個區域的重疊程度overlap計算如下:

O(R,R′)=|R∩R′| / |R∪R′|

在訓練網絡的時候,我們常依據侯選區域和标定區域的IoU值來确定正負樣本。

非極大值抑制(Non-Maximum Suppression又稱NMS):

非極大值抑制(NMS)可以看做是局部最大值的搜尋問題,集通過IOU計算分數最高的框,然後計算與剛剛最高分數那個框有太多重合的部分的框都去掉,這樣就可以去掉那些不準确的框。

有了基礎知識,下面來介紹R-CNN的内容:

R-CNN論文詳細解讀

如上圖所示,R-CNN這個物體檢查系統可以大緻分為四步進行:

1、擷取輸入圖像,提取約2000個候選區域

2、将候選圖檔進行縮放

3、将候選區域分别輸入CNN網絡

4、将CNN的輸出輸入SVM中進行類别的判定

5、将特征輸入訓練好的線形回歸器中,得到更為精确的位置定位

上述五個步驟是一個大緻的過程,而且是一個檢測的過程,實際上訓練過程比較麻煩,下面開始詳細介紹。

一、候選區域的提取

近來有很多研究都提出了産生類别無關區域推薦的方法。比如: objectness(物體性),selective search(選擇性搜尋),category-independent object proposals(類别無關物體推薦),constrained parametric min-cuts(受限參最小剪切, CPMC),multi-scal combinatorial grouping(多尺度聯合分組),以及Ciresan等人的方法,将CNN用在規律空間塊裁剪上以檢測有絲分裂細胞,也算是一種特殊的區域推薦類型。由于R-CNN對特定區域算法是不關心的,是以我們采用了選擇性搜尋(selective search)以友善和前面的工作進行可控的比較。

選擇性搜尋知識可以看這篇文章

二、縮放候選區域

特征提取(Feature extraction) 

我們使用Krizhevsky等人所描述的CNN的一個Caffe實作版本對每個推薦區域抽取一個4096次元的特征向量把一個輸入為277*277大小的圖檔,通過五個卷積層和兩個全連接配接層進行前向傳播,最終得到一個4096-D的特征向量。讀者可以參考AlexNet獲得更多的網絡架構細節。 

為了計算region proposal的特征,我們首先要對圖像進行轉換,使得它符合CNNC的輸入(架構中的CNNC隻能接受固定大小:277*277)。這個變換有很多辦法。看下面

縮放分為兩大類(該部分在原文附錄A):

1)各向同性縮放,長寬放縮相同的倍數

  • tightest square with context:

    把region proposal的邊界進行擴充延伸成正方形,灰色部分用原始圖檔中的相應像素填補,如下圖(B)所示

  • tightest square without context:

    把region proposal的邊界進行擴充延伸成正方形,灰色部分不填補,如下圖(C)所示

2)各向異性縮放, 長寬放縮的倍數不同

不管圖檔是否扭曲,長寬縮放的比例可能不一樣,直接将長寬縮放到227*227,如下圖(D)所示

R-CNN論文詳細解讀

最後發現候選框周圍加上16的padding的效果最好。是以作者選擇了候選框周圍加上16的padding,再進行各向異性縮放。

三、測試方法

測試時其實分兩個結果

1.分類

在測試的時候,先對帶檢測圖像提取出約2000個候選區域,将每個區域都進行縮放,然後将縮放後的圖檔輸入CNN進行特征提取,對CNN輸出的特征用SVM進行打分(每類都有一個SVM,21類(20個分類+背景1個=21個)就有21個SVM分類器),對打好分的區域使用NMS即非極大值抑制(每類都單獨使用)。

到這裡分類就完成了,但是得到的位置隻是候選區在圖像中的位置,而候選區的位置并不一定就是ground truth,即檢測目标的真實位置。

2.定位(回歸)

将CNN對候選區域提取出的特征輸入訓練好的線形回歸器中,得到更為精确的位置定位,具體情況會在下面訓練方法中詳細介紹。但要明确的是,這些回歸器是按照類來訓練的,即每類分類完後進行回歸。

四、訓練方法

1、有監督的預訓練

預訓練采用了Caffe的CNN庫。訓練的時候,文章用了個trick,他先用ILSVRC2012資料庫訓練Alexnet,訓練的時候目标時圖檔分類,因為ILSVRC2012資料庫沒有分類的标定資料。這步稱為預訓練。

2、fine-tuning

為了讓我們的CNN适應新的任務(即檢測任務)和新的領域(變形後的推薦視窗)。我們隻使用變形後的推薦區域對CNN參數進行SGD訓練。我們替換掉了ImageNet專用的1000-way分類層,換成了一個随機初始化的21-way分類層,(其中20是VOC的類别數,1代表背景)而卷積部分都沒有改變。我們對待所有的推薦區域,如果其和真實标注的框的IoU>= 0.5就認為是正例,否則就是負例。SGD開始的learning_rate為0.001(是初始化預訓練時的十分之一),這使得調優得以有效進行而不會破壞初始化的成果。每輪SGD疊代,我們統一使用32個正例視窗(跨所有類别)和96個背景視窗,即每個mini-batch的大小是128。另外我們傾向于采樣正例視窗,因為和背景相比他們很稀少。

微調(fine-tuning)是當資料量不夠的時候,常用的一種訓練方式,即先用别的資料庫訓練網絡,然後再用自己的資料庫微調訓練。

3、目标種類分類器

思考一下檢測汽車的二分類器。很顯然,一個圖像區域緊緊包裹着一輛汽車應該就是正例。同樣的,沒有汽車的就是背景區域,也就是負例。較為不明确的是怎樣标注哪些隻和汽車部分重疊的區域。我們使用IoU重疊門檻值來解決這個問題,低于這個門檻值的就是負例。這個門檻值我們選擇了0.3,是在驗證集上基于{0, 0.1, … 0.5}通過網格搜尋得到的。我們發現認真選擇這個門檻值很重要。如果設定為0.5,會降低mAP5個點,設定為0,就會降低4個點。正例就嚴格的是标注的框。

一旦特征提取出來,并應用标簽資料,我們優化了每個類的線性SVM。由于訓練資料太大,難以裝進記憶體,我們選擇了标準的hard negative mining method(難負例挖掘算法,用途就是正負例數量不均衡,而負例分散代表性又不夠的問題,hard negative就是每次把那些頑固的棘手的錯誤,再送回去繼續練,練到你的成績不再提升為止.這一個過程就叫做’hard negative mining‘)

①在fine-tunning和SVM訓練這兩個階段,作者定義得正負樣例是不同的。

因為在訓練SVM時,正樣本為groundtruth,負樣本定義為與ground truth的IoU小于0.3的候選區域為負樣本,介于0.3與0.7之間的樣本忽略。

fine-tuning是擔心過拟合的原因,要擴大正樣本的樣本量,是以定義比較寬松,但是SVM是最終用于分類的分類器,而且SVM原理就是最小的距離最大化,越難分的資料越有利于SVM的訓練,是以對樣本的定義比較嚴格。

②為什麼單獨訓練了一個SVM而不是直接用softmax呢?

因為在訓練softmax的時候資料本來就不是很準确,而SVM的訓練使用的是hard negative也就是樣本比較嚴格,是以SVM效果會更好。

4、回歸器訓練

回歸器是線性的,輸入為Alexnet pool5的輸出。

bbox回歸認為候選區域和ground-truth之間是線性關系(因為在最後從SVM内确定出來的區域比較接近ground-truth,這裡近似認為可以線性關系)

訓練回歸器的輸入為N對值,

R-CNN論文詳細解讀

,分别為候選區域的框坐标和真實的框坐标,下面在不必要時省略i。這裡選用的Proposal必須和Ground Truth的IoU>0.6才算是正樣本。

從候選框P到預測框

R-CNN論文詳細解讀

的基本思路如下:

因為我們在分類之後得到候選框P

R-CNN論文詳細解讀

,其中

R-CNN論文詳細解讀

R-CNN論文詳細解讀

為候選框的中心點,

R-CNN論文詳細解讀

R-CNN論文詳細解讀

為候選框的寬高,下面介紹中所有框的定位都用這種定義,即x和y表示中心點坐标,w和h表示框的寬高。知道候選框的表示,那麼隻要估計出出候選框與真實框的平移量和尺度縮放比例,就可以得到我們的估計框了

1)先求平移量(Δx,Δy)

Δx=

R-CNN論文詳細解讀

, Δy=

R-CNN論文詳細解讀

即R-CNN論文裡面的:

R-CNN論文詳細解讀

,

R-CNN論文詳細解讀

2)算尺度放縮量

R-CNN論文詳細解讀
R-CNN論文詳細解讀
R-CNN論文詳細解讀

我們要學習的是

R-CNN論文詳細解讀

這四個變換,就可以得到估計框了。

這四個變換可以用下列公式表示:

R-CNN論文詳細解讀

上式中

R-CNN論文詳細解讀

為Alexnet pool5輸出的特征,是以要求

R-CNN論文詳細解讀

這四個變換,隻需求出

R-CNN論文詳細解讀

即可。

該回歸器的損失函數為:

R-CNN論文詳細解讀

上式中的

R-CNN論文詳細解讀

可以通過如下公式求出:

R-CNN論文詳細解讀
R-CNN論文詳細解讀
R-CNN論文詳細解讀
R-CNN論文詳細解讀

是以通過輸入的特征值訓練,進而求出

R-CNN論文詳細解讀

,就可以得到回歸器

參考https://www.jianshu.com/p/5056e6143ed5

繼續閱讀