論文筆記:Learning Region Features for Object Detection


中心思想

繼Relation Network實現可學習的nms之后,MSRA的大佬們覺得目標檢測器依然不夠fully learnable,這篇文章類似之前的Deformable ROI Pooling,主要在ROI特征的組織上做文章,文章總結了現有的各種ROI Pooling變體,提出了一個統一的數學表達式,藉由這個表達式,提出完全可學習,無人工設計的Region特征,據Han Hu大佬的講座所說,這篇文章現在只是提出了一種行得通的方案,還沒有研究清楚,性能比Deformable Conv那篇文章稍差一點點。

Region特征提取的總結和統一表達

一般地,region feature \(\mathbf{y}(b)\)的提取可以統一表達為如下的公式:

\[\mathbf{y}(b) = \text{RegionFeat}(\mathbf{x}, b) \]

這里x指的是輸入特征,b是bbox。\(\mathbf{y}(b)\)的維度是\(K\times C_f\),通道數與輸入特征一般相同,為\(C_f\)。注意,要特別關注自變量包含哪些東西,這里x是指整張特征圖,而不只是box內的特征,譬如在Deformable ROI Pooling中就用到了box之外的特征。這個式子可以具體地表達為:

\[\mathbf{y}_k(b) = \sum_{p \in \Omega_b}w_k(b,p,\mathbf{x})\odot \mathbf{x}(p) \]

其中,\(\Omega_b\)表示支撐區域“supporting region”,也就是Pooling所用到的區域,p為區域中的每個位置,\(\odot\)表示element-wise相乘,k表示pooling后的第k個位置。也就是說,pooling后的每個位置,都是\(\Omega_b\)中每個位置的加權平均。
最原始的RoI Pooling,作者稱之為Regular RoI Pooling,

\[w_k(b, p) = \begin{cases} 1/|R_{bk}| & \text{ if $p \in R_{bk}$} \\ 0 & \text{else} \end{cases}\]

其中,\(R_{bk}\)是第k個bin的所有位置的幾何。這種pooling的缺點是:由於空間上的下采樣,難以區分非常靠近的RoIs。譬如,輸入特征一般比原圖縮小了16倍,如果兩個RoI的距離小於16個像素,那么它們的\(R_{bk}\)完全相同,特征也就完全相同。
SPPNet中提出的Spatial Pyramid Pooling,跟原始RoI Pooling差不多,只是用了好幾種bin的划分。
Aligned ROI Pooling,

\[w_k(b, p) = g(u_p, u_{bk}) \cdot g(v_p, v_{bk}) \]

其中,\(g(a,b) = \max(0, 1-|a-b|)\))表示一維的雙線性插值核,\((u_{bk}, v_{bk})\)表示每個bin的中心點,\(p=(u_p,v_p)\)表示整數坐標。比較好理解,就是對於某個浮點坐標,考慮其與四個相鄰整數坐標的距離,再進行加權。注意,以上幾種Pooling方式,權重都只是依賴幾何信息,並不依賴輸入特征本身。

Deformable RoI pooling為每個bin的中心學習一個偏移量\((\delta u_{bk}, \delta v_{bk})\)

\[w_k(b,p,\mathbf{x}) = g(u_p, u_{bk} + \delta u_{bk}) \cdot g(v_p, v_{bk} + \delta v_{bk}) \]

PSRoI Pooling,與原始RoI Pooling不同的是,每個bin僅與輸入特征通道的某個子集相關,可以表達為

\[\mathbf{y}_k(b) = \sum_{p \in \Omega_b}w_k(b,p,\mathbf{x}_k)\odot \mathbf{x}_k(p) \]

其中,\(\mathbf{x}_k\)僅包含x在通道軸上的某個子集,具體依據k來決定。

學習Region Features

重點來了,說了這么多,上面的各種變體說到底都是完全hand-crafted的。即使Deformable RoI pooling引入了一個可學習的組件,但其形式也很大程度上受限於一個規則的網絡。本文的目標就是最大限度地減少手工的設計。

直覺上,影響\(w_k\)的因素有二:一是位置p與RoI box b的幾何關系,例如,b內部的位置理應具有較高的權重;二是圖像特征x應自適應地使用,這一點Deformable中已經做到了。因此,使用下列式子對\(w_k\)進行建模:

\[w_k(b,p,\mathbf{x}) \propto \exp(G_k(b,p)+A_k(\mathbf{x},p)) \]

其中,第一項用來捕捉幾何關系:

\[G_k(b,p) = \langle W^{\text{box}}_{k}\cdot \mathcal{E}^{\text{box}}(b), W^{\text{im}}\cdot \mathcal{E}^{\text{im}}(p) \rangle \]

這個式子分三步進行。首先,將box和圖像坐標嵌入到一個高維空間中(Relation Network中也有類似操作)。
$$\mathcal{E}_{2i}(z) = \sin \Large ( \frac{z}{1000^{2i/C_{\mathcal{E}}}} \Large ), \quad \mathcal{E}_{2i+1}(z) = \cos \Large (\frac{z}{1000^{2i/C_{\mathcal{E}}}} \Large )$$

這個操作確實說不出太多道理,作者也說了這問題還沒研究清楚。z是一個標量,ε(z)是一個\(C_ε\)維的向量,下標i的取值范圍為0至\(C_ε/2-1\)。經過這一操作,一個圖像坐標p的高維空間嵌入\(ε^im (p)\)的維度是\(2C_ε\),一個box b的高維空間嵌入\(ε^box (b)\)的維度是\(4C_ε\)

而后,使用\(W^{\text{box}}_{k}\)\(W^{\text{im}}_{k}\)分別對上面的兩個向量作線性變換,變換到同一維度\(C_g\)。注意,這里k的數值是比較大的,一般是7x7,實例分割任務中甚至會取14x14,這樣搞下來可學習的參數會比較多,所以作者尋思着共享一部分參數,\(W^{\text{box}}_k = \hat{W}^{\text{box}}_k V^{\text{box}}\)\(V^{\text{box}}\)沒有下標k,所以是共享的,這樣做也是比較符合直覺的,在保證輸出維度不變的前提下能減少很多參數。

第二項使用圖像特征,跟Deformable那篇是一樣的,

\[A_k(\mathbf{x},p) = W^{\text{app}}_k \cdot \mathbf{x}(p) \]

\(W^{\text{app}}_k\)代表1x1卷積核的權重。

高效實現

上面這一系列騷操作,乍一看是非常費勁的。但仔細分析之下可以看到,\(A_k(\mathbf{x},p)\)\(W^{\text{im}}\cdot \mathcal{E}^{\text{im}}(p)\)的計算對所有的RoI是可復用的。所以計算量主要來自計算權重時要跟特征圖上的所有點兩兩進行計算,所以數量級是HW,可以去看原論文中的表,這里就不貼出來了,如果用這種naive的實現方式,計算量驚人。怎么辦呢?很顯然應該從HW上下手,手法是很符合直覺的,就是在RoI內部密集采樣,而在RoI外部稀疏采樣。如下圖所示,數量級可以下降100倍左右!但個人認為不是所有的RoI都需要計算,因為一般只選取k個RoI進入到第二階段,不選的就不必計算了,論文里好像沒寫這個,不過代碼里想必是實現了的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM