目標檢測(一) R-CNN


R-CNN全稱為 Region-CNN,它是第一個成功地將深度學習應用到目標檢測的算法,后續的改進算法 Fast R-CNN、Faster R-CNN都是基於該算法。

 

傳統方法 VS R-CNN

傳統的目標檢測大多以圖像識別為基礎。一般是在圖片上窮舉出所有物體可能出現的區域框,然后對該區域框進行特征提取,運用圖像識別方法進行分類,最后通過非極大值抑制輸出結果。

傳統方法最大的問題在特征提取部分,它基於經驗驅動的人造特征范式,如haar、HOG、SIFT,並不能很好的表征樣本。

 

R-CNN思路大致相同,但是采用了深度網絡來提取特征。

 

計算機視覺概念科普

在計算機視覺領域,有很多不同方向的任務,如圖像分類、圖像定位、目標檢測、實例分割

R-CNN可以用於后三種。

 

R-CNN詳解

R-CNN模型比較復雜,訓練和測試過程分開講解

訓練過程

訓練過程的特點在於采用了有監督預訓練,在特定樣本上微調

1. 有監督預訓練

樣本 來源
正樣本 ILSVRC2012
負樣本 ILSVRC2012

 

 

 

 

ILSVRC數據集樣本很多;

ILSVRC數據集只有圖像類別標簽,沒有圖像中物體位置標簽;

采用AlexNet網絡進行有監督預訓練,學習率0.01;

AlexNet 輸入為227x227,輸出為4096-->1000

這一步的目的是得到預訓練參數

 

================ 擴展 ================

什么叫有監督預訓練

有監督預訓練也叫遷移學習,舉個例子,現在有大量人臉圖片,其類別標簽為年齡,可以根據該訓練集得到CNN網絡,用於預測年齡;現在又有一批人臉數據,其類別標簽為性別,我們是否需要從頭訓練一個CNN網絡呢?不需要。

我們可以把“年齡網絡”的最后一層或幾層去掉,換上我們需要的“性別網絡”,把“年齡網絡”前些層的參數直接賦給“性別網絡”對應層,作為這些層的初始化參數,“性別網絡”新增層采用常規初始化參數,然后利用訓練集重新訓練該網絡。

說的簡單一點,把一個訓練好的模型的參數直接用於另一個模型,作為這個模型的初始化參數,再進行訓練

有監督預訓練的作用

1. 實踐證明,提高了模型的精度

2. 加快模型的訓練速度

3. 解決了小樣本數據集無法訓練深層CNN網絡的問題,也解決了小樣本數據集容易過擬合的問題

 

2. 特定樣本下的微調

樣本 來源
正樣本 Ground Truth+與Ground Truth相交IoU>0.5的建議框【由於Ground Truth太少了
負樣本 與Ground Truth相交IoU≤0.5的建議框

 

 

 

 

PASCAL VOC 2007數據集樣本較少;

PASCAL VOC 2007數據集既有圖像類別標簽,也有圖像中物體位置標簽;

采用訓練好的 AlexNet 網絡進行PASCAL VOC 2007數據集下的微調,學習率0.001,;【參數已經預訓練,所以學習率要小一點】

mini-batch 采用32正樣本96負樣本;【由於正樣本比較少】

該網絡的輸入為通過 Selective Search 得到的建議框,需要變形為227x227,輸出層由1000改為21,輸出21類【20類+背景】

 這一步的目的是得到用於特征提取的參數

 

================ 擴展 ================

為什么要在特定樣本下微調?或者說可不可以直接用AlexNet的參數進行特征提取?

作者對微調與不微調都進行了實驗

不微調,直接拿AlexNet的pool5、fc6、fc7層參數分別進行特征提取,輸入SVM進行訓練,【這相當於把AlexNet當做特征提取的標准模板,萬金油模板,意思是不管什么任務,就是這一套,就像傳統的harr特征一樣】

結果發現 fc6層提取的特征比fc7更准,pool5層提取的特征與fc6、fc7層准確率差不多;

微調,用微調后的pool5、fc6、fc7層參數分別進行特征提取,發現fc6、fc7層提取的特征准確率明顯高於pool5層;

卷積與全連接

通過上述實驗,可以得出如下結論,

卷積提取的是共性特征,或者說基礎特征,如人臉的鼻子、眼睛等;【注意鼻子眼睛只是舉例,方便你理解,實際上不是的,可能只是一個點,比如你的色斑,只是形象描述而已】  

全連接是針對類別標簽得到的個性特征,如歐洲人鼻子比較尖,眼睛比較藍;

 

3. SVM訓練

樣本 來源
正樣本 Ground Truth
負樣本 與Ground Truth相交IoU<0.3的建議框

 

 

 

 

SVM是二分類器,故需要多個SVM分類器 ;

SVM輸入是微調后的AlexNet參數提取的特征,4096維,輸出每類的得分;

負樣本太多,采用hard negative mining的方法在負樣本中選取有代表性的負樣本

這一步的目的是得到SVM分類器

 

================ 擴展 ================

什么叫 IoU

圖片的交集/圖片的並集,A∩B/AUB

 

為什么要IoU

通過某種方式選擇圖片上物體所在區域時,可能會有同一個物體被多次選擇的情況,此時需要通過IoU識別。

 

為什么第2步微調模型時正負樣本IoU閾值與第3步SVM不一樣?0.5 VS 0.3

1. 微調階段由於CNN很容易對小樣本過擬合,所以需要增加正樣本的數目,而負樣本不需增加,因為負樣本是在圖片上搜索到的,想要多少有多少,為了得到更多正樣本,就要降低IoU的閾值,一般我們認為兩張圖片重合70% 80%才算一張,而降低到50%就能增加正樣本。

而SVM不需要太多的數據集,無需增加樣本,故IoU限制比較嚴格,重合70%才認為是一張圖片。 

2. 微調階段是為了獲取特征提取的參數,而樣本中人臉有可能是半張臉,或者有遮擋等等,如果CNN模型只能提取整張臉的特征,那“部分臉”肯定會識別錯誤,減小閾值可以得到很多“部分臉”的樣本,從而CNN可以提取“部分臉”的特征,原則上講,如果計算資源運行,我們希望特征越多越好,即使無用也沒關系。

而SVM是分類器,根據輸入特征進行分類,正負樣本需要有比較明顯的界線,最好不要有模棱兩可的樣本,故 IoU要嚴格限制。

 

為什么不用AlexNet直接分類,而是又訓練了SVM?

這個問題其實挺不好回答的,

網上有這么說的:因為 AlexNet 和 SVM 采用的正負樣本不同,微調階段正樣本不一定是正樣本,而SVM正樣本就是正樣本,而且微調階段負樣本隨機采樣,而SVM采用hard negative mining方法篩選負樣本,

那不禁有人要問了,AlexNet 也采用 真正的正樣本,負樣本也hard negative mining方法篩選,不就行了?

我覺得這是一個需要系統回答的問題,個人理解如下:

傳統的圖像識別、目標檢測等采用人造特征進行特征提取,深度學習盛行以后,作者想采用深度學習來提取特征,注意初衷只是提取特征,然后用傳統機器學習如 SVM等來進行分類,以便比較人造特征和深度學習提取特征的差別有多大,所以作者剛開始就打算要SVM,而在實驗過程中,作者發現了樣本小,部分臉等問題,所以采用了微調階段的數據增強等措施,而SVM就是正常的模型訓練。

 

4. Bounding-Box Regression

樣本 來源
正樣本 與Ground Truth相交IoU最大的Region Proposal,並且IoU>0.6的Region Proposal

 

 

 

回歸器訓練,這是在干嘛,哪來的回歸問題?

首先要明確目標檢測不僅是圖像識別,還需要對物體進行定位,Bounding-Box定位准確與否也是模型精度的一部分。這里定位准確率可以用IoU衡量。

如上圖,即使圖像識別為飛機,但是標注框不准,IoU<0.5,也相當於沒有檢測出目標。

這一步的目的是生成標注框

 

================ 擴展 ================

回歸模型如何設計

上圖中,紅色框P代表 Selective Search 選擇的建議框Region Proposal,綠色框G代表實際框Ground Truth,藍色框G'代表Region Proposal進行回歸后的預測窗口

目標是找到P到G’的線性變換,使得G’無限接近於G。【筆者認為IoU>0.6的建議框才符合線性變換】

思考下線性變換,初始化參數wx+b,真實值y,然后 y-(wx+b),使其最小,思路同上。

 

設 P=(Px, Py, Pw, Ph),分別代表P的橫坐標,縱坐標,紅色框的寬度,高度,(Px, Py)是紅色框的中心;

G=(Gx, Gy, Gw, Gh),綠色框,

G'=(G'x, G'y, G'w, G'h),藍色框,

類比線性回歸 wP+b-G=G'-G

從P到G',其實是一個平移和縮放的過程,

平移可以表示為

G'x=Px+Δx

G'y=Py+Δy

縮放可以表示為

G'w=Pw*Δw

G'h=Ph*Δh

作者用下面的式子表示線性變換

d(P)的輸入其實並不是一個(x,y,w,h),而是 AlexNet 網絡pool5層的特征 Ø(P)的線性變換,即 d(P)=wØ(P),w就是回歸參數,

把真實數據帶入上述線性變換的公式,即把G'換成G

上面的d是預測,t是實際,t-d就是誤差,於是得到損失函數

后面為正則項,不再贅述。

 

稍微總結一下

a. 構造樣本對,也就是回歸的數據集

  // 首先明白一點,bbr是根據每類樣本的特征得到回歸方程的,所以每個類別有一個回歸方程

  // 每類樣本中每次識別都選擇與Ground Truth IoU最大的建議框,並且IoU>0.6,作為一個樣本{P,G}

  

b. 針對每個類別訓練回歸器,輸入該類別的樣本,以及每個P對應的AlexNet的pool5層的特征

c. 得到參數w

 

至此,R-CNN 訓練完成。 

 

測試過程

1. 給定一張多目標圖片,采用 Selective Search 選出約2000個建議框

  // 在每個建議框周圍加上16個  <像素值為建議框像素平均值>  的邊框,再形變為 227x227 的大小

  // 將所有建議框像素減去 該建議框的像素平均值

2. 將2000個建議框送入AlexNet網絡進行特征提取,生成2000x4096矩陣

3. 將特征矩陣送入SVM模型,生成2000x20矩陣,表示每個建議框輸入每個類別的得分

4. 對上述2000x20矩陣每一列即每一類進行 非極大值抑制 操作,剔除重復建議框,得到每列中得分最高的不同建議框

5. 對每列中剩下的建議框進行回歸操作,得到標注框

 

================ 擴展 ================

Selective Search

分割圖片,具體我會在其他博客詳解

 

如何形變為227x227

先解釋兩個名詞

各向異性縮放:非等比例縮放,不管圖片的長寬比例,不管縮放后是否扭曲,直接縮放就是了;縮放后一般會扭曲,扭曲會對CNN有一定影響

各向同性縮放:有兩種做法

1. 直接在原始圖片中,把bounding box的邊界進行擴展延伸成正方形,然后再進行裁剪;如果已經延伸到了原始圖片的外邊界,那么就用bounding box中的顏色均值填充;

2. 先把bounding box圖片裁剪出來,然后用固定的背景顏色填充成正方形圖片(背景顏色也是采用bounding box的像素顏色均值);

 

作者進行了如下嘗試

① 考慮context【圖像中context指RoI周邊像素】的各向同性變形,建議框像周圍像素擴充到227×227,若遇到圖像邊界則用建議框像素均值填充,下圖第二列; 

② 不考慮context的各向同性變形,直接用建議框像素均值填充至227×227,下圖第三列; 

③ 各向異性變形,簡單粗暴對圖像就行縮放至227×227,下圖第四列; 

④ 變形前先進行邊界像素填充【padding】處理,即向外擴展建議框邊界,以上三種方法中分別采用padding=0下圖第一行,padding=16下圖第二行進行處理;

經過作者一系列實驗表明采用padding=16的各向異性變形即下圖第二行第三列效果最好,能使mAP提升3-5%。 

 

非極大值抑制

解決問題:多個建議框指向了同一個物體,我們只需要該物體IoU最大的建議框

具體操作

1. 輸入為2000x20矩陣,2000代表2000個建議框,20代表20個類別

2. 對每個類別進行排序,從大到小

3. 首先取得分最高的建議框,設為物體1,然后遍歷后面所有的建議框,如果建議框和物體1的建議框IoU大於閾值,則認為是一個物體,把這些建議框刪除,

如果小於閾值,則認為是另一個物體,暫時保留,保留下來的建議框仍然是有序的

4. 去掉該列被認定的建議框,如物體1,將剩下的建議框進行步驟3操作,直到認定完所有物體

5. 對每列進行上述操作

6. 也可以設定閾值對每列中剩余建議框與真實標注IoU較小的建議框【作者沒有此步】

 

至此,R-CNN 測試完成。  

 

R-CNN 的問題

1. 處理速度慢,一張圖片采用 Selective Search 獲取2000個建議框,然后變形,通過AlexNet提取特征,計算量很大,而且存在多個重復區域的重復計算

2. 整體過程太復雜,計算量大,一句話就夠了

 

 

參考資料:

https://blog.csdn.net/wopawn/article/details/52133338

https://blog.csdn.net/qq_35608277/article/details/80178628

https://blog.csdn.net/v1_vivian/article/details/80292569                 Bounding-Box 回歸

https://blog.csdn.net/zijin0802034/article/details/77685438            Bounding-Box 回歸

https://github.com/Stick-To/LH-RCNN-tensorflow/blob/master/LH_RCNN.py      github 代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM