DetectoRS: Detecting Objects with Recursive Feature Pyramid and Switchable Atrous Convolution 论文笔记
前言
本文分別從宏觀和微觀角度對目標檢測模型的backbone進行設計,進而提出DetectorRS,
-
在宏觀上,提出遞歸特征金字塔(Recursive Feature Pyramid,RFP),它是在FPN的基礎上建立的,通過將FPN中額外的反饋連接整合到自底向上的backbone中,以構成RFP,如下圖所示,圖中的黑色實線箭頭就是所提到的反饋連接。具體來說,這個反饋連接將detector head中直接接收梯度的特征(應該就是語義信息豐富的特征)帶回到backbone的較低層級的特征層中,從而能夠加速訓練并增強性能。
-
在微觀上,提出可轉換的空洞卷積(Switchable Atrous Convolution,SAC),它以不同的空洞率(atrous rates)對相同的輸入特征進行卷積,然后使用switch函數合并卷積后的結果,如下圖所示,switch函數在空間上是相關的,即特征圖上的每個位置可能需要不同的switch函數來控制SAC的輸出。
Recursive Feature Pyramid
RFP
設BiB_iBi?表示bottom-up的主干網絡中的第i個stage,FiF_iFi?表示top-down的第i個FPN操作,那么上圖(a)FPN的輸出就是:
如上圖(b)的高亮部分所示所示,RFP向FPN中加入了反饋連接。設RiR_iRi?表示將特征連接到bottom-up主干網絡之前的特征轉換(這個特征轉換應該就是圖c中的綠色圓點),那么RFP的輸出特征fif_ifi?就為:
可以看到RFP是一個遞歸的操作,把它展開為有序網絡為(圖c就是將RFP展開為一個2階的有序網絡):
展開為有序網絡之后,其實就是step-1中的FPN輸出的特征圖fi1f^1_ifi1?經過RiR_iRi?操作后,與bottom-up主干網絡連接起來,然后再經過step-2中的FPN得到特征圖fi2f^2_ifi2?,從圖c可以看到最終還要再經過一個融合操作(紅色圓點)得到最終的輸出特征圖。
為了讓ResNet能夠同時接收xxx(原始特征圖)和R(f)R(f)R(f)(反饋信息)作為輸入,還需要對ResNet做出改進。一般來說ResNet有四個階段,每個階段都由相似的殘差塊組成,這里僅對每個階段的第一個塊進行更改,如下圖所示。
ASPP
ASPP(Atrous Spatial Pyramid Pooling)用于實現RFP中的連接模塊RRR,它以FPN的輸出特征fitf^t_ifit?作為輸入,然后把它轉換成RFP特征。在這個模塊中,有四個并行的分支,它們都以fitf^t_ifit?作為輸入,最后每個分支的輸出沿著通道維度進行連結,以生成RRR的最終輸出。其中,
- 三個分支使用的是卷積層后跟一個ReLU層,輸出的通道數是輸入通道數的1/41/41/4;
- 最后一個分支使用全局平均池化層來壓縮特征,后跟1×11 \times 11×1和ReLU層以將經過壓縮的特征轉換為1/41/41/4大小(通道數)的特征。
每個分支產生的特征的通道數都是輸入特征的1/41/41/4,最終經過連結后產生的特征和輸入特征的大小是相同的。
Fusion Module
在RFP中最后還有一個融合模塊用于將fitf^t_ifit?和fit+1f^{t+1}_ifit+1?結合起來,以更新在t+1t+1t+1個展開階段時的特征fif_ifi?。如果將fitf^t_ifit?看作是數據的序列的話,那么這個融合模塊其實和RNN中的數據更新過程是十分相似的。在第t+1t+1t+1個展開階段,融合模塊以第ttt個階段的特征fitf^t_ifit?和第t+1t+1t+1個階段的特征fit+1f^{t+1}_ifit+1?作為輸入,并且利用fit+1f^{t+1}_ifit+1?來計算一個attention map,這個attention map用于計算fitf^t_ifit?和fit+1f^{t+1}_ifit+1?之間的一個權重和。fitf^t_ifit?和fit+1f^{t+1}_ifit+1?以不同的權重進行相加,最終得到新的特征fif_ifi?,這個fif_ifi?將會取代fit+1f^{t+1}_ifit+1?進行后續的計算。
可轉換的空洞卷積
SAC(Switchable Atrous Convolution)
如上圖所示是SAC的整體結構,作者將ResNet中所有的3×33 \times 33×3的卷積層都轉換為SAC,以實現在不同空洞率的情況下卷積操作的軟切換。圖中紅色的鎖表示權重是相同的,只是訓練過程可能有差異。兩個一前一后的全局上下文模塊用于將圖像級別的信息引入特征中。
用y=Conv(x,w,r)y=Conv(x,w,r)y=Conv(x,w,r)表示卷積操作,其中www表示權重,rrr表示空洞率,xxx是輸入,yyy是輸出。nn那么可以根據下式將卷積層轉換為SAC:
其中Δw\Delta wΔw是一個可學習的權重,轉換函數S()˙S(\dot)S()˙?由5×55 \times 55×5的平均池化層和1×11 \times 11×1的卷積層組成,其與輸入和位置相關。
作者提出一種鎖機制,也就是將一個權重設為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%。但是沒有鎖機制的話,Δw\Delta wΔw會使AP降低很多。
全局上下文模塊
在SAC的之前和之后有兩個全局上下文模塊,由于輸入特征已經先被全局平均池化層壓縮過了,因此這兩個模塊都是輕量級的,權重很低。全局上下文模塊有點類似于SENet,但和SENet有以下兩個不同之處:
通過實驗發現,在SAC之前添加全局上下文模塊(也就是將全局信息添加到轉換函數中)會對檢測性能產生好的影響。作者推測可能是因為在全局信息可用的情況下,轉換函數SSS能夠做出更加穩固的轉換預測。
后來作者將全局上下文模塊從轉換函數中移出來,并把它放到了SAC的之前和之后,這樣的話卷積層和轉換函數都能從中獲取全局信息。
實驗結果
上圖從左到右分別是:baseline HTC,HTC+RFP,HTC+SAC,gt。可以看到,
- RFP與人類視覺類似,它可以選擇性增強或抑制神經元激活,能夠更容易地找到被遮擋的目標,而附近的上下文信息也因此更加重要;
- SAC可以根據需要擴大感受野,因此更適合檢測圖像中的大目標。
總結
以上是生活随笔為你收集整理的DetectoRS: Detecting Objects with Recursive Feature Pyramid and Switchable Atrous Convolution 论文笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技术员 Ghost Win7 Sp1(x
- 下一篇: linux浏览器,邮件客户端,输入法,双