天天看點

Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution——論文筆記

目錄

    • 1. Motivation
    • 2. 相關工作
      • 2.1 提高CNN架構的效率
      • 2.2 多尺度表示學習
    • 3 網絡結構
      • 3.1 Octave特征表示
      • 3.2 Octave 卷積
      • 3.3實作細節
    • 4 實驗
      • 4.1 實驗設定
      • 4.2 模型簡化測試
      • 4.3 和目前在ImageNet上SOTAs相比
    • 5 總結

論文傳送門:

Drop an Octave: Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution

1. Motivation

聲音頻段中有高頻部分和低頻部分,圖檔像素中也可以将資訊分為高頻資訊和低頻資訊,低頻資訊中包含那些緩慢變化的、結構性的資訊,而高頻資訊一般包含那些變化較大、包含圖檔細節的資訊,是以我們可以把一張圖檔認為是高頻資訊和低頻資訊的混合表示。下圖是一個圖像的高頻資訊和低頻資訊分離表示。

Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution——論文筆記

為了提高CNN的性能和準确率,有很多的工作緻力于減少模型參數内在的備援,在加快訓練速度的同時能夠獲得更多正交的進階特征進而提高模型的表示能力,但是實際上每一層CNN輸出的特征圖也存在着大量的備援,我們以原始輸入為例,圖檔的每一個像素之間并不是孤立的,相鄰的元素之間存在着密切的聯系,将它們聯合在一起存儲表示往往能夠更加準确的描述圖檔的資訊,是以我們以單一像素的形式存儲是及其浪費存儲和計算資源的。

是以,我們可以将特征圖按照頻率分成兩部分,一部分是高頻資訊,一部分是低頻資訊,然後我們可以将低頻資訊的資料通過使相鄰元素之間共享資訊來降維,進而降低其空間備援性。在對低維資料進行處理的時候,我們還相當于變相的擴大了其感受野,使得網絡能夠學習到更加進階的特征,有助于提高網絡的準确性。

本文的貢獻如下:

  1. 提出将卷積特征圖按照不同的頻率分成兩組,并對不同頻率的資料進行不同的卷積處理。因為低頻資訊可以被安全的壓縮而不用擔心影響網絡的準确率,是以這可以使得我們節省大量的存儲和計算資源;
  2. 設計了一個名為OctConv的即插即用的運作單元,可以直接作為普通CNN卷積運算單元的替換,OctConv可以直接處理我們提出的新的特征圖表示并且降低了低頻資料的備援性;
  3. 使用上面設計的OctConv實作流行的CNN架構,并與目前最好結果進行對比,同時和目前最好的AutoML架構進行了對比。

2. 相關工作

2.1 提高CNN架構的效率

自從AlexNet、VGG等架構使用堆疊大量卷積層的方法構架網絡并取得了巨大的成績之後,研究者們為了提高CNN的效率做出了很多的努力。

ResNet、DenseNet通過增加跨越多層的快捷連接配接來加強特征的重用,同時也是為了減輕梯度消失問題,降低了優化的困難。如下圖所示:

Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution——論文筆記

因為我們可以在現有網絡結構上直接堆疊一個恒等映射層,也就是一個什麼都不做的層,而不影響整體的效果,是以深層網絡不應該比稍淺一些的網絡造成更大的誤差,是以ResNet引入了殘差塊,并且希望該結構能夠fit剩餘映射,而不是直接去fit底層映射。ResNet并不是第一個利用快捷連接配接的神經網絡,Highway Network首次引入了Gated shortcut connections,用于控制通過該連接配接的資訊量,同樣的思想我們還可以在LSTM的設計中發現,它利用不同的門控單元來控制資訊的流動。

ResNeXt和ShuffleNet架構利用稀疏連接配接的分組卷積方法來降低不同通道之間的備援性,如下圖所示:

Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution——論文筆記

Xception和MobileNet使用深度可分離卷積層來減小連接配接的密集程度。

2.2 多尺度表示學習

本文提出的OctConv在不同的空間分辨率下對特征圖進行卷積,得到了具有較大接收域的多尺度特征表示。尺度空間很早就被用于局部特征提取,比如之前很流行的SIFT特征,在深度學習領域,現有方法主要聚焦于融合多尺度特征,更好的擷取全局資訊。然而類似的這些方法大多隻在網絡結構的某些曾或者網絡的末端加入提出的新的結構,bL-Net和ELASTIC-Net使用頻繁的對特征圖進行上采樣和下采樣來捕獲多尺度特征。但是以上這些方法都是設計為殘差塊的替代品,當被用于不同的網絡結構時需要額外的專業知識和更多的超參數優化。

3 網絡結構

3.1 Octave特征表示

對于一般的CNN來說,輸入和輸出特征圖的空間分辨率是相同的,然而對于空間頻率模型,即本文提出的方法來說,一個自然圖檔可以被因式分解成捕獲全局資訊和粗略架構的低頻信号和捕獲優化細節的高頻信号。我們認為存在一個特征圖的子集可以表示空間中的低頻信号的變化和備援資訊。

為了減少這種空間備援性,我們引入了Octave特征表示,顯示的将特征圖分成了高頻和低頻兩部分。假設輸入特征圖為 X ∈ R c ∗ h ∗ w X \in R^{c*h*w} X∈Rc∗h∗w,其中c是通道數,h、w是特征圖的尺寸,我們在通道次元将特征圖分為兩部分,即 X = { X H , X L } X=\{X^H, X^L\} X={XH,XL},其中, X H ∈ R ( 1 − α ) c ∗ h ∗ w , X L ∈ R α c ∗ h 2 ∗ w 2 ,    α ∈ { 0 , 1 } X^H \in R^{(1-\alpha)c*h*w},X^L \in R^{\alpha c * \frac{h} {2}* \frac{w}{2}}, \ \ \alpha \in \{0,1\} XH∈R(1−α)c∗h∗w,XL∈Rαc∗2h​∗2w​,  α∈{0,1}, α \alpha α表示通道被配置設定到低頻部分的比例。如下圖所示:

Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution——論文筆記

3.2 Octave 卷積

上面介紹的Octave特征表示降低了低頻資訊的空間備援性,并且比正常CNN特征表示更加複雜,是以不能直接被正常的CNN所處理,一直比較Naive的做法是對低頻表示進行上采樣使其達到和高頻資訊一緻的尺寸然後組合這兩個部分,就可以得到能夠被普通CNN處理的資料格式,但是這種做法即增加了記憶體的消耗,也增加了大量的計算。是以,本文設計了可以直接處理 X = { X H , X L } X=\{X^H, X^L\} X={XH,XL}這種特征表示的卷積層:Octave Convolution。

Vanilla Convolution:

設 W ∈ R c ∗ k ∗ k W \in R^{c*k*k} W∈Rc∗k∗k表示一個卷積核, X , Y ∈ R c ∗ h ∗ w X,Y \in R^{c*h*w} X,Y∈Rc∗h∗w表示輸入和輸出張量,那麼輸出特征 Y p , q ∈ R c Y_{p,q} \in R^c Yp,q​∈Rc可以表示為:

Y p , q = ∑ i , j ∈ N k W ( i + k − 1 2 , j + k − 1 2 ) T X ( p + i , q + j ) Y_{p,q}=\sum_{i, j \in N_k} W_{(i + \frac{k-1}{2}, j + \frac{k-1}{2})}^T X_{(p+i, q+j)} Yp,q​=i,j∈Nk​∑​W(i+2k−1​,j+2k−1​)T​X(p+i,q+j)​

上式比較簡單,這裡不多做解釋。

Octave Convolution:

我們的目标是在分别對高頻和低頻資訊進行卷積處理的同時還允許二者之間進行有效的資訊互動。是以由上面的介紹我們可以得到:

Y H = Y H → H + Y L → H Y L = Y L → L + Y H → L Y^H=Y^{H\rightarrow H} + Y^{L \rightarrow H}\\ Y^L=Y^{L\rightarrow L} + Y^{H \rightarrow L}\\ YH=YH→H+YL→HYL=YL→L+YH→L

如下圖所示:

Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution——論文筆記

為了上面的計算,我們将卷積核W分成四個部分 W = { W H , W L } = { W H → H , W H → L , W L → L , W L → H } W=\{W^H, W^L\}=\{W^{H\rightarrow H}, W^{H\rightarrow L}, W^{L\rightarrow L}, W^{L\rightarrow H}\} W={WH,WL}={WH→H,WH→L,WL→L,WL→H},如下圖所示:

Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution——論文筆記

對于頻内資訊交流,我們直接使用普通的CNN卷積計算,對于頻間的資訊交流,我們将上/下采樣和卷積操作放在一起,避免了顯示的計算和存儲采樣結果。公式如下:

Y p , q H = Y p , q H → H + Y p , q L → H = ∑ i , j ∈ N k W i + k − 1 2 , j + k − 1 2 H → H T X p + i , q + j H + ∑ i , j ∈ N k W i + k − 1 2 , j + k − 1 2 L → H T X ⌊ p 2 ⌋ + i , ⌊ q 2 ⌋ + j L \begin{aligned} Y_{p,q}^H&=Y_{p,q}^{H\rightarrow H} + Y_{p, q}^{L\rightarrow H}\\ &=\sum_{i,j \in N_k}{W_{i+\frac{k-1}{2}, j +\frac{k-1}{2}}^{H\rightarrow H}}^T X_{p+i, q+j}^H\\ &+\sum_{i,j \in N_k}{W_{i+\frac{k-1}{2}, j +\frac{k-1}{2}}^{L\rightarrow H}}^TX_{\lfloor \frac{p}{2} \rfloor +i, \lfloor \frac{q}{2} \rfloor+j}^L \end{aligned} Yp,qH​​=Yp,qH→H​+Yp,qL→H​=i,j∈Nk​∑​Wi+2k−1​,j+2k−1​H→H​TXp+i,q+jH​+i,j∈Nk​∑​Wi+2k−1​,j+2k−1​L→H​TX⌊2p​⌋+i,⌊2q​⌋+jL​​

Y p , q L = Y p , q L → L + Y p , q H → L = ∑ i , j ∈ N k W i + k − 1 2 , j + k − 1 2 L → L T X p + i , q + j L + ∑ i , j ∈ N k W i + k − 1 2 , j + k − 1 2 H → L T X 2 ∗ p + 0.5 + i , 2 ∗ q + 0.5 + j H \begin{aligned} Y_{p,q}^L&=Y_{p,q}^{L\rightarrow L} + Y_{p, q}^{H\rightarrow L}\\ &=\sum_{i,j \in N_k}{W_{i+\frac{k-1}{2}, j +\frac{k-1}{2}}^{L\rightarrow L}}^T X_{p+i, q+j}^L\\ &+\sum_{i,j \in N_k}{W_{i+\frac{k-1}{2}, j +\frac{k-1}{2}}^{H\rightarrow L}}^TX_{2*p+0.5+i, 2*q+0.5+j}^H \end{aligned} Yp,qL​​=Yp,qL→L​+Yp,qH→L​=i,j∈Nk​∑​Wi+2k−1​,j+2k−1​L→L​TXp+i,q+jL​+i,j∈Nk​∑​Wi+2k−1​,j+2k−1​H→L​TX2∗p+0.5+i,2∗q+0.5+jH​​

上式中的 ⌊ p 2 ⌋ \lfloor \frac{p}{2} \rfloor ⌊2p​⌋是為了上采樣,同樣的, 2 ∗ p + 0.5 + i 2*p+0.5+i 2∗p+0.5+i的目的是下采樣,加上0.5度目的是為了保證下采樣之後的輸出特征圖分布不偏移,相當于平均池化。

通過設定不同的 α \alpha α值,我們可以将資料進行不同程度的壓縮,同時節省了大量的計算,下面是一個統計表:

Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution——論文筆記

3.3實作細節

上一節中我們提到下采樣時使用平均池化的思想,而不是一般的Strided convolution,具體原因如下圖:

Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution——論文筆記

如文中所述,使用Strided convolution會導緻輸出的特征圖偏移。

這樣,我們可以将Octave Convolution的計算表示如下:

Y H = f ( X H ; W H → H ) +  upsample  ( f ( X L ; W L → H ) , 2 ) Y L = f ( X L ; W L → L ) + f ( pool ⁡ ( X H , 2 ) ; W H → L ) ) \begin{aligned} Y^{H} &=f\left(X^{H} ; W^{H \rightarrow H}\right)+\text { upsample }\left(f\left(X^{L} ; W^{L \rightarrow H}\right), 2\right) \\ Y^{L} &=f\left(X^{L} ; W^{L \rightarrow L}\right)+f\left(\operatorname{pool}\left(X^{H}, 2\right) ; W^{H \rightarrow L}\right) ) \end{aligned} YHYL​=f(XH;WH→H)+ upsample (f(XL;WL→H),2)=f(XL;WL→L)+f(pool(XH,2);WH→L))​

Octave Convolution還适用于一些常見變種卷積類型,比Group Convoolution和Depthwise Conolution。這裡多介紹一下這兩種卷積的工作方式:

Group Convoolution:分組卷積最早在AlexNet中出現,由于當時的硬體資源有限,訓練AlexNet時卷積操作不能全部放在同一個GPU處理,是以作者把feature maps分給多個GPU分别進行處理,最後把多個GPU的結果進行融合。

具體來說就是對于輸入 X ∈ R c 1 ∗ h ∗ w X \in \mathcal{R}^{c_1*h*w} X∈Rc1​∗h∗w,普通卷積方式是用 c 2 c_2 c2​個大小為 c 1 ∗ k ∗ k c_1*k*k c1​∗k∗k的卷積核對輸入進行卷積計算,其中 c 2 c_2 c2​是輸出通道數, c 1 c_1 c1​是輸入通道數,h,w是輸入特征圖大小, k ∗ k k*k k∗k是卷積核大小,當輸入規模很大時,這個計算需要很大的存儲,是以我們可以将它分成兩部分來計算,我們将輸入和輸出在通道那個次元切分成兩個部分,将輸入資料分成了2組(組數為g),需要注意的是,這種分組隻是在深度上進行劃分,即某幾個通道編為一組,這個具體的數量由 c 1 / g c_1/g c1​/g決定。因為輸出資料的改變,相應的,卷積核也需要做出同樣的改變。即每組中卷積核的深度也就變成了 c 1 / g c_1/g c1​/g,而卷積核的大小是不需要改變的,此時每組的卷積核的個數就變成了 c 2 / g c_2/g c2​/g個,而不是原來的 c 2 c_2 c2​了。然後用每組的卷積核同它們對應組内的輸入資料卷積,得到了輸出資料以後,再用concatenate的方式組合起來,最終的輸出資料的通道仍舊是 c 2 c_2 c2​。

Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution——論文筆記

我們可以看到分組卷積減少了大量的計算,但是同時由于直接簡單的将輸入按照通道分成了多個組,而多個組之間沒有任何的資訊交流,是以對特征的捕獲是不利的。

Depthwise Conolution:Depthwise(DW)卷積與Pointwise(PW)卷積,合起來被稱作Depthwise Separable Convolution(參見Google的Xception),該結構和正常卷積操作類似,可用來提取特征,但相比于正常卷積操作,其參數量和運算成本較低。是以在一些輕量級網絡中會碰到這種結構如MobileNet。

不同于正常卷積操作,Depthwise Convolution的一個卷積核負責一個通道,一個通道隻被一個卷積核卷積。上面所提到的正常卷積每個卷積核是同時操作輸入圖檔的每個通道。同樣是對于一張5×5像素、三通道彩色輸入圖檔(shape為5×5×3),Depthwise Convolution首先經過第一次卷積運算,不同于上面的正常卷積,DW完全是在二維平面内進行。卷積核的數量與上一層的通道數相同(通道和卷積核一一對應)。是以一個三通道的圖像經過運算後生成了3個Feature map(如果有same padding則尺寸與輸入層相同為5×5),如下圖所示:

Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution——論文筆記

Depthwise Convolution完成後的Feature map數量與輸入層的通道數相同,無法擴充Feature map。而且這種運算對輸入層的每個通道獨立進行卷積運算,沒有有效的利用不同通道在相同空間位置上的feature資訊。是以需要Pointwise Convolution來将這些Feature map進行組合生成新的Feature map。

Pointwise Convolution的運算與正常卷積運算非常相似,它的卷積核的尺寸為 1×1×M,M為上一層的通道數。是以這裡的卷積運算會将上一步的map在深度方向上進行權重組合,生成新的Feature map。有幾個卷積核就有幾個輸出Feature map。如下圖所示。

Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution——論文筆記

對于Group Convolution,我們看可以簡單的把Octave Convolution的四個卷積操作都替換成Group Convolution,同樣的,對于Depthwise Convolution也可以這樣做。

4 實驗

4.1 實驗設定

選取了一些比較流行的CNN架構,并将它們的出了第一層卷積層之外的卷積層替換為Octave Convolution,并增加了一個超參數 α \alpha α,表示低頻資訊的比例。

4.2 模型簡化測試

探究了兩個問題:

  1. OctConv是否比普通CNN能夠更好的權衡算力和準确率?
  2. OctConv适合在什麼樣的情形下使用?

在幾個流行架構上的測試結果如下圖所示:

Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution——論文筆記

觀察結果如下:

  1. flops-accuracy權衡曲線為凹曲線,精度先上升後緩慢下降。
  2. 我們主要觀察到兩個特殊的點:第一個在α= 0.5,網絡得到類似或者更好的結果;第二個在α= 0.125,網絡達到最好的精度,比baseline高出1.2%。

我們将準确度的提高歸功于OctConv對高低頻資訊處理的有效設計以及相應的擴大低頻資訊的感受野,它提供了更多的上下文資訊。準确率達在到最高點之後并沒有突然下降,表明對低頻資訊的高度壓縮不會導緻重大的資訊丢失。有趣的是,75%的feature map可以壓縮到一半的分辨率,而準确率隻有0.4%的下降,這證明了對平滑變化的feature map進行分組和壓縮的有效性,可以減少CNNs中的空間備援。

4.3 和目前在ImageNet上SOTAs相比

見下圖:

Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution——論文筆記

5 總結

本文所做的工作主要解決了普通CNN中feature map中的資訊備援問題,并提出了OctConv,其可以非常友善的用于其他比較流行的CNN架構,在節省了大量的計算和存儲資源的同時,通過不同頻率之間的資訊交換和感受野的誇大,對模型的精度有些許的提高。

繼續閱讀