本文來(lái)源于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. 要解決的問(wèn)題
R-CNN (即 Region with CNN Features)這個(gè)算法是用來(lái)做目標(biāo)檢測(cè)的經(jīng)典算法彤侍,2014年提出。
目標(biāo)檢測(cè)簡(jiǎn)單講就兩方面:定位和識(shí)別。即知道object在哪兒,這個(gè)object是什么运怖。
R-CNN在pascal VOC 2012數(shù)據(jù)集上取得了mAP 53.3%的成績(jī)封孙,在當(dāng)時(shí)已經(jīng)很不錯(cuò)了。
2.R-CNN結(jié)構(gòu)
基于object-detection簡(jiǎn)介中的思路曲聂,RCNN的出現(xiàn)了递惋。
步驟一:訓(xùn)練(或者下載)一個(gè)分類模型(比如AlexNet)
步驟二:對(duì)該模型做fine-tuning
? 將分類數(shù)從1000改為20
? 去掉最后一個(gè)全連接層
步驟三:特征提取
? 提取圖像的所有候選框(選擇性搜索)
? 對(duì)于每一個(gè)區(qū)域:修正區(qū)域大小以適合CNN的輸入柔滔,做一次前向運(yùn)算,將第五個(gè)池化層的輸出(就是對(duì)候選框提取到的特征)存到硬盤
步驟四:訓(xùn)練一個(gè)SVM分類器(二分類)來(lái)判斷這個(gè)候選框里物體的類別
每個(gè)類別對(duì)應(yīng)一個(gè)SVM萍虽,判斷是不是屬于這個(gè)類別睛廊,是就是positive,反之nagative
比如下圖贩挣,就是狗分類的SVM
步驟五:使用回歸器精細(xì)修正候選框位置:對(duì)于每一個(gè)類,訓(xùn)練一個(gè)線性回歸模型去判定這個(gè)框是否框得完美没酣。
3. 算法簡(jiǎn)述
本文數(shù)據(jù)集采用pascal VOC王财,這個(gè)數(shù)據(jù)集的object一共有20個(gè)類別。
首先用selective search方法在每張圖像上選取約2000個(gè)region proposal裕便,region proposal就是object有可能出現(xiàn)的位置绒净。然后根據(jù)這些region proposal構(gòu)造訓(xùn)練和測(cè)試樣本,注意這些region proposal的大小不一偿衰,另外樣本的類別是21個(gè)(包括了背景)挂疆。然后是預(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)行尺寸變換到一個(gè)統(tǒng)一尺寸227*227胆萧,保留f7的輸出特征2000*4096維。針對(duì)每個(gè)類別(一共20類)訓(xùn)練一個(gè)SVM分類器俐东,以f7層的輸出作為輸入跌穗,訓(xùn)練SVM的權(quán)重4096*20維,所以測(cè)試時(shí)候會(huì)得到2000*20的得分輸出虏辫,且測(cè)試的時(shí)候會(huì)對(duì)這個(gè)得分輸出做NMS(non-maximun suppression)蚌吸,簡(jiǎn)單講就是去掉重復(fù)框的過(guò)程。同時(shí)針對(duì)每個(gè)類別(一共20類)訓(xùn)練一個(gè)回歸器砌庄,輸入是pool5的特征和每個(gè)樣本對(duì)的坐標(biāo)即長(zhǎng)寬羹唠。
4. 算法詳解
訓(xùn)練過(guò)程:
準(zhǔn)備region proposal奕枢。對(duì)于訓(xùn)練集中的所有圖像,采用selective search方式來(lái)獲取肉迫,最后每個(gè)圖像得到2000個(gè)region proposal验辞。
準(zhǔn)備正負(fù)樣本。如果某個(gè)region proposal和當(dāng)前圖像上的所有g(shù)round truth中重疊面積最大的那個(gè)的IOU大于等于0.5喊衫,則該region proposal作為這個(gè)ground truth類別的正樣本跌造,否則作為負(fù)樣本。另外正樣本還包括了Ground Truth族购。因?yàn)閂OC一共包含20個(gè)類別壳贪,所以這里region proposal的類別為20+1=21類,1表示背景寝杖。簡(jiǎn)單說(shuō)下IOU的概念违施,IOU是計(jì)算矩形框A、B的重合度的公式:IOU=(A∩B)/(A∪B)瑟幕,重合度越大磕蒲,說(shuō)明二者越相近。
預(yù)訓(xùn)練只盹。這一步主要是因?yàn)闄z測(cè)問(wèn)題中帶標(biāo)簽的樣本數(shù)據(jù)量比較少辣往,難以進(jìn)行大規(guī)模訓(xùn)練。采用網(wǎng)絡(luò)AlexNet來(lái)學(xué)習(xí)特征殖卑,包含5個(gè)卷積層和2個(gè)全連接層站削,在Caffe框架下利用ILSVRC 2012的數(shù)據(jù)集進(jìn)行預(yù)訓(xùn)練,其實(shí)就是利用大數(shù)據(jù)集訓(xùn)練一個(gè)分類器孵稽,這個(gè)ILSVRC 2012數(shù)據(jù)集就是著名的ImageNet比賽的數(shù)據(jù)集许起,也是彩色圖像分類。
fine-tuning菩鲜。將2中得到的樣本進(jìn)行尺寸變換园细,使得大小一致,這是由于2中得到的region proposal大小不一接校,所以需要將region proposal變形成227*227珊肃。本文中對(duì)所有不管什么樣大小和橫縱比的region proposal都直接拉伸到固定尺寸。然后作為3中預(yù)訓(xùn)練好的網(wǎng)絡(luò)的輸入馅笙,繼續(xù)訓(xùn)練網(wǎng)絡(luò)伦乔,繼續(xù)訓(xùn)練其實(shí)就是遷移學(xué)習(xí)。另外由于ILSVRC 2012是一個(gè)1000類的數(shù)據(jù)集董习,而本文的數(shù)據(jù)集是21類(包括20個(gè)VOC類別和一個(gè)背景類別)烈和,遷移的時(shí)候要做修改,將最后一個(gè)全連接層的輸出由1000改成21皿淋,其他結(jié)構(gòu)不變招刹。訓(xùn)練結(jié)束后保存f7的特征恬试。
針對(duì)每個(gè)類別訓(xùn)練一個(gè)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會(huì)比較寬松。而在SVM階段是由于SVM適用于小樣本丹弱,所以設(shè)置0.3會(huì)更嚴(yán)格一點(diǎn)德撬。
回歸。用pool5的特征6*6*256維和bounding box的ground truth來(lái)訓(xùn)練回歸躲胳,每種類型的回歸器單獨(dú)訓(xùn)練蜓洪。輸入是pool5的特征,以及每個(gè)樣本對(duì)的坐標(biāo)和長(zhǎng)寬值泛鸟。另外只對(duì)那些跟ground truth的IOU超過(guò)某個(gè)閾值且IOU最大的proposal回歸蝠咆,其余的region proposal不參與踊东。具體參考鏈接3北滥。詳細(xì)說(shuō)一下:對(duì)于某個(gè)region proposal:R,以及其對(duì)應(yīng)的Ground truth:G闸翅,我們希望預(yù)測(cè)結(jié)果是:P再芋,那么我們肯定希望P盡可能接近G。這里通過(guò)對(duì)pool5層的特征X做線性變換WX得到變換函數(shù)F(X)坚冀,這些變換函數(shù)作用于R的坐標(biāo)達(dá)到回歸的作用(包括對(duì)x济赎,y的平移以及對(duì)w,h的縮放)记某。因此損失函數(shù)可以表達(dá)為:R和G的差距減去P和G的差距要盡可能小司训。
測(cè)試過(guò)程:
輸入一張圖像,利用selective search得到2000個(gè)region proposal液南。
對(duì)所有region proposal變換到固定尺寸并作為已訓(xùn)練好的CNN網(wǎng)絡(luò)的輸入壳猜,得到 f7 層的4096維特征,所以 f7 層的輸出是2000*4096滑凉。
對(duì)每個(gè)類別统扳,采用已訓(xùn)練好的這個(gè)類別的svm分類器對(duì)提取到的特征打分喘帚,所以SVM的weight matrix是4096*N,N是類別數(shù)咒钟,這里一共有20個(gè)SVM吹由,N=20注意不是21。得分矩陣是2000*20朱嘴,表示每個(gè)region proposal屬于某一類的得分倾鲫。
采用non-maximun suppression(NMS)對(duì)得分矩陣中的每一列中的region proposal進(jìn)行剔除,就是去掉重復(fù)率比較高的幾個(gè)region proposal腕够,得到該列中得分最高的幾個(gè)region proposal级乍。NMS的意思是:舉個(gè)例子,對(duì)于2000*20中的某一列得分帚湘,找到分?jǐn)?shù)最高的一個(gè)region proposal玫荣,然后只要該列中其他region proposal和分?jǐn)?shù)最高的IOU超過(guò)某一個(gè)閾值,則剔除該region proposal大诸。這一輪剔除完后捅厂,再?gòu)氖O碌膔egion proposal找到分?jǐn)?shù)最高的,然后計(jì)算別的region proposal和該分?jǐn)?shù)最高的IOU是否超過(guò)閾值资柔,超過(guò)的繼續(xù)剔除焙贷,直到?jīng)]有剩下region proposal。對(duì)每一列都這樣操作贿堰,這樣最終每一列(即每個(gè)類別)都可以得到一些region proposal辙芍。
用N=20個(gè)回歸器對(duì)第4步得到的20個(gè)類別的region proposal進(jìn)行回歸,要用到pool5層的特征羹与。pool5特征的權(quán)重W是在訓(xùn)練階段的結(jié)果故硅,測(cè)試的時(shí)候直接用。最后得到每個(gè)類別的修正后的bounding box纵搁。
5. 對(duì)應(yīng)4的進(jìn)一步解釋
測(cè)試過(guò)程:
輸入一張多目標(biāo)圖像吃衅,采用selective search算法提取約2000個(gè)建議框;
先在每個(gè)建議框周圍加上16個(gè)像素值為建議框像素平均值的邊框腾誉,再直接變形為227×227的大信遣恪;
先將所有建議框像素減去該建議框像素平均值后【預(yù)處理操作】利职,再依次將每個(gè)227×227的建議框輸入AlexNet CNN網(wǎng)絡(luò)獲取4096維的特征【比以前的人工經(jīng)驗(yàn)特征低兩個(gè)數(shù)量級(jí)】趣效,2000個(gè)建議框的CNN特征組合成2000×4096維矩陣;
將2000×4096維特征與20個(gè)SVM組成的權(quán)值矩陣4096×20相乘【20種分類猪贪,SVM是二分類器跷敬,則有20個(gè)SVM】,獲得2000×20維矩陣表示每個(gè)建議框是某個(gè)物體類別的得分哮伟;
分別對(duì)上述2000×20維矩陣中每一列即每一類進(jìn)行非極大值抑制剔除重疊建議框干花,得到該列即該類中得分最高的一些建議框妄帘;
分別用20個(gè)回歸器對(duì)上述20個(gè)類別中剩余的建議框進(jìn)行回歸操作,最終得到每個(gè)類別的修正后的得分最高的bounding box池凄。
解釋分析
selective search
采取過(guò)分割手段抡驼,將圖像分割成小區(qū)域,再通過(guò)顏色直方圖肿仑,梯度直方圖相近等規(guī)則進(jìn)行合并致盟,最后生成約2000個(gè)建議框的操作,具體見博客尤慰。-
為什么要將建議框變形為227×227馏锡?怎么做?
本文采用AlexNet CNN網(wǎng)絡(luò)進(jìn)行CNN特征提取伟端,為了適應(yīng)AlexNet網(wǎng)絡(luò)的輸入圖像大斜馈:227×227,故將所有建議框變形為227×227责蝠。
那么問(wèn)題來(lái)了党巾,如何進(jìn)行變形操作呢?作者在補(bǔ)充材料中給出了四種變形方式:① 考慮context【圖像中context指RoI周邊像素】的各向同性變形霜医,建議框像周圍像素?cái)U(kuò)充到227×227齿拂,若遇到圖像邊界則用建議框像素均值填充,下圖第二列肴敛;
② 不考慮context的各向同性變形署海,直接用建議框像素均值填充至227×227,下圖第三列医男;
③ 各向異性變形砸狞,簡(jiǎn)單粗暴對(duì)圖像就行縮放至227×227,下圖第四列昨登;
④ 變形前先進(jìn)行邊界像素填充【padding】處理趾代,即向外擴(kuò)展建議框邊界贯底,以上三種方法中分別采用padding=0下圖第一行丰辣,padding=16下圖第二行進(jìn)行處理;經(jīng)過(guò)作者一系列實(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)于對(duì)227×227的輸入圖像浊服,卷積核大小為195×195统屈,padding=4胚吁,step=8,輸出大小(227-195+2×4)/8+1=6×6】愁憔;
文中將這些特征視為”物體檢測(cè)器”腕扶,輸入10million的Region Proposal集合,計(jì)算每種6×6特征即“物體檢測(cè)器”的激活量吨掌,之后進(jìn)行非極大值抑制【下面解釋】半抱,最后展示出每種6×6特征即“物體檢測(cè)器”前幾個(gè)得分最高的Region Proposal,從而給出了這種6×6的特征圖表示了什么紋理膜宋、結(jié)構(gòu)窿侈,很有意思。為什么要進(jìn)行非極大值抑制秋茫?非極大值抑制又如何操作史简?
先解釋什么叫IoU。如下圖所示IoU即表示(A∩B)/(A∪B)
在測(cè)試過(guò)程完成到第4步之后肛著,獲得2000×20維矩陣表示每個(gè)建議框是某個(gè)物體類別的得分情況乘瓤,此時(shí)會(huì)遇到下圖所示情況,同一個(gè)車輛目標(biāo)會(huì)被多個(gè)建議框包圍策泣,這時(shí)需要非極大值抑制操作去除得分較低的候選框以減少重疊框衙傀。
具體怎么做呢?
① 對(duì)2000×20維矩陣中每列按從大到小進(jìn)行排序萨咕;
② 從每列最大的得分建議框開始统抬,分別與該列后面的得分建議框進(jìn)行IoU計(jì)算,若IoU>閾值危队,則剔除得分較小的建議框聪建,否則認(rèn)為圖像中存在多個(gè)同一類物體;
③ 從每列次大的得分建議框開始茫陆,重復(fù)步驟②金麸;
④ 重復(fù)步驟③直到遍歷完該列所有建議框;
⑤ 遍歷完2000×20維矩陣所有列簿盅,即所有物體種類都做一遍非極大值抑制挥下;
⑥ 最后剔除各個(gè)類別中剩余建議框得分少于該類別閾值的建議框〗按祝【文中沒(méi)有講棚瘟,博主覺(jué)得有必要做】
-
為什么要采用回歸器?回歸器是什么有什么用喜最?如何進(jìn)行操作偎蘸?
首先要明確目標(biāo)檢測(cè)不僅是要對(duì)目標(biāo)進(jìn)行識(shí)別,還要完成定位任務(wù),所以最終獲得的bounding-box也決定了目標(biāo)檢測(cè)的精度迷雪。
這里先解釋一下什么叫定位精度:定位精度可以用算法得出的物體檢測(cè)框與實(shí)際標(biāo)注的物體邊界框的IoU值來(lái)近似表示限书。如下圖所示,綠色框?yàn)閷?shí)際標(biāo)準(zhǔn)的卡宴車輛框章咧,即Ground Truth蔗包;黃色框?yàn)閟elective search算法得出的建議框,即Region Proposal慧邮。即使黃色框中物體被分類器識(shí)別為卡宴車輛调限,但是由于綠色框和黃色框IoU值并不大,所以最后的目標(biāo)檢測(cè)精度并不高误澳。采用回歸器是為了對(duì)建議框進(jìn)行校正耻矮,使得校正后的Region Proposal與selective search更接近, 以提高最終的檢測(cè)精度忆谓。論文中采用bounding-box回歸使mAP提高了3~4%裆装。
那么問(wèn)題來(lái)了,回歸器如何設(shè)計(jì)呢倡缠?
如上圖哨免,黃色框口P表示建議框Region Proposal,綠色窗口G表示實(shí)際框Ground Truth昙沦,紅色窗口G^表示Region Proposal進(jìn)行回歸后的預(yù)測(cè)窗口琢唾,現(xiàn)在的目標(biāo)是找到P到G^的線性變換【當(dāng)Region Proposal與Ground Truth的IoU>0.6時(shí)可以認(rèn)為是線性變換】,使得G^與G越相近盾饮,這就相當(dāng)于一個(gè)簡(jiǎn)單的可以用最小二乘法解決的線性回歸問(wèn)題采桃,具體往下看。
讓我們先來(lái)定義P窗口的數(shù)學(xué)表達(dá)式:Pi=(Pix丘损,Piy普办,Piw,Pih)徘钥,其中(Pix衔蹲,Piy)表示第一個(gè)i窗口的中心點(diǎn)坐標(biāo),Piw呈础,Pih分別為第i個(gè)窗口的寬和高舆驶;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)通過(guò)平移對(duì)x和y進(jìn)行變化果元,dw(P)和dh(P)通過(guò)縮放對(duì)w和h進(jìn)行變化,即下面四個(gè)式子所示:
G^x=Pwdx(P)+Px(1)
G^y=Phdy(P)+Py(2)
G^w=Pwexp(dw(P))(3)
G^h=Phexp(dh(P))(4)
每一個(gè)d?(P)【*表示x犀盟,y而晒,w,h】都是一個(gè)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?過(guò)大贱枣。其中监署,回歸目標(biāo)t?由訓(xùn)練輸入對(duì)(P,G)按下式計(jì)算得來(lái):
tx=(Gx?Px)/Pw(6)
ty=(Gy?Py)/Ph(7)
tw=log(Gw/Pw)(8)
th=log(Gh/Ph)(9)
①構(gòu)造樣本對(duì)纽哥。為了提高每類樣本框回歸的有效性钠乏,對(duì)每類樣本都僅僅采集與Ground Truth相交IoU最大的Region Proposal,并且IoU>0.6的Region Proposal作為樣本對(duì)(Pi春塌,Gi)缓熟,一共產(chǎn)生20對(duì)樣本對(duì)【20個(gè)類別】;
②每種類型的回歸器單獨(dú)訓(xùn)練摔笤,輸入該類型樣本對(duì)N個(gè):{(Pi,Gi)}i=1?N以及Pii=1?N所對(duì)應(yīng)的AlexNet CNN網(wǎng)絡(luò)Pool5層特征?5(Pi)i=1?N够滑;
③利用(6)-(9)式和輸入樣本對(duì){(Pi,Gi)}i=1?N計(jì)算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個(gè))命辖;
- 對(duì)region proposal大小進(jìn)行歸一化况毅,用作CNN網(wǎng)絡(luò)的標(biāo)準(zhǔn)輸入;
- 使用AlexNet網(wǎng)絡(luò)獲得region proposal中的特征尔艇;
-
利用SVM進(jìn)行分類以及線性回歸微調(diào)定位框尔许。
7. 缺點(diǎn)
- R-CNN對(duì)近2000個(gè)候選區(qū)域分別做特征提取,而候選區(qū)域之間存在許多重復(fù)區(qū)域终娃,導(dǎo)致大量且重復(fù)的運(yùn)算味廊。
- 對(duì)每一步的數(shù)據(jù)進(jìn)行存儲(chǔ),極為損耗存儲(chǔ)空間。
- 對(duì)候選區(qū)域進(jìn)行歸一化操作余佛,會(huì)對(duì)最終結(jié)果產(chǎn)生影響柠新。