(二)目標檢測算法之R-CNN


 

系列博客鏈接:

(一)目標檢測概述 https://www.cnblogs.com/kongweisi/p/10894415.html

 

概述:

1、目標檢測-Overfeat模型

2、目標檢測-R-CNN模型

  2.1 完整R-CNN結構(R-CNN的完整步驟)

  2.2 R-CNN訓練過程

  2.3 R-CNN測試過程

  2.4 總結(缺點即存在的問題)

PS: 因為手敲,因此目錄稍微出入,請見諒。

 

引言:

對於一張圖片當中多個目標,多個類別的時候。前面的輸出結果是不定的,有可能是以下有四個類別輸出這種情況。或者N個結果,這樣的話,網絡模型輸出結構不定

所以需要一些他的方法解決目標檢測(多個目標)的問題,試圖將一個檢測問題簡化成分類問題

1、目標檢測-Overfeat模型

1.1 滑動窗口

目標檢測的暴力方法是從左到右、從上到下滑動窗口,利用分類識別目標。為了在不同觀察距離處檢測不同的目標類型,我們使用不同大小和寬高比的窗口。如下圖所示:

 這樣就變成每張子圖片輸出類別以及位置,變成分類問題。但是滑動窗口需要初始設定一個固定大小的窗口,這就遇到了一個問題,有些物體適應的框不一樣,

所以需要提前設定K個窗口,每個窗口滑動提取M個,總共K x M 個圖片,通常會直接將圖像變形轉換成固定大小的圖像,變形圖像塊被輸入 CNN 分類器中,

提取特征后,我們使用一些分類器識別類別該邊界框的另一個線性回歸器

簡而言之,當一張圖片中存在多個目標時,我們需要想辦法將其轉變成多張固定大小的子圖片,然后通過CNN提取特征,再進行類別分類(識別)和邊框回歸(后面會說)

這樣,一個多目標的檢測問題,就轉變成了機器學習常見的多分類問題

 

那這種方法是怎么去利用數據訓練的?

1.2 訓練數據集

首先我們會准備所需要的訓練集數據,每張圖片的若干個子圖片以及每張圖片的類別位置,如下我們從某張圖片中滑動出的若干的圖片。

1.3 Overfeat模型總結

這種方法類似一種暴力窮舉的方式,會消耗大量的計算力量,並且由於窗口大小問題可能會造成效果不准確

。但是提供了一種解決目標檢測問題的思路。

2 目標檢測-R-CNN模型

在CVPR 2014年中Ross Girshick提出R-CNN。

2.1 完整R-CNN結構

不使用暴力方法,而是用候選區域方法(region proposal method),創建目標檢測的區域改變了圖像領域實現物體檢測的模型思路,R-CNN是以深度神經網絡為基礎的物體檢測的模型 ,R-CNN在當時以優異的性能令世人矚目,以R-CNN為基點,后續的SPPNet、Fast R-CNN、Faster R-CNN模型都是照着這個物體檢測思路。

 

步驟(以AlexNet網絡為基准)

  • 1.找出圖片中可能存在目標的侯選區域region proposal
  • 2.進行圖片大小調整為了適應AlexNet網絡的輸入圖像的大小227×227,通過CNN對候選區域提取特征向量,2000個建議框的CNN特征組合成2000×4096維矩陣
  • 3.將2000×4096維特征與20個SVM組成的權值矩陣4096×20相乘(20種分類,SVM是二分類器,則有20個SVM),獲得2000×20維矩陣
  • 4.分別對2000×20維矩陣中每一列即每一類進行非極大值抑制(NMS:non-maximum suppression)剔除重疊建議框,得到該列即該類中得分最高的一些建議框
  • 5.修正bbox,對bbox做回歸微調

 

2.2 候選區域

 選擇性搜索(SelectiveSearch,SS)中,首先將每個像素作為一組。然后,計算每一組的紋理,並將兩個最接近的組結合起來。但是為了避免單個區域吞噬其他區域,我們首先對較小的組進行分組。我們繼續合並區域,直到所有區域都結合在一起。下圖第一行展示了如何使區域增長,第二行中的藍色矩形代表合並過程中所有可能的 ROI。

SelectiveSearch在一張圖片上提取出來約2000個侯選區域,需要注意的是這些候選區域的長寬不固定。 而使用CNN提取候選區域的特征向量,需要接受固定長度的輸入,所以需要對候選區域做一些尺寸上的修改。

2.3 Crop+Warp

傳統的CNN限制了輸入必須固定大小,所以在實際使用中往往需要對原圖片進行crop或者warp的操作

  • crop:截取原圖片的一個固定大小的patch
  • warp:將原圖片的ROI縮放到一個固定大小的patch

無論是crop還是warp,都無法保證在不失真的情況下將圖片傳入到CNN當中。會使用一些方法盡量讓圖片保持最小的變形。

  • 1.各向異性縮放:即直接縮放到指定大小,這可能會造成不必要的圖像失真

  • 2.各向同性縮放:在原圖上出裁剪侯選區域, (采用侯選區域的像素顏色均值)填充到指定大小在邊界用固定的背景顏色

 

2.4 CNN網絡提取特征

在侯選區域的基礎上提取出更高級、更抽象的特征,這些高級特征是作為下一步的分類器、回歸的輸入數據。

 

提取的這些特征將會保存在磁盤當中(這些提取的特征才是真正的要訓練的數據

2.5 特征向量訓練分類器SVM

假設一張圖片的2000個侯選區域,那么提取出來的就是2000 x 4096這樣的特征向量(R-CNN當中默認CNN層輸出4096特征向量)。那么最后需要對這些特征進行分類,R-CNN選用SVM進行二分類。假設檢測N個類別,那么會提供20個不同類別的SVM分類器,每個分類器都會對2000個候選區域的特征向量分別判斷一次,這樣得出[2000, 20]的得分矩陣,如下圖所示

 

更通俗的解釋:

  假設原圖片有2000個候選區,將其輸入進一個CNN中(進行卷積、池化...得到各種抽象的特征),輸出2000x4096的特征向量。此時找到N個(需要分類多少個找多少個,如分為20類)SVM分類器,每個分類器都會對2000個候選區域的特征向量分別判斷一次,即2000x4094的特征向量分別與N個不同類的SVM分類器,然后再得到最終的得分矩陣,矩陣默認N行(代表N類),2000列(2000個候選區),其中一共是2000N個"數",這些"數"即該候選區屬於某一類的概率。

每個SVM分類器做的事情

  • 判斷2000個候選區域是某類別,還是背景

 

2.6 非最大抑制(NMS)

  • 目的
    • 篩選候選區域,得到最終候選區域結果
  • 迭代過程
    • 對於所有的2000個候選區域得分進行概率篩選
    • 然后對剩余的候選框,每個類別進行IoU(交並比)>= 0.5 篩選

假設現在滑動窗口有:A、B、C、D、E 5個候選框,

  • 第一輪:假設B是得分最高的,與B的IoU>0.5刪除。現在與B計算IoU,DE結果>0.5,剔除DE,B作為一個預測結果
  • 第二輪:AC中,A的得分最高,與A計算IoU,C的結果>0.5,剔除C,A作為一個結果

最終結果為在這個5個中檢測出了兩個目標為A和B

2.7 修正候選區域(邊框回歸)

那么通過非最大抑制篩選出來的候選框不一定就非常准確怎么辦?R-CNN提供了這樣的方法,建立一個bbox regressor

  • 回歸用於修正篩選后的候選區域,使之回歸於ground-truth,默認認為這兩個框之間是線性關系,因為在最后篩選出來的候選區域和ground-truth很接近了

修正過程(線性回歸)

  • 給定:anchor A=(A_{x}, A_{y}, A_{w}, A_{h}) 和 GT=[G_{x}, G_{y}, G_{w}, G_{h}]
  • 尋找一種變換F,使得:F(A_{x}, A_{y}, A_{w}, A_{h})=(G_{x}^{'}, G_{y}^{'}, G_{w}^{'}, G_{h}^{'}),其中(G_{x}^{'}, G_{y}^{'}, G_{w}^{'}, G_{h}^{'})≈(G_{x}, G_{y}, G_{w}, G_{h})

解釋:這里我們經過2.6步NMS預測得到的bbox是A筐,再經過2.7步,邊框回歸,進行修正,得到G',減少了原A與真實邊框G的誤差。

 

2.3 R-CNN訓練過程

 步驟:正負樣本准備+預訓練+微調網絡+訓練SVM+訓練邊框回歸器

2.3.1 正負樣本准備

對於訓練集中的所有圖像,采用selective search方式來獲取,最后每個圖像得到2000個region proposal。但是每個圖像不是所有的候選區域都會拿去訓練。保證正負樣本比例1:3。

 

樣本 描述
正樣本 某個region proposal和當前圖像上的所有ground truth中重疊面積最大的那個的IOU大於等於0.5,則該region proposal作為這個ground truth類別的正樣本
負樣本 某個region proposal和當前圖像上的所有ground truth中重疊面積最大的那個的IOU都小於0.5,則該region proposal作為這個ground truth類別的負樣本

這樣得出若干個候選區域以及對應的標記結果。

2.3.2 預訓練(pre-training)

CNN模型層數多,模型的容量大,通常會采用2012年的著名網絡AlexNet來學習特征,包含5個卷積層和2個全連接層,利用大數據集訓練一個分類器,比如著名的ImageNet比賽的數據集,來訓練AlexNet,保存其中的模型參數。

所謂預訓練,其實就是拿別人訓練好的模型來用,但是還沒有真的開始訓練。

2.3.3 微調(fine-tuning)

AlexNet是針對ImageNet訓練出來的模型,卷積部分可以作為一個好的特征提取器,后面的全連接層可以理解為一個好的分類器。R-CNN需要在現有的模型上微調卷積參數

  • 將第一步中得到的樣本進行尺寸變換,使得大小一致,然后作為預訓練好的網絡的輸入,繼續訓練網絡(遷移學習)

 所謂微調,就是預訓練拿來用的model1,給model1輸入我們的數據(固定尺寸的圖像),然后訓練得到model2,model2就是我們微調后的模型,本質就是遷移學習,不同於預訓練的是,這是真的訓練了。

2.3.4 SVM分類器

針對每個類別訓練一個SVM的二分類器。舉例:貓的SVM分類器,輸入維度是2000x4096,目標還是之前第一步標記是否屬於該類別貓,訓練結果是得到SVM的權重矩陣W,W的維度是4096x20。

2.3.5 bbox回歸器訓練(邊框回歸)

只對那些跟ground truth的IoU超過某個閾值且IOU最大的region proposal回歸,其余的region proposal不參與。

 

2.4 R-CNN測試過程

  • 輸入一張圖像,利用selective search得到2000個region proposal。

  • 對所有region proposal變換到固定尺寸並作為已訓練好的CNN網絡的輸入,每個候選框得到的4096維特征

  • 采用已訓練好的每個類別的svm分類器對提取到的特征打分,所以SVM的weight matrix(權重矩陣)是4096xN,N是類別數,這里一共有20個SVM,得分矩陣是2000x20
  • 采用non-maximun suppression(NMS)去掉候選框

  • 得到region proposal(oU超過某個閾值且IOU最大)進行邊框回歸。

 

2.5 R-CNN總結

2.5.1 流程總結

 

  • 表現
    • 在VOC2007數據集上的平均精確度達到66%

2.5.2 缺點

  • 1、訓練階段多:步驟繁瑣: 微調網絡+訓練SVM+訓練邊框回歸器。

  • 2、訓練耗時:占用磁盤空間大:5000張圖像產生幾百G的特征文件。(VOC數據集的檢測結果,因為SVM的存在)

  • 3、處理速度慢: 使用GPU, VGG16模型處理一張圖像需要47s。

  • 4、圖片形狀變化:候選區域要經過crop/warp進行固定大小,無法保證圖片不變形

 


免責聲明!

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



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