本文來源于https://blog.csdn.net/u014380165/article/details/72851035
https://www.cnblogs.com/skyfsm/p/6806246.html
https://www.cnblogs.com/zf-blog/p/6740736.html
論文:Rich feature hierarchies for accurate object detection and semantic segmentation
1. 要解決的問題
R-CNN (即 Region with CNN Features)這個算法是用來做目標(biāo)檢測的經(jīng)典算法,2014年提出。
目標(biāo)檢測簡單講就兩方面:定位和識別。即知道object在哪兒,這個object是什么。
R-CNN在pascal VOC 2012數(shù)據(jù)集上取得了mAP 53.3%的成績,在當(dāng)時已經(jīng)很不錯了。
2.R-CNN結(jié)構(gòu)
基于object-detection簡介中的思路,RCNN的出現(xiàn)了。

步驟一:訓(xùn)練(或者下載)一個分類模型(比如AlexNet)

步驟二:對該模型做fine-tuning
? 將分類數(shù)從1000改為20
? 去掉最后一個全連接層

步驟三:特征提取
? 提取圖像的所有候選框(選擇性搜索)
? 對于每一個區(qū)域:修正區(qū)域大小以適合CNN的輸入,做一次前向運(yùn)算,將第五個池化層的輸出(就是對候選框提取到的特征)存到硬盤

步驟四:訓(xùn)練一個SVM分類器(二分類)來判斷這個候選框里物體的類別
每個類別對應(yīng)一個SVM,判斷是不是屬于這個類別,是就是positive,反之nagative
比如下圖,就是狗分類的SVM

步驟五:使用回歸器精細(xì)修正候選框位置:對于每一個類,訓(xùn)練一個線性回歸模型去判定這個框是否框得完美。

3. 算法簡述
本文數(shù)據(jù)集采用pascal VOC,這個數(shù)據(jù)集的object一共有20個類別。
首先用selective search方法在每張圖像上選取約2000個region proposal,region proposal就是object有可能出現(xiàn)的位置。然后根據(jù)這些region proposal構(gòu)造訓(xùn)練和測試樣本,注意這些region proposal的大小不一,另外樣本的類別是21個(包括了背景)。然后是預(yù)訓(xùn)練,即在ImageNet數(shù)據(jù)集下,用AlexNet進(jìn)行訓(xùn)練。然后再在我們的數(shù)據(jù)集上fine-tuning,網(wǎng)絡(luò)結(jié)構(gòu)不變(除了最后一層輸出由1000改為21),輸入是前面的region proposal進(jìn)行尺寸變換到一個統(tǒng)一尺寸227*227,保留f7的輸出特征2000*4096維。針對每個類別(一共20類)訓(xùn)練一個SVM分類器,以f7層的輸出作為輸入,訓(xùn)練SVM的權(quán)重4096*20維,所以測試時候會得到2000*20的得分輸出,且測試的時候會對這個得分輸出做NMS(non-maximun suppression),簡單講就是去掉重復(fù)框的過程。同時針對每個類別(一共20類)訓(xùn)練一個回歸器,輸入是pool5的特征和每個樣本對的坐標(biāo)即長寬。
4. 算法詳解
訓(xùn)練過程:
準(zhǔn)備region proposal。對于訓(xùn)練集中的所有圖像,采用selective search方式來獲取,最后每個圖像得到2000個region proposal。
準(zhǔn)備正負(fù)樣本。如果某個region proposal和當(dāng)前圖像上的所有g(shù)round truth中重疊面積最大的那個的IOU大于等于0.5,則該region proposal作為這個ground truth類別的正樣本,否則作為負(fù)樣本。另外正樣本還包括了Ground Truth。因?yàn)閂OC一共包含20個類別,所以這里region proposal的類別為20+1=21類,1表示背景。簡單說下IOU的概念,IOU是計算矩形框A、B的重合度的公式:IOU=(A∩B)/(A∪B),重合度越大,說明二者越相近。
預(yù)訓(xùn)練。這一步主要是因?yàn)闄z測問題中帶標(biāo)簽的樣本數(shù)據(jù)量比較少,難以進(jìn)行大規(guī)模訓(xùn)練。采用網(wǎng)絡(luò)AlexNet來學(xué)習(xí)特征,包含5個卷積層和2個全連接層,在Caffe框架下利用ILSVRC 2012的數(shù)據(jù)集進(jìn)行預(yù)訓(xùn)練,其實(shí)就是利用大數(shù)據(jù)集訓(xùn)練一個分類器,這個ILSVRC 2012數(shù)據(jù)集就是著名的ImageNet比賽的數(shù)據(jù)集,也是彩色圖像分類。
fine-tuning。將2中得到的樣本進(jìn)行尺寸變換,使得大小一致,這是由于2中得到的region proposal大小不一,所以需要將region proposal變形成227*227。本文中對所有不管什么樣大小和橫縱比的region proposal都直接拉伸到固定尺寸。然后作為3中預(yù)訓(xùn)練好的網(wǎng)絡(luò)的輸入,繼續(xù)訓(xùn)練網(wǎng)絡(luò),繼續(xù)訓(xùn)練其實(shí)就是遷移學(xué)習(xí)。另外由于ILSVRC 2012是一個1000類的數(shù)據(jù)集,而本文的數(shù)據(jù)集是21類(包括20個VOC類別和一個背景類別),遷移的時候要做修改,將最后一個全連接層的輸出由1000改成21,其他結(jié)構(gòu)不變。訓(xùn)練結(jié)束后保存f7的特征。
針對每個類別訓(xùn)練一個SVM的二分類器。輸入是 f7 的特征,f7 的輸出維度是2000*4096,輸出的是是否屬于該類別,訓(xùn)練結(jié)果是得到SVM的權(quán)重矩陣W,W的維度是4096*20。這里負(fù)樣本的選定和前面的有所不同,將IOU的閾值從0.5改成0.3,即IOU<0.3的是負(fù)樣本,正樣本是Ground Truth。IOU的閾值選擇和前面fine-tuning不一樣,這里鏈接3的解釋是:前面fine-tuning需要大量的樣本,所以設(shè)置成0.5會比較寬松。而在SVM階段是由于SVM適用于小樣本,所以設(shè)置0.3會更嚴(yán)格一點(diǎn)。
回歸。用pool5的特征6*6*256維和bounding box的ground truth來訓(xùn)練回歸,每種類型的回歸器單獨(dú)訓(xùn)練。輸入是pool5的特征,以及每個樣本對的坐標(biāo)和長寬值。另外只對那些跟ground truth的IOU超過某個閾值且IOU最大的proposal回歸,其余的region proposal不參與。具體參考鏈接3。詳細(xì)說一下:對于某個region proposal:R,以及其對應(yīng)的Ground truth:G,我們希望預(yù)測結(jié)果是:P,那么我們肯定希望P盡可能接近G。這里通過對pool5層的特征X做線性變換WX得到變換函數(shù)F(X),這些變換函數(shù)作用于R的坐標(biāo)達(dá)到回歸的作用(包括對x,y的平移以及對w,h的縮放)。因此損失函數(shù)可以表達(dá)為:R和G的差距減去P和G的差距要盡可能小。
測試過程:
輸入一張圖像,利用selective search得到2000個region proposal。
對所有region proposal變換到固定尺寸并作為已訓(xùn)練好的CNN網(wǎng)絡(luò)的輸入,得到 f7 層的4096維特征,所以 f7 層的輸出是2000*4096。
對每個類別,采用已訓(xùn)練好的這個類別的svm分類器對提取到的特征打分,所以SVM的weight matrix是4096*N,N是類別數(shù),這里一共有20個SVM,N=20注意不是21。得分矩陣是2000*20,表示每個region proposal屬于某一類的得分。
采用non-maximun suppression(NMS)對得分矩陣中的每一列中的region proposal進(jìn)行剔除,就是去掉重復(fù)率比較高的幾個region proposal,得到該列中得分最高的幾個region proposal。NMS的意思是:舉個例子,對于2000*20中的某一列得分,找到分?jǐn)?shù)最高的一個region proposal,然后只要該列中其他region proposal和分?jǐn)?shù)最高的IOU超過某一個閾值,則剔除該region proposal。這一輪剔除完后,再從剩下的region proposal找到分?jǐn)?shù)最高的,然后計算別的region proposal和該分?jǐn)?shù)最高的IOU是否超過閾值,超過的繼續(xù)剔除,直到?jīng)]有剩下region proposal。對每一列都這樣操作,這樣最終每一列(即每個類別)都可以得到一些region proposal。
用N=20個回歸器對第4步得到的20個類別的region proposal進(jìn)行回歸,要用到pool5層的特征。pool5特征的權(quán)重W是在訓(xùn)練階段的結(jié)果,測試的時候直接用。最后得到每個類別的修正后的bounding box。
5. 對應(yīng)4的進(jìn)一步解釋
測試過程:
輸入一張多目標(biāo)圖像,采用selective search算法提取約2000個建議框;
先在每個建議框周圍加上16個像素值為建議框像素平均值的邊框,再直接變形為227×227的大??;
先將所有建議框像素減去該建議框像素平均值后【預(yù)處理操作】,再依次將每個227×227的建議框輸入AlexNet CNN網(wǎng)絡(luò)獲取4096維的特征【比以前的人工經(jīng)驗(yàn)特征低兩個數(shù)量級】,2000個建議框的CNN特征組合成2000×4096維矩陣;
將2000×4096維特征與20個SVM組成的權(quán)值矩陣4096×20相乘【20種分類,SVM是二分類器,則有20個SVM】,獲得2000×20維矩陣表示每個建議框是某個物體類別的得分;
分別對上述2000×20維矩陣中每一列即每一類進(jìn)行非極大值抑制剔除重疊建議框,得到該列即該類中得分最高的一些建議框;
分別用20個回歸器對上述20個類別中剩余的建議框進(jìn)行回歸操作,最終得到每個類別的修正后的得分最高的bounding box。
解釋分析
selective search
采取過分割手段,將圖像分割成小區(qū)域,再通過顏色直方圖,梯度直方圖相近等規(guī)則進(jìn)行合并,最后生成約2000個建議框的操作,具體見博客。-
為什么要將建議框變形為227×227?怎么做?
本文采用AlexNet CNN網(wǎng)絡(luò)進(jìn)行CNN特征提取,為了適應(yīng)AlexNet網(wǎng)絡(luò)的輸入圖像大小:227×227,故將所有建議框變形為227×227。
那么問題來了,如何進(jìn)行變形操作呢?作者在補(bǔ)充材料中給出了四種變形方式:① 考慮context【圖像中context指RoI周邊像素】的各向同性變形,建議框像周圍像素擴(kuò)充到227×227,若遇到圖像邊界則用建議框像素均值填充,下圖第二列;
② 不考慮context的各向同性變形,直接用建議框像素均值填充至227×227,下圖第三列;
③ 各向異性變形,簡單粗暴對圖像就行縮放至227×227,下圖第四列;
④ 變形前先進(jìn)行邊界像素填充【padding】處理,即向外擴(kuò)展建議框邊界,以上三種方法中分別采用padding=0下圖第一行,padding=16下圖第二行進(jìn)行處理;經(jīng)過作者一系列實(shí)驗(yàn)表明采用padding=16的各向異性變形即下圖第二行第三列效果最好,能使mAP提升3-5%。

CNN特征如何可視化?
文中采用了巧妙的方式將AlexNet CNN網(wǎng)絡(luò)中Pool5層特征進(jìn)行了可視化。該層的size是6×6×256,即有256種表示不同的特征,這相當(dāng)于原始227×227圖片中有256種195×195的感受視野【相當(dāng)于對227×227的輸入圖像,卷積核大小為195×195,padding=4,step=8,輸出大小(227-195+2×4)/8+1=6×6】;
文中將這些特征視為”物體檢測器”,輸入10million的Region Proposal集合,計算每種6×6特征即“物體檢測器”的激活量,之后進(jìn)行非極大值抑制【下面解釋】,最后展示出每種6×6特征即“物體檢測器”前幾個得分最高的Region Proposal,從而給出了這種6×6的特征圖表示了什么紋理、結(jié)構(gòu),很有意思。為什么要進(jìn)行非極大值抑制?非極大值抑制又如何操作?
先解釋什么叫IoU。如下圖所示IoU即表示(A∩B)/(A∪B)

在測試過程完成到第4步之后,獲得2000×20維矩陣表示每個建議框是某個物體類別的得分情況,此時會遇到下圖所示情況,同一個車輛目標(biāo)會被多個建議框包圍,這時需要非極大值抑制操作去除得分較低的候選框以減少重疊框。

具體怎么做呢?
① 對2000×20維矩陣中每列按從大到小進(jìn)行排序;
② 從每列最大的得分建議框開始,分別與該列后面的得分建議框進(jìn)行IoU計算,若IoU>閾值,則剔除得分較小的建議框,否則認(rèn)為圖像中存在多個同一類物體;
③ 從每列次大的得分建議框開始,重復(fù)步驟②;
④ 重復(fù)步驟③直到遍歷完該列所有建議框;
⑤ 遍歷完2000×20維矩陣所有列,即所有物體種類都做一遍非極大值抑制;
⑥ 最后剔除各個類別中剩余建議框得分少于該類別閾值的建議框?!疚闹袥]有講,博主覺得有必要做】
-
為什么要采用回歸器?回歸器是什么有什么用?如何進(jìn)行操作?
首先要明確目標(biāo)檢測不僅是要對目標(biāo)進(jìn)行識別,還要完成定位任務(wù),所以最終獲得的bounding-box也決定了目標(biāo)檢測的精度。
這里先解釋一下什么叫定位精度:定位精度可以用算法得出的物體檢測框與實(shí)際標(biāo)注的物體邊界框的IoU值來近似表示。如下圖所示,綠色框?yàn)閷?shí)際標(biāo)準(zhǔn)的卡宴車輛框,即Ground Truth;黃色框?yàn)閟elective search算法得出的建議框,即Region Proposal。即使黃色框中物體被分類器識別為卡宴車輛,但是由于綠色框和黃色框IoU值并不大,所以最后的目標(biāo)檢測精度并不高。采用回歸器是為了對建議框進(jìn)行校正,使得校正后的Region Proposal與selective search更接近, 以提高最終的檢測精度。論文中采用bounding-box回歸使mAP提高了3~4%。

那么問題來了,回歸器如何設(shè)計呢?

如上圖,黃色框口P表示建議框Region Proposal,綠色窗口G表示實(shí)際框Ground Truth,紅色窗口G^表示Region Proposal進(jìn)行回歸后的預(yù)測窗口,現(xiàn)在的目標(biāo)是找到P到G^的線性變換【當(dāng)Region Proposal與Ground Truth的IoU>0.6時可以認(rèn)為是線性變換】,使得G^與G越相近,這就相當(dāng)于一個簡單的可以用最小二乘法解決的線性回歸問題,具體往下看。
讓我們先來定義P窗口的數(shù)學(xué)表達(dá)式:Pi=(Pix,Piy,Piw,Pih),其中(Pix,Piy)表示第一個i窗口的中心點(diǎn)坐標(biāo),Piw,Pih分別為第i個窗口的寬和高;G窗口的數(shù)學(xué)表達(dá)式為:Gi=(Gix,Giy,Giw,Gih);G窗口的數(shù)學(xué)表達(dá)式為:Gi=(Gix,Giy,Giw,Gih)。以下省去i上標(biāo)。
這里定義了四種變換函數(shù),dx(P),dy(P),dw(P),dh(P)。dx(P)和dy(P)通過平移對x和y進(jìn)行變化,dw(P)和dh(P)通過縮放對w和h進(jìn)行變化,即下面四個式子所示:
G^x=Pwdx(P)+Px(1)
G^y=Phdy(P)+Py(2)
G^w=Pwexp(dw(P))(3)
G^h=Phexp(dh(P))(4)
每一個d?(P)【*表示x,y,w,h】都是一個AlexNet CNN網(wǎng)絡(luò)Pool5層特征?5(P)的線性函數(shù),即d?(P)=wT??5(P) ,這里wT?就是所需要學(xué)習(xí)的回歸參數(shù)。損失函數(shù)即為:
Loss=argmin∑i=0N(ti??w^T??5(Pi))2+λ||w^?||2(5)
損失函數(shù)中加入正則項(xiàng)λ||w^?||2 是為了避免歸回參數(shù)wT?過大。其中,回歸目標(biāo)t?由訓(xùn)練輸入對(P,G)按下式計算得來:
tx=(Gx?Px)/Pw(6)
ty=(Gy?Py)/Ph(7)
tw=log(Gw/Pw)(8)
th=log(Gh/Ph)(9)
①構(gòu)造樣本對。為了提高每類樣本框回歸的有效性,對每類樣本都僅僅采集與Ground Truth相交IoU最大的Region Proposal,并且IoU>0.6的Region Proposal作為樣本對(Pi,Gi),一共產(chǎn)生20對樣本對【20個類別】;
②每種類型的回歸器單獨(dú)訓(xùn)練,輸入該類型樣本對N個:{(Pi,Gi)}i=1?N以及Pii=1?N所對應(yīng)的AlexNet CNN網(wǎng)絡(luò)Pool5層特征?5(Pi)i=1?N;
③利用(6)-(9)式和輸入樣本對{(Pi,Gi)}i=1?N計算ti?i=1?N;
④利用?5(Pi)i=1?N和ti?i=1?N,根據(jù)損失函數(shù)(5)進(jìn)行回歸,得到使損失函數(shù)最小的參數(shù)wT?。
6. 算法步驟
- 利用selective search獲得region proposal(約2000個);
- 對region proposal大小進(jìn)行歸一化,用作CNN網(wǎng)絡(luò)的標(biāo)準(zhǔn)輸入;
- 使用AlexNet網(wǎng)絡(luò)獲得region proposal中的特征;
-
利用SVM進(jìn)行分類以及線性回歸微調(diào)定位框。
image.png
7. 缺點(diǎn)
- R-CNN對近2000個候選區(qū)域分別做特征提取,而候選區(qū)域之間存在許多重復(fù)區(qū)域,導(dǎo)致大量且重復(fù)的運(yùn)算。
- 對每一步的數(shù)據(jù)進(jìn)行存儲,極為損耗存儲空間。
- 對候選區(qū)域進(jìn)行歸一化操作,會對最終結(jié)果產(chǎn)生影響。
