論文翻譯 基於R-FCN的物體檢測
本文轉載自:
http://www.jianshu.com/p/db1b74770e52
題目:基於R-FCN的物體檢測
摘要
我們使用R-FCN(region-based, fully convolutional networks)進行精確和有效的物體檢測。對比之前的區域檢測(Fast/Faster R-CNN [6 , 18] 應用於每一個區域子網格要花費數百次),我們的區域檢測是基於整幅圖片的全卷積計算。為了達到這個目標,我們使用了一個“位敏得分地圖”(position-sensitive score maps)來權衡在影象分類中的平移不變性和在物體檢測中的平移變換性這樣一種兩難境地。我們的方法採用了全卷積圖片分類主幹部分,例如用於物體檢測的最新的殘差網路(Residual
Networks) (ResNets)[9]。在PASCAL VOC(e.g.,83.6% mAP on the 2007 set) 資料集的實驗上,我們使用了101層ResNet達到了很好的效果。同時,我們僅僅使用了170ms/每張圖片,比Faster R-CNN匹配快了2.5~20倍左右。公開的程式碼可以在此網站中訪問到:
簡介
比較流行的關於物體檢測的深度網路可以通過ROI pooling layer分成兩個子網路:
(1)a shared, “fully convolutional” subnetwork independent of RoIs.(獨立於ROI的共享的、全卷積的子網路)
(2)an RoI-wise subnetwork that does not share computation.(不共享計算的ROI-wise子網)
這種分解來源於較早之前的分類框架,例如:AlexNet[10]和VGGNets[23],他們由兩個子網組成,一個是以spatial pooling layer結束的卷積子網,一個是若干個fully-connected layers。因此,spatial pooling layrer很自然的在本實驗中被轉變成了ROI pooling layer。
但是最近的關於藝術圖片分類的網路,例如殘差網路(ResNets)和GoogleNets都是用fully convolutional設計的。通過分析,使用所有的卷積層去構建一個進行物體檢測的共享的卷積網路是一件十分自然的事,而不把ROI-wise 子網作為隱藏層(hidden layer)。然而,通過實證調查,這個天真的想法需要考慮到inferior detection accuracy(極差的檢測精度)與網路的superior classification accuracy(較高的分類精度)不匹配的問題。為了解決這個問題,在殘差網路(ResNet)[9]中, ROI pooling layer of the Faster R-CNN detector 插入了兩組卷積層,他們創造了一個更深的ROI-wise子網來提高準確度,由於每個ROI的計算不共享,因此速度會比原來的要慢。
上述設計主要是為了解決圖片分類的平移不變性與物體檢測之間的平移變換性之間的矛盾。一方面,影象級別的分類任務側重於平移不變性(在一幅圖片中平移一個物體而不改變它的判別結果),因此深度全卷積網路結構很適合處理這類圖片分類的問題。
圖一
圖二
另一方面,物體檢測任務需要定義物體的具體位置,因此需要平移變換特性。為了解決這矛盾,在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)。然而,這個設計犧牲了訓練和測試的效率,因為它引入了大量的region-wise layers。
在本篇文獻中,我們開發出了一個稱之為R-FCN(Region-based Fully Convolutional Network)的框架來用於物體檢測。我們的網路由共享的全卷積結構,就像FCN一樣[15]。為了把平移變換特性融合進FCN中,我們建立了一個位敏得分地圖(position-sensitive score maps)來編碼位置資訊,從而表徵相關的空間位置。在FCN的頂層,我們附加了一個position-sensitive ROI pooling layer 來統領這些得分地圖(score maps)的資訊,這些得分地圖不帶任何權重層。整個結構是端對端(end-to-end)的學習。所有可學習的層在整幅圖片中都是可卷積的並且可共享的,並且可以編碼用於物體檢測的空間資訊。圖 1說明了這個關鍵的思路(key idea),圖 2比較了區域檢測的各種演算法。
使用101層的Residual Net作為骨架,我們的R-FCN在PASCAL VOC 2007測試集上達到了83.6%的mAP,在2012測試集上達到了82.0%的mAP。同時,我們的結果實現了170ms/每張圖片的速度,比Faster R-CNN+ResNet-101 [9] 快了2.5~20倍。這個實驗結果說明了我們的方法成功的解決了基於全卷積網路的影象級別的分類問題中的平移不變性和平移變換性之間的矛盾,就像ResNet能夠被有效的轉換成全卷積物體檢測器(fully convolutional object detectors.)一樣。詳細的程式碼參見:https://github.com/daijifeng001/r-fcn
方法
Overview(概覽)
對於下面的R-CNN,我們採用了兩種流行的策略:region proposal和region classification.我們通過region proposal Network(RPN)來抽取候選區域,它自身是一個全卷積結構。接下來,我們在RPN和R-FCN中共享這些特性。圖 3展示了整個系統的結構。
圖三
考慮到proposal region, R-FCN結構用來將ROI分類為物體和背景。在R-FCN中,所有可學習的權重層都是可卷積的並且是在整幅圖片中進行計算。最後一個卷積層產生一堆K2個position-sensitive score maps 針對於每一個物體類別。因此有k2(C+1)個通道輸出層(C個物體目錄項+1個背景)。這K2個得分地圖由K×k個空間網格來描述相對位置。例如,對於K×k = 3×3,這9個得分地圖將物體類別編碼為9個例子。
R-FCN以position-sensitive ROI pooling layer作為結束層。他將最後一個卷積層的輸出結果聚集起來,然後產生每一個ROI的得分記錄。我們的position-sensitive RoI層產生的是selective pooling,並且k×k的每個條目僅僅聚集來自於k×k得分地圖堆裡面的一個得分地圖。通過端對端的訓練,ROI 層帶領最後一層卷積層去學習特徵化的position-sensitive score maps。圖 1說明了這個過程。圖 4、圖 5是兩個視覺化的例子。本演算法的具體細節介紹參見後面的條目。
圖四
圖五
Backbone architecture(主幹架構)
R-FCN演算法是基於ResNet-101[9]的,雖然其他的深度學習網路可以應用。RstNet-101有100個帶global average pooling的卷積層,有一個1000級的fc層(fully-connected)。我們去掉了global average pooling和fc layer,然後只使用卷積層來計算feature maps。We use the ResNet-101 released by the authors of [9], pre-trained on ImageNet [20]。在ResNet-101中,最後一個卷積塊是2048-d(2048維度)我們附加了一個隨機初始化的1024d的1×1的卷積層來降低維度(更精確的,我們增加了卷積層的深度),然後我們使用了k2(C+1)個通道的卷積層來產生得分地圖,下面會有具體的介紹。
Position-sensitive socre maps & position-sentitive RoI pooling
為了在每個RoI中編碼位置資訊,我們通過一個網格把每個RoI分成k×k個bins。對於w×h的RoI區域,每一個bin的大小≈w/k×h/k。在我們的方法中,最後一個卷積層有k2個得分地圖組成。對於第i行第j列的bin(0≤i , j≤k-1), 其得分地圖的計算公式為:
在本篇論文中我們通過平均得分來對ROI區域進行投票,從而產生(C+1)維的向量。然後我們計算了每一個目錄項的softmax響應:
在訓練和評級的時候,他們被用來估計交叉熵損失(cross-entropy loss)。
進一步的,我們用相似的方法定位了邊界框迴歸(bounding box regression)。在k2(C+1)個卷積層,我們附加了一個4k2個卷積層用於邊界框迴歸。Position-sensitive RoI pooling 在4k2的map中表現出來,對於每一個RoI,產生一個4k2位的向量,然後被聚合為一個4維向量通過平均投票。這個4維用 t = (t_x, t_y, t_w, t_h) 引數化一個邊框。
Position-sensitive score maps 有一部分的靈感來自於例項級的語義分割FCNs。進一步的,我們引入了position-sensitive RoI pooling layer 來統領物體檢測得分地圖的學習。在ROI層之後,沒有可學習的層,從而來加快訓練和測試(training and inference)。
Training(訓練)
在預先計算了region proposals,端對端地訓練R-FCN結構是非常簡單的。接下來,我們的損失函式(loss fuction)的定義由兩部分組成:交叉熵損失(cross-entropy loss)和邊界迴歸損失(box regression loss):
上式中,C是RoI的真實標籤(C = 0表示的是背景)。
是用於分類的交叉熵損失函式(cross-entropy loss)
L_reg 是邊界迴歸損失函式(bounding box regression loss)
t* 表示真實邊框。
λ 被初始化設定為1。
當RoI與實際邊框的重疊部分至少有0.5,那麼我們認為是positive examples,否則是negative example。
在訓練時,我們的方法採用OHEM(online hard example mining)是非常容易的。每個RoI區域的計算是可忽略的,從而使得樣例挖掘(example mining)近乎是cost-free的。假定每張圖片有N個proposals,一個直接的方法是,我們計算所有N個proposals的損失。然後我們對所有ROI按照損失進行排序。然後挑選B個具有最高損失的ROI。Backpropagation(反向傳播演算法)是基於選擇的樣例來演算的。因為我們的每個ROI的計算都是近似可以忽略的,所以forward time基本上不會受N的影響。而OHEM Fast R-CNN可能是會花費雙倍的時間。在下表中,我們提供了一個詳細的時間資料。
我們使用了0.0005的權重衰減係數和0.9的動量。預設情況下,我們使用單尺度(single-scale)的訓練:圖片被統一調整為600個畫素的大小。每個GPU處理1張圖片,選取B=128ROI來用於反向傳播。我們使用了8個GPU來訓練模型(所以有效的小批量(mini-batch)大小是8×)。對於20k個mini-batches我們使用了0.001的學習速率;而對於10k個mini-batches,我們使用了0.0001的學習速率。為了讓R-FCN擁有帶RPN的特徵,我們採用了4步交替訓練,在RPN和R-FCN中交替訓練。
Inference(推論)
特徵地圖(feature maps)在RPN和R-FCN中共享計算。然後RPN部分選擇出了ROI,而R-FCN部分評估了catagogy-wise scores和regresses bounding boxes。在推論階段,我們計算了300個ROI區域。結果通過non-maximum suppression(NMS)來進行後處理,使用了0.3IoU的閾值,作為standard practice。
A trous and stride
我們的全卷積網路架構是在FCN的基礎上進行修改的。特別的,我們將ResNet-101的stride從32畫素減少到16畫素,從而增加了得分地圖數量。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學習到的position-sensitive score maps。不同的特徵地圖標誌了不同的特徵相對位置資訊。例如:“top-center-sensitive”score map對於那些top-center位置關係的物體顯示了較高的分數。如果一個候選框與真實物體精確的重合了(圖 4),那麼大多數的k2個bins會被強烈的啟用,然後會得到較高的分數。相反的,如果候選邊框與真實物體並沒有完全準確的重合(圖 5)那麼有一些k2bins不會被啟用,從而導致得分很低。
相關工作
R-CNN已經說明了帶深度網路的區域候選的有效性。R-CNN計算那些關於裁剪不正常的覆蓋區域的卷積網路,並且計算在區域直接是不共享的。SPPnet,Fast R-CNN和Faster R-CNN是半卷積的(semi-convolutional),在卷積子網路中是計算共享的,在另一個子網路是各自計算獨立的區域。
物體檢測器可以被認為是全卷積模型。OverFeat [21] detects objects by sliding multi-scale windows on the shared convolutional feature maps。在某些情況下,可以將單精度的滑動視窗改造成一個單層的卷積層。在Faster R-CNN中的RPN元件是一個全卷積檢測器,用來預測是一個關於多尺寸的參考邊框的實際邊框。原始的RPN是class-agnostic(class無關的)。但是對應的clss-specific是可應用的。
另一個用於物體檢測的是fc layer(fully-connected)用來基於整幅圖片的完整物體檢測。
實驗
總結與展望
我們提出的Region-based Fully Convolutional Networks是一個簡單、精確、有效的用於物體檢測的框架。我們的系統很自然的採用了state-of –the –art 圖片分類骨架,就像基於全卷積的ResNets一樣。我們的方法比Faster R-CNN更精確,並且在訓練和預測上都比它要快。
我們特意使本篇論文中給出的R-FCN看起來簡單。其實仍然存在一系列的FCNS的正交擴充套件用來進行語義分割,還有一些基於區域方法的擴充套件用來進行物體檢測。很高興我們的系統能夠享受到這些成果。