R-FCN详解
論文題目:R-FCN: Object Detection via Region-based Fully Convolutional Networks?
論文鏈接:論文鏈接
論文代碼:Caffe版本鏈接地址;Python版本鏈接地址;Deformable R-FCN版本鏈接地址
一、R-FCN初探
1. R-FCN貢獻(xiàn)
提出Position-sensitive score maps來解決目標(biāo)檢測(cè)的位置敏感性問題;
區(qū)域?yàn)榛A(chǔ)的,全卷積網(wǎng)絡(luò)的二階段目標(biāo)檢測(cè)框架;
比Faster-RCNN快2.5-20倍(在K40GPU上面使用ResNet-101網(wǎng)絡(luò)可以達(dá)到 0.17 sec/image);
2. R-FCN與傳統(tǒng)二階段網(wǎng)絡(luò)的異同點(diǎn)
圖1?R-FCN與傳統(tǒng)二階段網(wǎng)絡(luò)的異同點(diǎn)
相同點(diǎn):首先,兩者二階段的檢測(cè)框架(全卷積子網(wǎng)絡(luò)+RoI-wise subnetwork); 其次兩者最終輸出的結(jié)果都是相應(yīng)的類別和對(duì)應(yīng)的BB;
不同點(diǎn):
如上圖所示,我們可以看到和Faster R-CNN相比,R-FCN具有更深的共享卷積網(wǎng)絡(luò)層,這樣可以獲得更加抽象的特征;同時(shí),它沒有RoI-wise subnetwork,不像Faster R-CNN的feature map左右都有對(duì)應(yīng)的網(wǎng)絡(luò)層,它是真正的全卷積網(wǎng)絡(luò)架構(gòu);從圖中的表格可以看出Faster R-CNN的共享卷積子網(wǎng)絡(luò)是91層,RoI-wise子網(wǎng)絡(luò)是10層,而R-FCN只有共享卷積子網(wǎng)絡(luò),深度為101層。與R-CNN相比,最大的不同就是直接獲得整幅圖像的feature map,再提取對(duì)應(yīng)的ROI,而不是直接在不同的ROI上面獲得相應(yīng)的feature map。
3. 分類網(wǎng)絡(luò)的位置不敏感性和檢測(cè)網(wǎng)絡(luò)的位置敏感性
我在很多相關(guān)的檢測(cè)論文中都看到這兩個(gè)概念,但是一直都沒有理解其真正的含義,相信很多朋友們也有同樣的困惑,所以我在這里解釋一下。
圖2?分類網(wǎng)絡(luò)的位置不敏感性和檢測(cè)網(wǎng)絡(luò)的位置敏感性
分類網(wǎng)絡(luò)的位置不敏感性:簡(jiǎn)單來講,對(duì)于分類任務(wù)而言,我希望我的網(wǎng)絡(luò)有一個(gè)很好地分類性能,隨著某個(gè)目標(biāo)在圖片中不斷的移動(dòng),我的網(wǎng)絡(luò)仍然可以準(zhǔn)確的將你區(qū)分為對(duì)應(yīng)的類別。如上圖左邊所示,不管你這只鳥在圖片中如何移動(dòng),我的分類網(wǎng)絡(luò)都想要準(zhǔn)確的將你分類為鳥。即我的網(wǎng)絡(luò)有很好地區(qū)分能力。實(shí)驗(yàn)表明,深的全卷積網(wǎng)絡(luò)能夠具備這個(gè)特性,如ResNet-101等。
檢測(cè)網(wǎng)絡(luò)的位置敏感性:簡(jiǎn)單來講,對(duì)于檢測(cè)任務(wù)而言,我希望我的網(wǎng)絡(luò)有一個(gè)好的檢測(cè)性能,可以準(zhǔn)確的輸出目標(biāo)所在的位置值。隨著某個(gè)目標(biāo)的移動(dòng),我的網(wǎng)絡(luò)希望能夠和它一起移動(dòng),仍然能夠準(zhǔn)確的檢測(cè)到它,即我對(duì)目標(biāo)位置的移動(dòng)很敏感。我需要計(jì)算對(duì)應(yīng)的偏差值,我需要計(jì)算我的預(yù)測(cè)和GT的重合率等。但是,深的全卷積網(wǎng)路不具備這樣的一個(gè)特征。
總之,分類網(wǎng)絡(luò)的位置不敏感性和檢測(cè)網(wǎng)絡(luò)的位置敏感性的一個(gè)矛盾問題,而我們的目標(biāo)檢測(cè)中不僅要分類也要定位,那么如何解決這個(gè)問題呢,R-FCN提出了Position-sensitive score maps來解決這個(gè)問題;
4. R-FCN網(wǎng)絡(luò)的設(shè)計(jì)動(dòng)機(jī)
Faster R-CNN是首個(gè)利用CNN來完成proposals預(yù)測(cè)的,從此之后很多的目標(biāo)檢測(cè)網(wǎng)絡(luò)都開始使用Faster R-CNN的思想。而Faster R-CNN系列的網(wǎng)絡(luò)都可以分成2個(gè)部分:ROI Pooling之前的共享全卷積網(wǎng)絡(luò)和ROI Pooling之后的ROI-wise子網(wǎng)絡(luò)(用來對(duì)每個(gè)ROI進(jìn)行特征提出,并進(jìn)行回歸和分類)。第1部分就是直接用普通分類網(wǎng)絡(luò)的卷積層,用來提取共享特征,然后利用ROI Pooling在最后一層網(wǎng)絡(luò)形成的feature map上面提取針對(duì)各個(gè)RoIs的特征向量,然后將所有RoIs的特征向量都交給第2部分來處理(即所謂的分類和回歸),而第二部分一般都是一些全連接層,在最后有2個(gè)并行的loss函數(shù):softmax和smoothL1,分別用來對(duì)每一個(gè)RoI進(jìn)行分類和回歸,這樣就可以得到每個(gè)RoI的真實(shí)類別和較為精確的坐標(biāo)信息啦(x, y, w, h)。
需要注意的是第1部分通常使用的都是像VGG、GoogleNet、ResNet之類的基礎(chǔ)分類網(wǎng)絡(luò),這些網(wǎng)絡(luò)的計(jì)算都是所有RoIs共享的,在一張圖片上面進(jìn)行測(cè)試的時(shí)候只需要進(jìn)行一次前向計(jì)算即可。而對(duì)于第2部分的RoI-wise subnetwork,它卻不是所有RoIs共享的,主要的原因是因?yàn)檫@一部分的作用是“對(duì)每個(gè)RoI進(jìn)行分類和回歸”,所以不能進(jìn)行共享計(jì)算。那么問題就處在這里,首先第1部分的網(wǎng)絡(luò)具有“位置不敏感性”,而如果我們將一個(gè)分類網(wǎng)絡(luò)比如ResNet的所有卷積層都放置在第1部分用來提取特征,而第2部分則只剩下全連接層,這樣的目標(biāo)檢測(cè)網(wǎng)絡(luò)是位置不敏感的translation-invariance,所以其檢測(cè)精度會(huì)較低,而且這樣做也會(huì)浪費(fèi)掉分類網(wǎng)絡(luò)強(qiáng)大的分類能力(does not match the network's superior classification accuracy)。而ResNet論文中為了解決這個(gè)問題,做出了一點(diǎn)讓步,即將RoI Pooling層不再放置在ResNet-101網(wǎng)絡(luò)的最后一層卷積層之后而是放置在了“卷積層之間”,這樣RoI Pooling Layer之前和之后都有卷積層,并且RoI Pooling Layer之后的卷積層不是共享計(jì)算的,它們是針對(duì)每個(gè)RoI進(jìn)行特征提取的,所以這種網(wǎng)絡(luò)設(shè)計(jì),其RoI Pooling層之后就具有了位置敏感性translation-variance,但是這樣做會(huì)犧牲測(cè)試速度,因?yàn)樗械腞oIs都需要經(jīng)過若干層卷積計(jì)算,這樣會(huì)導(dǎo)致測(cè)試速度很慢。R-FCN就是針對(duì)這個(gè)問題提出了自己的解決方案,在速度和精度之間進(jìn)行折中。
二、R-FCN架構(gòu)分析
1. R-FCN算法步驟
圖3 R-FCN算法步驟
如圖所示,我們先來分析一下R-FCN算法的整個(gè)運(yùn)行步驟,使得我們對(duì)整個(gè)算法有一個(gè)宏觀的理解,接下來再對(duì)不同的細(xì)節(jié)進(jìn)行詳細(xì)的分析。
首先,我們選擇一張需要處理的圖片,并對(duì)這張圖片進(jìn)行相應(yīng)的預(yù)處理操作;
接著,我們將預(yù)處理后的圖片送入一個(gè)預(yù)訓(xùn)練好的分類網(wǎng)絡(luò)中(這里使用了ResNet-101網(wǎng)絡(luò)的Conv4之前的網(wǎng)絡(luò)),固定其對(duì)應(yīng)的網(wǎng)絡(luò)參數(shù);
接著,在預(yù)訓(xùn)練網(wǎng)絡(luò)的最后一個(gè)卷積層獲得的feature map上存在3個(gè)分支,第1個(gè)分支就是在該feature map上面進(jìn)行RPN操作,獲得相應(yīng)的ROI;第2個(gè)分支就是在該feature map上獲得一個(gè)K*K*(C+1)維的位置敏感得分映射(position-sensitive score map),用來進(jìn)行分類;第3個(gè)分支就是在該feature map上獲得一個(gè)4*K*K維的位置敏感得分映射,用來進(jìn)行回歸;
最后,在K*K*(C+1)維的位置敏感得分映射和4*K*K維的位置敏感得分映射上面分別執(zhí)行位置敏感的ROI池化操作(Position-Sensitive Rol Pooling,這里使用的是平均池化操作),獲得對(duì)應(yīng)的類別和位置信息。
這樣,我們就可以在測(cè)試圖片中獲得我們想要的類別信息和位置信息啦。
2. Position-Sensitive Score Map解析
圖3是R-FCN的網(wǎng)絡(luò)結(jié)構(gòu)圖,其主要設(shè)計(jì)思想就是“位置敏感得分圖position-sensitive score map”。現(xiàn)在我們來解釋一下其設(shè)計(jì)思路。如果一個(gè)RoI中含有一個(gè)類別C的物體,我們將該RoI劃分為K*K?個(gè)區(qū)域,其分別表示該物體的各個(gè)部位,比如假設(shè)該RoI中含有的目標(biāo)是人,K=3,那么就將“人”劃分成了9個(gè)子區(qū)域,top-center區(qū)域毫無疑問應(yīng)該是人的頭部,而bottom-center應(yīng)該是人的腳部,我們將RoI劃分為K*K個(gè)子區(qū)域是希望這個(gè)RoI在其中的每一個(gè)子區(qū)域都應(yīng)該含有該類別C的物體的各個(gè)部位,即如果是人,那么RoI的top-center區(qū)域就應(yīng)該含有人的頭部。當(dāng)所有的子區(qū)域都含有各自對(duì)應(yīng)的該物體的相應(yīng)部位后,那么分類器才會(huì)將該RoI判斷為該類別。也就是說物體的各個(gè)部位和RoI的這些子區(qū)域是“一一映射”的對(duì)應(yīng)關(guān)系。
OK,現(xiàn)在我們知道了一個(gè)RoI必須是K*K個(gè)子區(qū)域都含有該物體的相應(yīng)部位,我們才能判斷該RoI屬于該物體,如果該物體的很多部位都沒有出現(xiàn)在相應(yīng)的子區(qū)域中,那么就該RoI判斷為背景類別。那么現(xiàn)在的問題就是網(wǎng)絡(luò)如何判斷一個(gè)RoI的 K*K個(gè)子區(qū)域都含有相應(yīng)部位呢?前面我們是假設(shè)知道每個(gè)子區(qū)域是否含有物體的相應(yīng)部位,那么我們就能判斷該RoI是否屬于該物體還是屬于背景。那么現(xiàn)在我們的任務(wù)就是判斷RoI子區(qū)域是否含有物體的相應(yīng)部位。
這其實(shí)就是position-sensitive score map設(shè)計(jì)的核心思想了。R-FCN會(huì)在共享卷積層的最后一層網(wǎng)絡(luò)上接上一個(gè)卷積層,而該卷積層就是位置敏感得分圖position-sensitive score map,該score map的含義如下所述,首先它就是一層卷積層,它的height和width和共享卷積層的一樣(即具有同樣的感受野),但是它的通道個(gè)數(shù)為K*K*(C+1)?。其中C表示物體類別種數(shù),再加上1個(gè)背景類別,所以共有(C+1)類,而每個(gè)類別都有 K*K個(gè)score maps。現(xiàn)在我們只針對(duì)其中的一個(gè)類別來進(jìn)行說明,假設(shè)我們的目標(biāo)屬于人這個(gè)類別,那么其有 K*K?個(gè)score maps,每一個(gè)score map表示原始圖像中的哪些位置含有人的某個(gè)部位,該score map會(huì)在含有對(duì)應(yīng)的人體的某個(gè)部位的位置有高的響應(yīng)值,也就是說每一個(gè)score map都是用來描述人體的其中一個(gè)部位出現(xiàn)在該score map的何處,而在出現(xiàn)的地方就有高響應(yīng)值”。既然是這樣,那么我們只要將RoI的各個(gè)子區(qū)域?qū)?yīng)到屬于人的每一個(gè)score map上然后獲取它的響應(yīng)值就好了。但是要注意的是,由于一個(gè)score map都是只屬于一個(gè)類別的一個(gè)部位的,所以RoI的第 i個(gè)子區(qū)域一定要到第i張score map上去尋找對(duì)應(yīng)區(qū)域的響應(yīng)值,因?yàn)镽oI的第i個(gè)子區(qū)域需要的部位和第i張score map關(guān)注的部位是對(duì)應(yīng)的。那么現(xiàn)在該RoI的K*K個(gè)子區(qū)域都已經(jīng)分別在屬于人的K*K個(gè)score maps上找到其響應(yīng)值了,那么如果這些響應(yīng)值都很高,那么就證明該RoI是人呀。當(dāng)然這有點(diǎn)不嚴(yán)謹(jǐn),因?yàn)槲覀冎皇窃趯儆谌说?K*K個(gè)score maps上找響應(yīng)值,我們還沒有到屬于其它類別的score maps上找響應(yīng)值呢,萬一該RoI的各個(gè)子區(qū)域在屬于其它類別的上的score maps的響應(yīng)值也很高,那么該RoI就也有可能屬于其它類別呢?是吧,如果2個(gè)類別的物體本身就長的很像呢?這就會(huì)涉及到一個(gè)比較的問題,那個(gè)類別的響應(yīng)值高,我就將它判斷為哪一類目標(biāo)。它們的響應(yīng)值同樣高這個(gè)情況發(fā)生的幾率很小,我們不做討論。
OK,這就是position-sensitive score map的全部思想了,應(yīng)該很容易理解了吧。
3.?Position-Sensitive Rol Pooling解析
上面我們只是簡(jiǎn)單的講解了一下ROl的K*K個(gè)子區(qū)域在各個(gè)類別的score maps上找到其每個(gè)子區(qū)域的響應(yīng)值,我們并沒有詳細(xì)的解釋這個(gè)“找到”是如何找的?這就是位置敏感Rol池化操作(Position-sensitive RoI pooling),其字面意思是池化操作是位置敏感的,下來我們對(duì)它進(jìn)行解釋說明。
如圖3所示,通過RPN提取出來的RoI區(qū)域,其是包含了x,y,w,h的4個(gè)值,也就是說不同的RoI區(qū)域能夠?qū)?yīng)到score map的不同位置上,而一個(gè)RoI會(huì)被劃分成K*K個(gè)bins(也就是子區(qū)域。每個(gè)子區(qū)域bin的長寬分別是 h/k?和 w/k?),每個(gè)bin都對(duì)應(yīng)到score map上的某一個(gè)區(qū)域。既然該RoI的每個(gè)bin都對(duì)應(yīng)到score map上的某一個(gè)子區(qū)域,那么池化操作就是在該bin對(duì)應(yīng)的score map上的子區(qū)域執(zhí)行,且執(zhí)行的是平均池化。我們?cè)谇懊嬉呀?jīng)講了,第i個(gè)bin應(yīng)該在第i個(gè)score map上尋找響應(yīng)值,那么也就是在第i個(gè)score map上的第i個(gè)bin對(duì)應(yīng)的位置上進(jìn)行平均池化操作。由于我們有(C+1)個(gè)類別,所以每個(gè)類別都要進(jìn)行相同方式的池化操作。
圖4?Position-Sensitive Rol Pooling解析
圖4已經(jīng)很明顯的畫出了池化的方式,對(duì)于每個(gè)類別,它都有K*K個(gè)score maps,那么按照上述的池化方式,ROI可以針對(duì)該類別可以獲得K*K個(gè)值,那么一共有(C+1)個(gè)類別,那么一個(gè)RoI就可以得到K*K*(C+1)個(gè)值,就是上圖的特征圖。那么對(duì)于每個(gè)類別,該類別的K*K個(gè)值都表示該RoI屬于該類別的響應(yīng)值,那么將這K*K個(gè)數(shù)相加就得到該類別的score,那么一共有(C+1)個(gè)scores,那么在這(C+1)個(gè)數(shù)上面使用簡(jiǎn)單的softmax函數(shù)就可以得到各個(gè)類別的概率了(注意,這里不需要使softmax分類器了,只需要使用簡(jiǎn)答的softmax函數(shù),因?yàn)檫@里就是通過簡(jiǎn)單的比大小來判斷最終的類別的)。
4.?Position-Sensitive Regression解析
前面的position-sensitive score map和Position-sensitive RoI pooling得到的值是用來分類的,那么自然需要相應(yīng)的操作得到對(duì)應(yīng)的值來進(jìn)行回歸操作。按照position-sensitive score map和Position-sensitive RoI pooling思路,其會(huì)讓每一個(gè)RoI得到(C+1)個(gè)數(shù)作為每個(gè)類別的score,那么現(xiàn)在每個(gè)RoI還需要 4個(gè)數(shù)作為回歸偏移量,也就是x,y,w,h的偏移量,所以仿照分類設(shè)計(jì)的思想,我們還需要一個(gè)類似于position-sensitive score map的用于回歸的score map。那么應(yīng)該如何設(shè)置這個(gè)score map呢,論文中給出了說明:即在ResNet的共享卷積層的最后一層上面連接一個(gè)與position-sensitive score map并行的score maps,該score maps用來進(jìn)行regression操作,我們將其命名為regression score map,而該regression score map的維度應(yīng)當(dāng)是 4*K*K?,然后經(jīng)過Position-sensitive RoI pooling操作后,每一個(gè)RoI就能得到4個(gè)值作為該RoI的x,y,w,h的偏移量了,其思路和分類完全相同。
5.?為什么position-sensitive score map能夠在含有某個(gè)類別的物體的某個(gè)部位的區(qū)域上具有高響應(yīng)值?
這種有高響應(yīng)值現(xiàn)在只是作者自己設(shè)想的啊,如果網(wǎng)絡(luò)不滿足這一點(diǎn)的話,那么我們前面的所有分析都不成立啦。現(xiàn)在我們就大致解釋一下為什么訓(xùn)練該網(wǎng)絡(luò)能夠讓網(wǎng)絡(luò)最終滿足這一點(diǎn)。首先根據(jù)網(wǎng)絡(luò)的loss計(jì)算公式,如果一個(gè)RoI含有人這個(gè)物體,那么該RoI通過position-sensitive score map和Position-sensitive RoI pooling得到的(C+1)個(gè)值中屬于人的那個(gè)值必然會(huì)在softmax損失函數(shù)的驅(qū)動(dòng)下變得盡量的大,那么如何才能使得屬于人的這個(gè)值盡量的大呢?那么我們需要想想屬于人的這個(gè)預(yù)測(cè)值是怎么來的?經(jīng)過前面的分析,我們已經(jīng)知道它是通過Position-sensitive RoI pooling這種池化操作獲得的,那么也就是說使得(C+1)個(gè)值中屬于人的那個(gè)值盡量大,必然會(huì)使得position-sensitive score map中屬于人的那個(gè)score map上的RoI對(duì)應(yīng)的位置區(qū)域的平均值盡量大,從而會(huì)使得該score map上在該區(qū)域上的響應(yīng)值盡量大,因?yàn)橹挥性搮^(qū)域的響應(yīng)值大了,才能使得預(yù)測(cè)為人的概率大,才會(huì)降低softmax的loss,整個(gè)訓(xùn)練過程才能進(jìn)行下去。
圖5 位置敏感得分映射表現(xiàn)1
圖6 位置敏感得分映射表現(xiàn)2
如圖5和圖6所示,我們同樣可以得出以上的結(jié)論。如圖5所示,我們輸入了一張含有一個(gè)小孩的圖片,圖中黃色的BB表示我們的檢測(cè)到的目標(biāo),也就是我們的一個(gè)ROI,接下來是9張位置敏感的得分映射圖(在這里使用的是3x3的特征映射),這9張圖分別表示對(duì)人這個(gè)目標(biāo)的top-left、top-center、... bottom-right不同區(qū)域敏感的得分映射。對(duì)應(yīng)到圖中就是將這個(gè)ROI分為9個(gè)子區(qū)域,每一個(gè)子區(qū)域其實(shí)大致上對(duì)應(yīng)到了小孩的不同部位,而不同的部位一般都會(huì)有其獨(dú)特的特征存在,9個(gè)區(qū)域敏感得分映射圖對(duì)不同的區(qū)域比較敏感(所謂的敏感就是說如果這個(gè)子區(qū)域中存在該目標(biāo)的某個(gè)部位特征時(shí),其才會(huì)輸出較大的響應(yīng)值,否則的話我會(huì)輸出較小的響應(yīng)值)。圖5中的9個(gè)得分映射對(duì)ROI中劃分的對(duì)應(yīng)子區(qū)域都比較敏感(都有很強(qiáng)的響應(yīng)值,越白表示響應(yīng)越大,越黑表示響應(yīng)越小),即ROI中的9個(gè)子區(qū)域都有較大的響應(yīng)值。然后進(jìn)行位置敏感池化操作,最后進(jìn)行Vote操作,由于9個(gè)區(qū)域中基本上都有很高的響應(yīng)值,最后投票通過,認(rèn)為這個(gè)ROI中的對(duì)象是一個(gè)person。同理,可以得出圖6是一個(gè)背景類。(圖6的位置敏感ROI池化中有5個(gè)區(qū)域是黑色的,即表示具有較低的響應(yīng)值,只有4個(gè)區(qū)域比較高,即表示具有較高的響應(yīng)值,根據(jù)Vote機(jī)制,就將其分類為背景類)。
6. Loss計(jì)算及其分析
這個(gè)Loss就是兩階段目標(biāo)檢測(cè)框架常用的形式。包括一個(gè)分類Loss和一個(gè)回歸Loss。lamdy用來平衡兩者的重要性。對(duì)于任意一個(gè)RoI,我們需要計(jì)算它的softmax損失,和當(dāng)其不屬于背景時(shí)的回歸損失。這很簡(jiǎn)單,因?yàn)槊總€(gè)RoI都被指定屬于某一個(gè)GT box或者屬于背景,即先選擇和GT box具有最大重疊率(IOU)的Rol,然后在剩余的Rol中選擇與GT box的重疊率值大于0.5Rol進(jìn)行匹配操作,最后將剩余的Rol都?xì)w為背景類。即每個(gè)Rol都有了對(duì)應(yīng)的標(biāo)簽,我們就可以根據(jù)監(jiān)督學(xué)習(xí)常用的方法來訓(xùn)練它啦。
7.?online hard example mining?
這個(gè)方法是目標(biāo)檢測(cè)框架中經(jīng)常會(huì)用到的一個(gè)tricks,其主要的思路如下所示:首先對(duì)RPN獲得的候選ROI(正負(fù)樣本分別進(jìn)行排序)進(jìn)行排序操作;然后在含有正樣本(目標(biāo))的ROI中選擇前N個(gè)ROI,將正負(fù)樣本的比例維持在1:3的范圍內(nèi),基本上保證每次抽取的樣本中都會(huì)含有一定的正樣本,都可以通過訓(xùn)練來提高網(wǎng)絡(luò)的分類能力。如果不進(jìn)行此操作的話,很可能會(huì)出現(xiàn)抽取的所有樣本都是負(fù)樣本(背景)的情況,這樣讓網(wǎng)絡(luò)學(xué)習(xí)這些負(fù)樣本,會(huì)影響網(wǎng)絡(luò)的性能。(這完全是我個(gè)人的理解,哈哈哈)
8. Atrous algorithm(Dilated Convolutions或者膨脹卷積)
圖7 膨脹卷積
這個(gè)方法同樣也是目標(biāo)檢測(cè)中常用的一個(gè)tricks,其最主要的目的是可以在減小卷積步長的同時(shí)擴(kuò)大feature map的大小,即同等情況下,通過這個(gè)操作,我們可以獲得一個(gè)更大的feature map,而實(shí)驗(yàn)表明,大的feature map會(huì)提升檢測(cè)的性能。具體的解釋可以去看這個(gè)鏈接。上圖是一個(gè)膨脹卷積的操作,通過幾次操作,我們可以看到我們的接收?qǐng)鲈诓粩嗟臄U(kuò)大,具體的解釋請(qǐng)看英文吧。
9. 為了過濾背景Rols使用的方法
在測(cè)試的時(shí)候,為了減少RoIs的數(shù)量,作者在RPN提取階段就對(duì)RPN提取的大約2W個(gè)proposals進(jìn)行了過濾,方法如下所示,
去除超過圖像邊界的proposals;
使用基于類別概率且閾值IoU=0.7的NMS過濾;
按照類別概率選擇top-N個(gè)proposals;
所以在測(cè)試的時(shí)候,最后一般只剩下300左右個(gè)RoIs,當(dāng)然這個(gè)數(shù)量是一個(gè)超參數(shù)。并且在R-FCN的輸出300個(gè)預(yù)測(cè)框之后,仍然要對(duì)其使用NMS去除冗余的預(yù)測(cè)框。
10. 訓(xùn)練細(xì)節(jié)
R-FCN和Faster R-CNN采取了同樣的訓(xùn)練策略,具體的訓(xùn)練策略可以參考這篇博客。
11. 圖片中的ROI和特征上的ROI之間的映射關(guān)系
如果你不清楚它們是如何映射的,請(qǐng)查看這個(gè)鏈接。
三、R-FCN性能分析
1. 定量結(jié)果分析
表1 使用ResNet-101全卷積策略
如上表所示,作者測(cè)試了不同大小的ROI對(duì)性能的影響(我們使用了預(yù)訓(xùn)練的ResNet-101網(wǎng)絡(luò),在VOC 07數(shù)據(jù)集上面進(jìn)行測(cè)試),我們可以看到如果使用1x1的ROI,顯示輸出失敗,具體原因不得而知。當(dāng)使用7x7的ROI時(shí),能夠獲得最好的結(jié)果,這也是論文中最終使用7x7大小的ROI的原因吧,作者應(yīng)該是做了很多的驗(yàn)證工作。
表2 Faster R-CNN與R-FCN性能比較
如上表所示,我們比較了Faster R-CNN和R-FCN的性能,從表中我們可以看出與Faster R-CNN相比,R-FCN有更快的運(yùn)行速度,大概是2.5倍以上。另外,我們可以發(fā)現(xiàn)性能稍微有一點(diǎn)點(diǎn)提升,當(dāng)調(diào)整ROI的個(gè)數(shù)時(shí),我們發(fā)現(xiàn)300個(gè)ROI時(shí)能夠獲得最好的性能。
表3 預(yù)訓(xùn)練網(wǎng)絡(luò)的深度對(duì)性能的影響
如上表所示,隨著預(yù)訓(xùn)練網(wǎng)絡(luò)層數(shù)的加深,我們的檢測(cè)性能在不斷的得到提高,使用VGG和ResNet網(wǎng)絡(luò)還是有很大的性能差異,但是過深的網(wǎng)絡(luò)并沒有提高其性能,可能的原因是我們的網(wǎng)絡(luò)發(fā)生了過擬合情況。
表4 COCO數(shù)據(jù)集的訓(xùn)練結(jié)果
如上表所示,我們采用了COCO數(shù)據(jù)集進(jìn)行性能驗(yàn)證,與Faster R-CNN相比,R-FCN可以實(shí)現(xiàn)3倍的加速,準(zhǔn)確率可以提升2個(gè)百分點(diǎn)。
2. 定性結(jié)果分析
圖8 VOC 2007檢測(cè)結(jié)果
圖9 COCO檢測(cè)結(jié)果
以上是R-FCN算法在VOC2007和COCO數(shù)據(jù)集上面的性能表現(xiàn),總體上看效果還是挺不錯(cuò)的,具體的效果需要你自己去嘗試,根據(jù)自己的需求去選擇合適的算法。
四、總結(jié)
總的來講,和Faster R-CNN相比,R-FCN具有更快的運(yùn)行速度(2.5倍以上),稍微提高了一點(diǎn)檢測(cè)精度,在速度和準(zhǔn)確率之間進(jìn)行了折中,提出position-sensitive score map來解決檢測(cè)的位置敏感性問題。算法中的很多細(xì)節(jié)值得我們進(jìn)行深入的研究和分析,希望你從中學(xué)到了很多有用的東西。
參考文獻(xiàn):
[1] R-FCN對(duì)應(yīng)的poster,相關(guān)鏈接;
[2]?VGG Reading Group - Sam Albanie?,參考鏈接,密碼:hby1;
[3] 詳解R-FCN,博客鏈接;
注意事項(xiàng):
[1] 該博客是本人原創(chuàng)博客,如果您對(duì)該博客感興趣,想要轉(zhuǎn)載該博客,請(qǐng)與我聯(lián)系(qq郵箱:1575262785@qq.com),我會(huì)在第一時(shí)間回復(fù)大家,謝謝大家。
[2] 由于個(gè)人能力有限,該博客可能存在很多的問題,希望大家能夠提出改進(jìn)意見。
[3] 如果您在閱讀本博客時(shí)遇到不理解的地方,希望可以聯(lián)系我,我會(huì)及時(shí)的回復(fù)您,和您交流想法和意見,謝謝。
---------------------?
作者:技術(shù)挖掘者?
來源:CSDN?
原文:https://blog.csdn.net/WZZ18191171661/article/details/79481135?utm_source=copy?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
總結(jié)
- 上一篇: 关于hard-negative mini
- 下一篇: 深度学习: 从 RoIPooling 到