論文筆記: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方式,權重都只是依賴幾何信息,並不依賴輸入特徵自己。app

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_ε\)spa

然後,使用\(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卷積核的權重。orm

高效實現

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

相關文章
相關標籤/搜索