DetectoRS: Detecting Objects with Recursive Feature Pyramid and Switchable Atrous Convolution论文学习
Abstract
很多的目標檢測器通過 looking and thinking twice 的方式實現了驚人的表現。本文作者針對目標檢測主干網絡的設計,研究了該機制。在宏觀層面,作者提出了遞歸特征金字塔,將來自FPN的額外的反饋連接加入到自下而上的主干層。在微觀層面,作者提出了可切換的空洞卷積(SAC),它以不同的空洞率(rate)對特征進行卷積,并使用switch函數合并卷積后的結果。這樣就得到了DetectoRS,極大地提升了目標檢測性能。在COCO 測試驗證集上,DetectoRS 取得了SOTA的成績,目標檢測項為54.7%54.7\%54.7%的邊框AP,實例分割項為47.1%47.1\%47.1%的mask AP,全景分割項為49.6%49.6\%49.6%的PQ。代碼位于:https://github.com/joe-siyuan-qiao/DetectoRS。
1. Introduction
要想找到目標物體,人類的視覺感知會通過反饋連接來傳入高層及的語義信息,選擇性地增強或抑制神經元活動。受此啟發,計算機視覺領域實踐了 looking and thinking twice 的思想,取得了優異的表現。許多流行的雙階段檢測器,如Faster R-CNN,首先基于區域特征,輸出候選目標框。Cascade R-CNN 設計了一個多階段的檢測器,它使用更優質的樣本來訓練后面的檢測器heads。該設計思想非常成功,促使我們去研究目標檢測的主干網絡如何設計。作者在宏觀和微觀兩個層面實現了該機制,就是 DetectoRS,它極大地提升了SOTA目標檢測器 HTC 的性能,推理速度沒降,如表1所示。
在宏觀層面,遞歸特征金字塔(RFP)構建于FPN之上,將FPN層中的額外反饋連接加入到自下而上的主干層中,如圖1(a)所示。將遞歸結構拆開為一組順序實現,我們得到了一個目標檢測器的主干網絡,它會關注圖片至少兩次。與Cascade R-CNN 中的級聯檢測器的heads類似,RFP遞歸地增強FPN,產生的特征表示越來越強。與Deeply-Supervised Nets相似,反饋連接可以將從檢測器heads傳來的梯度,傳回自下而上的低層級主干網絡中,加速訓練并提升性能。RFP實現了looking and thinking twice的順序設計,自下而上的主干網絡和FPN可以多次運行,輸出的特征取決于之前步驟的輸出。
在微觀層面,作者提出了可切換的空洞卷積(SAC),用不同的空洞率來對相同的輸入特征做卷積,使用switch函數來結合結果。圖1b 展示了 SAC 的概念。Switch函數在空間上互相依賴,即特征圖的每個位置有著不同的switches來控制SAC的輸出。在檢測器中,作者將自下而上的主干網絡中所有3×33\times 33×3標準卷積層替換為SAC,顯著地提升了檢測器性能。[39,74]也采用了條件卷積,將不同的卷積結果結合為一個輸出。與這些方法不同,這些架構需要從頭開始訓練,而SAC提供了一個機制,可以很容易地轉化預訓練的標準卷積網絡(如ImageNet-預訓練權重)。而且SAC中使用了一個新的權重閉鎖機制,除了一個可訓練的差異之外,不同空洞卷積的權重是一樣的。
將RFP和SAC的結合起來,就有了DetectoRS。為了證明其有效性,作者將DetectoRS加入到SOTA的HTC中,在COCO數據集上做實驗。在COCO測試驗證集上,作者報告了目標檢測的邊框AP、實例分割的mask AP,和全景分割的PQ。用ResNet-50作為主干網絡的DetectoRS將HTC的邊框AP提升了7.7%7.7\%7.7%,mask AP提升了5.9%5.9\%5.9%。此外,將DetectoRS結合到ResNeXt-101-32x4d中,取得了54.7%54.7\%54.7%的邊框AP和47.1%47.1\%47.1%的mask AP。DetectoRS 搭配 DeepLabV3+和Wide-ResNet-41作為主干網絡,在全景分割任務上取得了49.6%49.6\%49.6%的PQ,是一個新的記錄。
2. Related Works
目標檢測。目標檢測方法主要有2類:單階段方法和多階段方法。多階段檢測器通常更加靈活、準確,但是比起單階段方法來說更加復雜。本文作者用多階段的HTC作為基線模型。
多層級特征。遞歸特征金字塔基于FPN而來,FPN 利用多尺度特征來進行有效的目標檢測。之前,許多目標檢測器直接使用主干網絡的多尺度特征,而FPN加入了自上而下的path,將不同尺度的特征按照順序進行結合。PANet 在FPN之上,增加了另一個自下而上的path。STDL通過尺度轉換模塊來利用跨尺度的特征。G-FRNet 通過gating units增加反饋信息。NAS-FPN和Auto-FPN使用神經結構搜索找到最佳的FPN結構。EfficientDet提出復用一個簡單的BiFPN層。與它們不同,本文的遞歸特征金字塔重復連入自下而上的主干網絡,增強FPN特征表示的能力。此外,作者在FPN中加入了空洞空間金字塔池化(ASPP),增強特征,與Seamless 的 mini-DeepLab設計相似。
遞歸卷積網絡。人們提出了許多遞歸方法,解決不同類型的計算機視覺問題。最近有一個遞歸方法CBNet用于目標檢測,將多個主干網絡級聯起來,它輸出的特征作為FPN的輸入。相反,本文的RFP通過ASPP加持的FPN來執行遞歸計算。
條件卷積。條件卷積網絡采用動態卷積核、寬度或深度。與它們不同,本文的可切換空洞卷積(SAC)不會改變預訓練模型,將標準卷積轉換為條件卷積。SAC因此對于許多預訓練主干網絡來說,可以即插即用。而且,SAC使用全局上下文信息,以及一個創新的權重閉鎖機制,來讓它更加有效。
3. 遞歸特征金字塔
3.1 特征金字塔網絡
這一部分將介紹下特征金字塔網絡。BiB_iBi?表示自下而上主干網絡的第iii個階段,FiF_iFi?表示第iii個自上而下FPN操作。搭配FPN的主干網絡輸出一組特征圖{fi∣i=1,...,S}\{f_i | i=1,...,S\}{fi?∣i=1,...,S},其中SSS是階段的個數。例如圖2a中,S=3S=3S=3。?i=1,...,S\forall i=1,...,S?i=1,...,S,輸出特征fif_ifi?定義為:
fi=Fi(fi+1,xi),xi=Bi(xi?1)f_i = F_i (f_{i+1}, x_i), x_i = B_i(x_{i-1})fi?=Fi?(fi+1?,xi?),xi?=Bi?(xi?1?)
其中x0x_0x0?是輸入圖像,fS+1=0f_{S+1}=0fS+1?=0。目標檢測器構建于FPN之上,使用fif_ifi?用于檢測計算。
3.2 遞歸特征金字塔
RFP往FPN中增加了反饋連接,如圖2b所示。在將它們連接回自下而上的主干網絡前,我們用RiR_iRi?表示特征變換,在將它們連接到自下而上的主干網絡之前。然后,對于?i=1,...,S\forall i=1,...,S?i=1,...,S,輸出特征fif_ifi?的定義為:
fi=Fi(fi+1,xi),xi=Bi(xi?1,Ri(fi))f_i = F_i (f_{i+1}, x_i), x_i = B_i(x_{i-1}, R_i(f_i))fi?=Fi?(fi+1?,xi?),xi?=Bi?(xi?1?,Ri?(fi?))
這樣RFP就是遞歸操作了。我們將它拆開為一個網絡序列,即 ?i=1,...,S,t=1,...,T\forall i=1,...,S, t=1,...,T?i=1,...,S,t=1,...,T:
fit=Fit(fi+1t,xit),xit=Bit(xi?1t,Rit(fit?1))f_i^t = F_i^t(f_{i+1}^t, x_i^t), x_i^t = B_i^t(x_{i-1}^t, R_i^t (f_i^{t-1}))fit?=Fit?(fi+1t?,xit?),xit?=Bit?(xi?1t?,Rit?(fit?1?))
其中TTT為拆開的次數,我們用上標ttt來表示第ttt步的運算與特征。fi0f_i^0fi0?被設為0。在實現中,FitF_i^tFit?和RitR_i^tRit?在不同的步驟中共享。在第5部分的實驗研究中,作者列出了共享的和不同的BitB_i^tBit?,以及不同TTT的表現。在實驗中,作者使用了不同的BitB_i^tBit?,設T=2T=2T=2。
作者改進了ResNet主干網絡BBB,將xxx和R(f)R(f)R(f)作為輸入。ResNet有4個階段,每個都由多個相似的模塊構成。作者只改變了每個階段的第一個模塊,如圖3所示。該模塊計算一個3層的特征,將它加到shortcut計算出的特征上。為了使用特征R(f)R(f)R(f),作者增加了另一個卷積層,卷積核大小是1。該層的權重初始化為0,確保加載預訓練權重時,它不會有任何的影響。
作者使用空洞空間金字塔池化(ASPP)來實現連接模塊RRR,它將特征fitf_i^tfit?作為輸入,將之變換為RFP特征,如圖3所示。在該模塊中,有4個平行的分支,將fitf_i^tfit?作為輸入,輸出然后沿著通道維度進行concat,得到最終的輸出RRR。它們中的三條分支使用一個卷積層和一個ReLU層,輸出通道數是輸入通道數的1/41/41/4。最后一個分支使用全局平均池化層來壓縮特征,后面跟著一個1×11\times 11×1卷積層和一個ReLU層,將壓縮后的特征變換為1/41/41/4大小(通道維度)的特征。最后,我們將這些特征重新縮放,與其它三個分支的特征進行concat。這三個分支里的卷積層的配置如下:卷積核大小為[1,3,3][1,3,3][1,3,3],空洞率為[1,3,6][1,3,6][1,3,6],padding為[0,3,6][0,3,6][0,3,6]。與原始的ASPP不同,作者并沒有在concat特征之后跟著一個卷積層,因為RRR沒有輸出最終的結果。注意,這四個分支中的每一個所輸出的特征,其維度都是輸入特征的1/41/41/4,將它們concat之后就會得到一個與輸入特征RRR一樣大小的特征。在第5部分,作者證明了有和沒有ASPP模塊時RFP的性能。
3.4 Output updated by the fusion module
如圖2c所示,RFP額外地使用了融合模塊,將fitf_i^tfit?和fit+1f_i^{t+1}fit+1?結合起來,更新上面等式中第t+1t+1t+1個階段的fif_ifi?值。該融合模塊與遞歸神經網絡中的更新過程非常相似,如果我們將fitf_i^tfit?看作為一個數據序列。在第2到第TTT步驟中,使用了融合模塊。在第t+1t+1t+1(t=1,...,T?1t=1,...,T-1t=1,...,T?1)的步驟中,融合模塊將第ttt步的特征fitf_i^tfit?與FPN在第t+1t+1t+1步中最新計算出的特征fit+1f_i^{t+1}fit+1?作為輸入。該融合模塊使用特征fit+1f_i^{t+1}fit+1?來計算注意力圖,通過一個卷積層和一個sigmoid操作。該注意力圖用于計算fitf_i^tfit?和fit+1f_i^{t+1}fit+1?的加權和,來更新fif_ifi?。這個fif_ifi?將作為fit+1f_i^{t+1}fit+1?,在后續的步驟中使用。
4. 可切換的空洞卷積
4.1 空洞卷積
空洞卷積是增大卷積層濾波器感受野的有效方式。特別地,空洞率rrr的空洞卷積在兩個連續的濾波器值之間引入r?1r-1r?1個0,相當于將卷積核大小由k×kk\times kk×k增大到ke=k+(k?1)(r?1)k_e = k + (k-1)(r-1)ke?=k+(k?1)(r?1),而不會增加參數的個數或計算量。圖1b為3×33\times 33×3卷積層和空洞率為1(紅色)與2(綠色)的一個例子:不同尺度的同類物體可以通過相同的卷積權重和不同的空洞率來檢測。
4.2 可切換的空洞卷積
作者介紹了SAC的細節。圖4展示了SAC的整體結構,它主要有3個組成:2個全局上下文模塊分別加在SAC組建的前面和后面。這部分關注在SAC中間的主要構成上,隨后作者會介紹全局上下文模塊。
作者用y=Conv(x,w,r)y=\text{Conv}(x,w,r)y=Conv(x,w,r)來表示卷積操作,權重為www,空洞率為rrr,輸入是xxx,輸出是yyy。然后,將卷積層轉化為一個SAC:
Conv(x,w,1)→to?SACConvertS(x)?Conv(x,w,1)+(1?S(x))?Conv(x,w+Δw,r)\text{Conv}(x,w,1) \xrightarrow[\text{to SAC}]{\text{Convert}} S(x)\cdot \text{Conv} (x, w, 1) + (1-S(x))\cdot \text{Conv}(x,w + \Delta w,r)Conv(x,w,1)Convertto?SAC?S(x)?Conv(x,w,1)+(1?S(x))?Conv(x,w+Δw,r)
其中rrr是SAC的超參數,Δw\Delta wΔw是可訓練的權重,switch函數S(?)S(\cdot)S(?)用一個5×55\times 55×5的核的平均池化層,后面跟著一個1×11\times 11×1的卷積層,如圖4所示。該swtich函數依賴于輸入和位置;因此,主干網絡模型能夠適應不同的尺度。實驗中作者設r=3r=3r=3。
作者提出了一個閉鎖機制,設一個權重為www,其它的為w+Δww+\Delta ww+Δw。目標檢測器通常用預訓練權重來初始化網絡。但是,對于一個由標準卷積轉化而來的SAC層,沒有較大空洞率的權重。由于不同尺度的物體大概都可以用相同的權重,而空洞率不同來檢測到,很自然地我們就可以用預訓練模型的權重來初始化這些缺失的權重。本文實現將w+Δww+\Delta ww+Δw用作為這些缺失的權重,其中www來自于預訓練權重,而Δw\Delta wΔw初始化為0。當Δw=0\Delta w=0Δw=0時,發現AP降低了0.1%0.1\%0.1%。但是不用閉鎖機制的話,AP會下降許多。
4.3 全局上下文
如圖4所示,作者在SAC前后共插入了2個全局上下文模塊。這2個模塊都很輕量級,輸入特征首先通過一個全局平均池化層壓縮。全局上下文模塊與SENet類似,除了2個不同之處:(1) 我們只有一個卷積層,沒有非線性層;(2) 輸出被加到主干之后,而不是通過sigmoid計算出的值來乘到輸入上。作者發現將全局上下文信息加到SAC之前(即將全局信息加到switch函數里),對檢測效果有正面的作用。作者猜測,這是因為SSS在有全局信息的時候,所做出的預測更加穩定。然后,作者將全局信息移除switch函數,將它放在主干部分的前面和后面,這樣ConvConvConv和SSS都會受益。作者沒有采用原始的SENet方式,因為沒有發現它對最終的AP有何影響。
4.4 實現細節
在實現中,作者使用了變形卷積來代替等式4中的卷積操作。它們的offset函數沒有共享。第5部分會講述SAC有和沒有變形卷積時的性能比較。作者在ResNet和其變體上采用SAC,在主干網絡中將所有的3×33\times 33×3卷積替換。全局上下文模塊的權重和偏置都被初始化為0。swtich SSS中的權重初始化為0,偏置初始化為1。Δw\Delta wΔw初始化為0。上述初始化策略確保了,當我們加載從ImageNet上訓練得到的預訓練模型時,將所有3×33\times 33×3卷積轉化為SAC不會改變輸出。
4. Experiments
Pls read paper for more details.
總結
以上是生活随笔為你收集整理的DetectoRS: Detecting Objects with Recursive Feature Pyramid and Switchable Atrous Convolution论文学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 连接nc的远控
- 下一篇: dSPACE学习笔记1