论文翻译 基于R-FCN的物体检测
本文轉(zhuǎn)載自:
http://www.jianshu.com/p/db1b74770e52
題目:基于R-FCN的物體檢測
- 文章地址:arXiv:1605.06409.
《R-FCN: Object Detection via Region-based Fully Convolutional Networks》 - Github鏈接:https://github.com/daijifeng001/r-fcn
(轉(zhuǎn)載請注明出處:[譯] 基于R-FCN的物體檢測 (zhwhong)?)
摘要
我們使用R-FCN(region-based, fully convolutional networks)進(jìn)行精確和有效的物體檢測。對(duì)比之前的區(qū)域檢測(Fast/Faster R-CNN [6 , 18] 應(yīng)用于每一個(gè)區(qū)域子網(wǎng)格要花費(fèi)數(shù)百次),我們的區(qū)域檢測是基于整幅圖片的全卷積計(jì)算。為了達(dá)到這個(gè)目標(biāo),我們使用了一個(gè)“位敏得分地圖”(position-sensitive score maps)來權(quán)衡在圖像分類中的平移不變性和在物體檢測中的平移變換性這樣一種兩難境地。我們的方法采用了全卷積圖片分類主干部分,例如用于物體檢測的最新的殘差網(wǎng)絡(luò)(Residual Networks) (ResNets)[9]。在PASCAL VOC(e.g.,83.6% mAP on the 2007 set) 數(shù)據(jù)集的實(shí)驗(yàn)上,我們使用了101層ResNet達(dá)到了很好的效果。同時(shí),我們僅僅使用了170ms/每張圖片,比Faster R-CNN匹配快了2.5~20倍左右。公開的代碼可以在此網(wǎng)站中訪問到:https://github.com/daijifeng001/r-fcn
簡介
比較流行的關(guān)于物體檢測的深度網(wǎng)絡(luò)可以通過ROI pooling layer分成兩個(gè)子網(wǎng)絡(luò):
(1)a shared, “fully convolutional” subnetwork independent of RoIs.(獨(dú)立于ROI的共享的、全卷積的子網(wǎng)絡(luò))
(2)an RoI-wise subnetwork that does not share computation.(不共享計(jì)算的ROI-wise子網(wǎng))
這種分解來源于較早之前的分類框架,例如:AlexNet[10]和VGGNets[23],他們由兩個(gè)子網(wǎng)組成,一個(gè)是以spatial pooling layer結(jié)束的卷積子網(wǎng),一個(gè)是若干個(gè)fully-connected layers。因此,spatial pooling layrer很自然的在本實(shí)驗(yàn)中被轉(zhuǎn)變成了ROI pooling layer。
但是最近的關(guān)于藝術(shù)圖片分類的網(wǎng)絡(luò),例如殘差網(wǎng)絡(luò)(ResNets)和GoogleNets都是用fully convolutional設(shè)計(jì)的。通過分析,使用所有的卷積層去構(gòu)建一個(gè)進(jìn)行物體檢測的共享的卷積網(wǎng)絡(luò)是一件十分自然的事,而不把ROI-wise 子網(wǎng)作為隱藏層(hidden layer)。然而,通過實(shí)證調(diào)查,這個(gè)天真的想法需要考慮到inferior detection accuracy(極差的檢測精度)與網(wǎng)絡(luò)的superior classification accuracy(較高的分類精度)不匹配的問題。為了解決這個(gè)問題,在殘差網(wǎng)絡(luò)(ResNet)[9]中, ROI pooling layer of the Faster R-CNN detector 插入了兩組卷積層,他們創(chuàng)造了一個(gè)更深的ROI-wise子網(wǎng)來提高準(zhǔn)確度,由于每個(gè)ROI的計(jì)算不共享,因此速度會(huì)比原來的要慢。
上述設(shè)計(jì)主要是為了解決圖片分類的平移不變性與物體檢測之間的平移變換性之間的矛盾。一方面,圖像級(jí)別的分類任務(wù)側(cè)重于平移不變性(在一幅圖片中平移一個(gè)物體而不改變它的判別結(jié)果),因此深度全卷積網(wǎng)絡(luò)結(jié)構(gòu)很適合處理這類圖片分類的問題。
圖一
圖二
另一方面,物體檢測任務(wù)需要定義物體的具體位置,因此需要平移變換特性。為了解決這矛盾,在ResNet的檢測方法中插入了ROI pooling layer到卷積層(this region-specific operation breaks down translation invariance,and the post-RoI convolutional layers are no longer translation-invariant when evaluated across different regions)。然而,這個(gè)設(shè)計(jì)犧牲了訓(xùn)練和測試的效率,因?yàn)樗肓舜罅康膔egion-wise layers。
在本篇文獻(xiàn)中,我們開發(fā)出了一個(gè)稱之為R-FCN(Region-based Fully Convolutional Network)的框架來用于物體檢測。我們的網(wǎng)絡(luò)由共享的全卷積結(jié)構(gòu),就像FCN一樣[15]。為了把平移變換特性融合進(jìn)FCN中,我們創(chuàng)建了一個(gè)位敏得分地圖(position-sensitive score maps)來編碼位置信息,從而表征相關(guān)的空間位置。在FCN的頂層,我們附加了一個(gè)position-sensitive ROI pooling layer 來統(tǒng)領(lǐng)這些得分地圖(score maps)的信息,這些得分地圖不帶任何權(quán)重層。整個(gè)結(jié)構(gòu)是端對(duì)端(end-to-end)的學(xué)習(xí)。所有可學(xué)習(xí)的層在整幅圖片中都是可卷積的并且可共享的,并且可以編碼用于物體檢測的空間信息。圖 1說明了這個(gè)關(guān)鍵的思路(key idea),圖 2比較了區(qū)域檢測的各種算法。
使用101層的Residual Net作為骨架,我們的R-FCN在PASCAL VOC 2007測試集上達(dá)到了83.6%的mAP,在2012測試集上達(dá)到了82.0%的mAP。同時(shí),我們的結(jié)果實(shí)現(xiàn)了170ms/每張圖片的速度,比Faster R-CNN+ResNet-101 [9] 快了2.5~20倍。這個(gè)實(shí)驗(yàn)結(jié)果說明了我們的方法成功的解決了基于全卷積網(wǎng)絡(luò)的圖像級(jí)別的分類問題中的平移不變性和平移變換性之間的矛盾,就像ResNet能夠被有效的轉(zhuǎn)換成全卷積物體檢測器(fully convolutional object detectors.)一樣。詳細(xì)的代碼參見:https://github.com/daijifeng001/r-fcn
方法
Overview(概覽)
對(duì)于下面的R-CNN,我們采用了兩種流行的策略:region proposal和region classification.我們通過region proposal Network(RPN)來抽取候選區(qū)域,它自身是一個(gè)全卷積結(jié)構(gòu)。接下來,我們在RPN和R-FCN中共享這些特性。圖 3展示了整個(gè)系統(tǒng)的結(jié)構(gòu)。
圖三
考慮到proposal region, R-FCN結(jié)構(gòu)用來將ROI分類為物體和背景。在R-FCN中,所有可學(xué)習(xí)的權(quán)重層都是可卷積的并且是在整幅圖片中進(jìn)行計(jì)算。最后一個(gè)卷積層產(chǎn)生一堆K2個(gè)position-sensitive score maps 針對(duì)于每一個(gè)物體類別。因此有k2(C+1)個(gè)通道輸出層(C個(gè)物體目錄項(xiàng)+1個(gè)背景)。這K2個(gè)得分地圖由K×k個(gè)空間網(wǎng)格來描述相對(duì)位置。例如,對(duì)于K×k = 3×3,這9個(gè)得分地圖將物體類別編碼為9個(gè)例子。
R-FCN以position-sensitive ROI pooling layer作為結(jié)束層。他將最后一個(gè)卷積層的輸出結(jié)果聚集起來,然后產(chǎn)生每一個(gè)ROI的得分記錄。我們的position-sensitive RoI層產(chǎn)生的是selective pooling,并且k×k的每個(gè)條目僅僅聚集來自于k×k得分地圖堆里面的一個(gè)得分地圖。通過端對(duì)端的訓(xùn)練,ROI 層帶領(lǐng)最后一層卷積層去學(xué)習(xí)特征化的position-sensitive score maps。圖 1說明了這個(gè)過程。圖 4、圖 5是兩個(gè)可視化的例子。本算法的具體細(xì)節(jié)介紹參見后面的條目。
圖四
圖五
Backbone architecture(主干架構(gòu))
R-FCN算法是基于ResNet-101[9]的,雖然其他的深度學(xué)習(xí)網(wǎng)絡(luò)可以應(yīng)用。RstNet-101有100個(gè)帶global average pooling的卷積層,有一個(gè)1000級(jí)的fc層(fully-connected)。我們?nèi)サ袅薵lobal average pooling和fc layer,然后只使用卷積層來計(jì)算feature maps。We use the ResNet-101 released by the authors of [9], pre-trained on ImageNet [20]。在ResNet-101中,最后一個(gè)卷積塊是2048-d(2048維度)我們附加了一個(gè)隨機(jī)初始化的1024d的1×1的卷積層來降低維度(更精確的,我們增加了卷積層的深度),然后我們使用了k2(C+1)個(gè)通道的卷積層來產(chǎn)生得分地圖,下面會(huì)有具體的介紹。
Position-sensitive socre maps & position-sentitive RoI pooling
為了在每個(gè)RoI中編碼位置信息,我們通過一個(gè)網(wǎng)格把每個(gè)RoI分成k×k個(gè)bins。對(duì)于w×h的RoI區(qū)域,每一個(gè)bin的大小≈w/k×h/k。在我們的方法中,最后一個(gè)卷積層有k2個(gè)得分地圖組成。對(duì)于第i行第j列的bin(0≤i , j≤k-1), 其得分地圖的計(jì)算公式為:
在本篇論文中我們通過平均得分來對(duì)ROI區(qū)域進(jìn)行投票,從而產(chǎn)生(C+1)維的向量。然后我們計(jì)算了每一個(gè)目錄項(xiàng)的softmax響應(yīng):
在訓(xùn)練和評(píng)級(jí)的時(shí)候,他們被用來估計(jì)交叉熵?fù)p失(cross-entropy loss)。
進(jìn)一步的,我們用相似的方法定位了邊界框回歸(bounding box regression)。在k2(C+1)個(gè)卷積層,我們附加了一個(gè)4k2個(gè)卷積層用于邊界框回歸。Position-sensitive RoI pooling 在4k2的map中表現(xiàn)出來,對(duì)于每一個(gè)RoI,產(chǎn)生一個(gè)4k2位的向量,然后被聚合為一個(gè)4維向量通過平均投票。這個(gè)4維用 t = (t_x, t_y, t_w, t_h) 參數(shù)化一個(gè)邊框。
Position-sensitive score maps 有一部分的靈感來自于實(shí)例級(jí)的語義分割FCNs。進(jìn)一步的,我們引入了position-sensitive RoI pooling layer 來統(tǒng)領(lǐng)物體檢測得分地圖的學(xué)習(xí)。在ROI層之后,沒有可學(xué)習(xí)的層,從而來加快訓(xùn)練和測試(training and inference)。
Training(訓(xùn)練)
在預(yù)先計(jì)算了region proposals,端對(duì)端地訓(xùn)練R-FCN結(jié)構(gòu)是非常簡單的。接下來,我們的損失函數(shù)(loss fuction)的定義由兩部分組成:交叉熵?fù)p失(cross-entropy loss)和邊界回歸損失(box regression loss):
上式中,C是RoI的真實(shí)標(biāo)簽(C?= 0表示的是背景)。
是用于分類的交叉熵?fù)p失函數(shù)(cross-entropy loss)
L_reg 是邊界回歸損失函數(shù)(bounding box regression loss)
t* 表示真實(shí)邊框。
λ 被初始化設(shè)置為1。
當(dāng)RoI與實(shí)際邊框的重疊部分至少有0.5,那么我們認(rèn)為是positive examples,否則是negative example。
在訓(xùn)練時(shí),我們的方法采用OHEM(online hard example mining)是非常容易的。每個(gè)RoI區(qū)域的計(jì)算是可忽略的,從而使得樣例挖掘(example mining)近乎是cost-free的。假定每張圖片有N個(gè)proposals,一個(gè)直接的方法是,我們計(jì)算所有N個(gè)proposals的損失。然后我們對(duì)所有ROI按照損失進(jìn)行排序。然后挑選B個(gè)具有最高損失的ROI。Backpropagation(反向傳播算法)是基于選擇的樣例來演算的。因?yàn)槲覀兊拿總€(gè)ROI的計(jì)算都是近似可以忽略的,所以forward time基本上不會(huì)受N的影響。而OHEM Fast R-CNN可能是會(huì)花費(fèi)雙倍的時(shí)間。在下表中,我們提供了一個(gè)詳細(xì)的時(shí)間數(shù)據(jù)。
我們使用了0.0005的權(quán)重衰減系數(shù)和0.9的動(dòng)量。缺省情況下,我們使用單尺度(single-scale)的訓(xùn)練:圖片被統(tǒng)一調(diào)整為600個(gè)像素的大小。每個(gè)GPU處理1張圖片,選取B=128ROI來用于反向傳播。我們使用了8個(gè)GPU來訓(xùn)練模型(所以有效的小批量(mini-batch)大小是8×)。對(duì)于20k個(gè)mini-batches我們使用了0.001的學(xué)習(xí)速率;而對(duì)于10k個(gè)mini-batches,我們使用了0.0001的學(xué)習(xí)速率。為了讓R-FCN擁有帶RPN的特征,我們采用了4步交替訓(xùn)練,在RPN和R-FCN中交替訓(xùn)練。
Inference(推論)
特征地圖(feature maps)在RPN和R-FCN中共享計(jì)算。然后RPN部分選擇出了ROI,而R-FCN部分評(píng)估了catagogy-wise scores和regresses bounding boxes。在推論階段,我們計(jì)算了300個(gè)ROI區(qū)域。結(jié)果通過non-maximum suppression(NMS)來進(jìn)行后處理,使用了0.3IoU的閾值,作為standard practice。
A trous and stride
我們的全卷積網(wǎng)絡(luò)架構(gòu)是在FCN的基礎(chǔ)上進(jìn)行修改的。特別的,我們將ResNet-101的stride從32像素減少到16像素,從而增加了得分地圖數(shù)量。All layers before and on the conv4 stage [9] (stride=16) are unchanged; the stride=2 operations in the first conv5 block is modified to have stride=1, and all convolutional filters on the conv5 stage are modified by the “hole algorithm” [15, 2] (“Algorithme à trous” [16]) to compensate for the reduced stride. For fair comparisons, the RPN is computed on top of the conv4 stage (that are shared withR-FCN), as is the case in [9] with Faster R-CNN, so the RPN is not affected by the à trous trick. The following table shows the ablation results of R-FCN (k _ k = 7 _ 7, no hard example mining). The à trous trick improves mAP by 2.6 points.
Visualization(可視化)
在圖 4和圖 5我們展示了通過R-FCN學(xué)習(xí)到的position-sensitive score maps。不同的特征地圖標(biāo)志了不同的特征相對(duì)位置信息。例如:“top-center-sensitive”score map對(duì)于那些top-center位置關(guān)系的物體顯示了較高的分?jǐn)?shù)。如果一個(gè)候選框與真實(shí)物體精確的重合了(圖 4),那么大多數(shù)的k2個(gè)bins會(huì)被強(qiáng)烈的激活,然后會(huì)得到較高的分?jǐn)?shù)。相反的,如果候選邊框與真實(shí)物體并沒有完全準(zhǔn)確的重合(圖 5)那么有一些k2bins不會(huì)被激活,從而導(dǎo)致得分很低。
相關(guān)工作
R-CNN已經(jīng)說明了帶深度網(wǎng)絡(luò)的區(qū)域候選的有效性。R-CNN計(jì)算那些關(guān)于裁剪不正常的覆蓋區(qū)域的卷積網(wǎng)絡(luò),并且計(jì)算在區(qū)域直接是不共享的。SPPnet,Fast R-CNN和Faster R-CNN是半卷積的(semi-convolutional),在卷積子網(wǎng)絡(luò)中是計(jì)算共享的,在另一個(gè)子網(wǎng)絡(luò)是各自計(jì)算獨(dú)立的區(qū)域。
物體檢測器可以被認(rèn)為是全卷積模型。OverFeat [21] detects objects by sliding multi-scale windows on the shared convolutional feature maps。在某些情況下,可以將單精度的滑動(dòng)窗口改造成一個(gè)單層的卷積層。在Faster R-CNN中的RPN組件是一個(gè)全卷積檢測器,用來預(yù)測是一個(gè)關(guān)于多尺寸的參考邊框的實(shí)際邊框。原始的RPN是class-agnostic(class無關(guān)的)。但是對(duì)應(yīng)的clss-specific是可應(yīng)用的。
另一個(gè)用于物體檢測的是fc layer(fully-connected)用來基于整幅圖片的完整物體檢測。
實(shí)驗(yàn)
總結(jié)與展望
我們提出的Region-based Fully Convolutional Networks是一個(gè)簡單、精確、有效的用于物體檢測的框架。我們的系統(tǒng)很自然的采用了state-of –the –art 圖片分類骨架,就像基于全卷積的ResNets一樣。我們的方法比Faster R-CNN更精確,并且在訓(xùn)練和預(yù)測上都比它要快。
我們特意使本篇論文中給出的R-FCN看起來簡單。其實(shí)仍然存在一系列的FCNS的正交擴(kuò)展用來進(jìn)行語義分割,還有一些基于區(qū)域方法的擴(kuò)展用來進(jìn)行物體檢測。很高興我們的系統(tǒng)能夠享受到這些成果。
Reference
總結(jié)
以上是生活随笔為你收集整理的论文翻译 基于R-FCN的物体检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文理解 R-FCN:基于区域的全卷积网
- 下一篇: SSD: Signle Shot Det