談談CNN中的位置和尺度問題

前段時間看到了幾篇有意思的文章,也參考了一些相關的討論,這裡想對CNN中的平移和尺度的不變性和相等性,以及CNN對於目標相對和絕對位置、深度的預測原理進行探討。這些內容對於一些特定任務很重要,比如目標檢測、目標分割、深度估計、分類/識別以及單目標跟蹤中的置信圖預測等。

CNN是否存在平移和尺度的不變性和相等性

1.1 不變性和相等性的定義

在介紹卷積神經網路(CNN)之前,我們對於不變性和相等性的理解可能來自於傳統影像處理演算法中的,平移、旋轉、光照和尺度等不變性,比如HOG梯度方向直方圖,由於cell的存在,其對於平移、旋轉有一定的不變性,另外由於對影像局部對比度歸一化的操作,使其對於光照也有著一定的不變性。又比如說SIFT特徵提取,其對於以上四點都有著不變性,其中由於尺度金字塔,使得對尺度也有不變性。這裡我們對於不變性的理解就是,同一對象發生平移、旋轉、光照變化、尺度變換甚至形變等,其屬性應該一致。下面我們給出具體的不變性和相等性的定義。

其中不變性(invariance)的定義正如上文所說,因此其形式為:

而對於相等性(equivalence),顧名思義,就是對輸入進行變換之後,輸出也發生相應的變換:

不過如果我們只考慮輸出對於輸入不變性和相等性的情況,則會難以理解,因為我們更多地是想像著特徵層面的映射,比如:

那麼特徵層面對於輸出的影響我們可能考慮得比較少,但是卻實質存在,比如目標在影像中的平移和尺度等變換,在目標檢測任務中,必須要使得網路具有相關的變換相等性,由此捕捉目標的位置和形狀變化。而在影像分類、目標識別、行人重識別等任務中,又必須使得網路具有相關變換的不變性。這兩點也是目標檢測和行人檢索領域中一個經典的矛盾問題,目前好像還沒有特別好的解決,更多地是分階段地執行不同的任務,防止特徵共用。比如:經典的兩階段目標檢測任務中,第一階段是粗檢測和前景背景分類,第二階段是精修和具體類別分類,有一定的偏重。行人檢索演算法則大多是先檢測後識別的策略。當然除了不變性和相等性的問題,還存在類內差異的問題,比如不同的人對於檢測而言都是行人類別,對於識別而言則是不同的人,這對於特徵提取也存在挑戰。

1.2 CNN網路的執行過程

我記得我幾年前第一次接觸到深度學習的時候,對於全連接和CNN的局部連接形式,都有平移、尺度不變性的說法。對於全連接網路,由於下一層的每個節點都會與上一層進行連接:

因此無論輸入發生了平移、尺度等什麼變換,只要其屬性沒變,全連接網路更能捕捉其中的不變性。而對於卷積神經網路,我們都知道兩個特點:局部連接和權值共享。

對於局部連接,因為全連接參數太多,容易造成過擬合,並且影像領域更多地關注局部細節資訊,所以局部連接方式有效。至於權值共享,也有減少參數的作用,很像影像處理中的濾波器。我們早期對於其不變性的理解更多是遵循一個宏觀的感受,即由於卷積核的移位濾波,上一層的特徵到下一層的特徵相對位置宏觀不變,直到最後輸出,類似於全連接的效果,從而獲得不變性。

1.3CNN網路潛在問題與改進

正因為我剛說的宏觀不變,使得輸入在經過多次卷積、池化之後,微觀/細節的變化累積放大,從而失去了這種不變性,接下來我會結合兩篇論文進行介紹。

第一個是為了解決CNN平移不變性對抗性攻擊的一篇ICML2019論文《Making Convolutional Networks Shift-Invariant Again》https://arxiv.org/pdf/1904.11486.pdf。這篇文章主要討論了CNN網路中的降取樣對於平移不變性的影響:

上圖是對於一個窗戶分別採用從0~7的平移量,其特徵圖與不平移的差異,可以明顯看到,特徵圖出現了波動。相應地,上半部分是利用pix2pix生成的影像,我們可以看到隨著平移量的增大,窗戶中的豎直線從兩根變成了一根。這一點就表明傳統的CNN網路並不具有平移不變性。

首先,作者做了這樣一個小實驗,即採用maxpooling對一維向量[0011001100]進行池化,由此得到向量[01010]:

接著,如果將輸入向右平移一個單位,則得到向量[111111]:

很明顯,平移相等性和不變性都丟失了。接著作者做了進一步實驗,利用餘弦距離來刻畫平移相等性,採用VGG網路對Cifar數據集進行試驗:

其中顏色越深說明差異越大,可以看到每次maxpooling都增加了特徵的差異性,不過作者將max和pool操作分開了,為了區分取最大值和降取樣的影響:

很明顯,降取樣對於平移相等性的影響更大,而CNN中涉及到降取樣的操作有:池化(maxpooling和average pooling)和帶步長的卷積(strided convolution)。對此作者提出了一種名為Anti_aliasing方法,中文叫做抗鋸齒處理。傳統訊號處理領域中對於抗鋸齒的技術,一般要麼增大取樣頻率,但由於影像處理任務一般都需要降取樣,這一點不適合。要麼採用影像模糊(bluring)技術,根據Nyquist取樣理論,是給定取樣頻率,通過降低原始訊號的頻率來使得訊號能夠被重構出來,如下圖所示。對模糊化處理和未處理的原影像進行下取樣,得到圖中底部的兩張圖,模糊化處理的原影像下取樣的影像還能看出一些輪廓,而未處理的原影像下取樣的影像就顯得更加混亂。

作者就是採用了模糊的方式,提出了三種不同的blur kernel

  • Rectangle-2:[1, 1],類似於均值池化和最近鄰插值;
  • Triangle-2:[1, 2, 1],類似於雙線性插值;
  • Binomial-5:[1, 4, 6, 4, 1],這個被用在拉普拉斯金字塔中。

每個核都需要歸一化,即除以核內所有元素之和,然後加入到降取樣過程,即在降取樣之前使用blur kernel進行卷積濾波:

可以看到其效果很不錯:

程式碼和模型見:https://richzhang.github.io/antialiased-cnns/或者https://github.com/adobe/antialiased-cnns

第二篇是同年發表在JMLR的一篇論文《Why do deep convolutional networks generalize so poorly to small image transformations?》http://www.jmlr.org/papers/volume20/19-519/19-519.pdf。作者首先給出了幾組示例,分別表示了平移、尺度以及輕微影像差異對網路預測分類置信度的影響:

作者認為CNN忽視了取樣定理,這一點之前Simoncelli等人已經在論文Shiftable multiscale transforms http://persci.mit.edu/pub_pdfs/simoncelli_shift.pdf中驗證了二次取樣在平移不變性上的失敗,他們在文中說:

我們不能簡單地把系統中的平移不變性寄希望於卷積和二次取樣,輸入訊號的平移不意味著變換係數的簡單平移,除非這個平移是每個二次取樣因子的倍數。

我們現有的網路框架中,越深的網路,降取樣次數越多,因此出現的問題更多。緊接著,作者提出了幾點論述:

  • 如果

是經過卷積操作且滿足平移不變性的特徵,那麼全局池化操作

也滿足平移不變性;

  • 對於特徵提取器

和降取樣因子

,如果輸入的平移都可以在輸出上線性插值反映出來:

由香農-奈奎斯特定理知,

滿足可移位性,要保證取樣頻率至少為最高訊號頻率的2倍。

接下來,作者對這些問題做了一些改進嘗試:

  • 抗鋸齒,這個就是我們剛剛介紹的方法;
  • 數據增強,當前在很多影像任務中,我們基本都會採用隨機裁剪、多尺度、顏色抖動等等數據增強手段,的確也讓網路學習到了部分不變性;
  • 減少降取樣,也就是說只依賴卷積對於輸入尺度的減小來變化,這一點只對小影像適用,主要是因為計算代價太高。

CNN對於位置和深度資訊的預測

2.1CNN如何獲取目標的位置資訊

最早接觸神經網路和深度學習相關任務時,我的感覺就是這類演算法本質是做的分類任務,比如影像分割是對前景背景的分類和具體類別分類,識別任務就是類間類內的區分任務。其中影像分割任務就利用了CNN中的部分相等性,那麼對於目標檢測任務中的目標位置回歸是怎麼獲取的呢?我們可以知道的是同樣是對目標位置的搜索,在單目標跟蹤任務中,存在有置信圖:

但是置信圖本質上是對區域進行搜索得到的,因此可以近似為對多個子區域的識別過程,所以單目標跟蹤中的目標定位也可以用分類的理解,但是目標檢測則不好用分類來理解了。

接下來我們思考一個問題,我們所設計的網路究竟包含了哪些資訊?影像特徵、網路結構(卷積核大小、padding)。從上一章我們可以知道,網路可以學習到一定的相等性:

因此,通過不斷地訓練,網路在最後的特徵輸出中是可以通過對應的特徵數值和區域大小,結合一定的倍數(降取樣大小)估計目標尺度的。但是對於目標的位置,我們人眼對於目標位置的判定是通過坐標系的,即目標距離影像的邊緣距離,但是網路是如何了解這一資訊的呢?《How much Position Information Do Convolutional Neural Networks Encode?》https://arxiv.org/pdf/2001.08248.pdf這篇文章做出了回答。

作者首先做了一組實驗:

對於不同的輸入影像,採用多種mask擾動,H、V、G分別代表水平、豎直和高斯等分布,用這種方式生成多種groundtruth,對於這點我們可能對單目標跟蹤中以目標中心為均值的高斯分布比較熟悉。結果發現:

GT是三種分布生成的groundtruth,PosENet是作者提出的網路,沒有padding。我們可以看到PosENet並沒有得到位置分布資訊,而是保持了相等性。而存在padding的VGG和ResNet則都預測出了位置分布。由此可見padding對於位置的作用,也對上一章的內容作了補充,padding對於平移不變性和相等性也有影響。

不過這裡我們可能不好理解,我做了個小測試,不過不一定是這麼做的,僅僅方便我理解:

上面是兩個不同位置「目標」的卷積結果,可以看到,從輸出結果得不到什麼位置反映,如果加入padding:

首先我們可以知道的是,加入了zero-padding之後,目標邊緣相對中心的輸出更小了,其次目標距離影像邊緣距離越遠,其特徵映射中出現0的次數越多。所以我猜網路就是在訓練過程中讓padding和這個相對的關係對應上了,如果沒有padding,目標距離邊緣越遠,同樣出現0的次數也會越多,但問題在於無法跟padding造成的邊緣數值小,中心數值大的特殊分布相比。當然,以上僅僅是我個人的理解,為了幫助我加深印象罷了。也有人說加入了padding影響了CNN的平移相等性,從而使得CNN學到了位置資訊,但這個不大好解釋。

不過有關padding的問題,在CVPR2019的一片單目標跟蹤演算法SiamRPN++中也做了探討。其出發點在於為何Siamese網路無法擴展為大型網路,其原因就在於padding影響了平移相等性,從而讓目標位置的分布發生了偏移。所以作者通過對目標中心的隨機擾動,使得網路克服自身的偏移:

也有一些研究探索了如何讓CNN結合絕對位置資訊,比較出名的應該是當前很熱門的SOLO單階段實力分割演算法。SOLO的出發點很簡單,我們都知道語義分割只需要分割出不同類別的目標,而實力分割對於同一類別的個體還需要區分。但是顯而易見,同一類別的目標只要位置和形狀不同則可以區分。因此SOLO就是將位置和形狀(用尺寸簡化)資訊結合進來。具體而言,就是將輸入系統的影像統一划分為S x S的網格,如果對象的中心落入網格單元,那麼這個網格單元就負責預測語義類別以及分割該對象實例。

特別地,SOLO演算法中採用CoordConv策略(程式碼:https://github.com/uber-research/coordconv),該演算法將每個特徵區域的坐標資訊結合進來,從而讓網路顯示地學會記憶特徵的絕對位置資訊。SOLO通過這個策略提升了3.6AP,並且論證只需要一層提供該資訊即可達到穩定的提升。

2.2CNN如何預測目標的深度資訊

深度估計也是一個類似的問題,不同的是,影像中並沒有包含深度資訊,但是網路是如何獲取深度資訊的呢。How Do Neural Networks See Depth in Single Images?https://arxiv.org/pdf/1905.07005.pdf這篇文章給出了回答,關於這篇文章NaiyanWang老師已經在部落格里討論過,我這裡也就再整理下。

我們可以看到,物體的絕對深度與相機位姿有著很大關係,那麼CNN如何學習到這種需要幾何先驗的絕對資訊的呢?作者做了這樣一個實驗:

上圖中作者做了三組實驗:同時變化目標位置和尺寸、只變化位置以及只變化尺寸,我們從上面的定性結果好像看不出什麼問題,下面是定量的結果:

可以發現,尺度對於深度資訊的預測沒有什麼影響,也就是說CNN網路是通過目標縱坐標來估計深度的,所以說網路實際上是在過擬合訓練集,從中學習到一些固定場景下的深度和相對位置的對應關係。

作者又討論了相機運動對於深度預測的影響,既然深度與目標縱坐標有關係,那麼pitch角的影響應該很大:

可以發現,pitch的確影響比較大,相對的roll的影響就比較小了:

最後作者還討論了顏色和紋理對深度估計的影響:

可以發現,僅僅是改變目標的顏色紋理,深度估計的效果也會下降,可將CNN網路在訓練時有多「偷懶」,不知道如果將上述實驗變成數據增強的手段的話會讓深度估計網路失效還是變強。

2020.3.18更新

昨天碰巧看到一篇CVPR2020的文章《On Translation Invariance in CNNs: Convolutional Layers can Exploit Absolute Spatial Location》https://arxiv.org/pdf/2003.07064.pdf,其中也提到了CNN中的平移不變性問題和絕對位置資訊編碼問題,其切入點是CNN中的邊界問題。

作者首先以三種卷積方式為例,full/same/valid,各自的區別在於padding的大小,具體方式我就不細說了,給個示意圖:

其中紅色部分表示padding,綠色部分表示邊界區域。很明顯,valid模式下卷積核最右邊的1永遠無法作用於綠色部分的1,same模式下的卷積核最右邊 1永遠無法作用於綠色部分的1 。作者以zero-padding和circular-padding兩種模式做了一個例子說明:

可以看到Class-1中前兩個例子都沒有檢測到1,valid和same+zero-padding模式對於待卷積區域的絕對位置比較敏感。緊接著作者又分析了每個位置被卷積的次數:

由此引出距離影像邊界多遠時某一固定像素可以被檢測到這一問題,於是作者通過給圖片四周添加不同大小的黑色邊界進行試驗:

有意思的是,增加了黑色邊界之後分類的準確率都出現了明顯的下滑,只不過不同的訓練策略和不同的backbone的抗干擾能力不同罷了。

為了定量分析各個卷積策略對於邊界的處理區別,建了一個分類數據集,特殊點都分布在邊界:

結果差別很大:

可以發現,跟之前的觀察結果一樣,前兩種策略的泛化能力很差,而基於Circular padding和full convolution的模式效果最好。接著作者為了降低邊界的影響,採用了前文介紹卷積平移不變性裡面提到的blur pooling+Tri3卷積核。然後對比S-conv+circular padding和F-conv兩種策略對於不同的影像對角平移的魯棒性:

結果顯示Full conv模式效果更好,在後續實驗中還說明了其有助於降低過擬合風險,對於小數據集更有效。

程式碼即將開源:https://github.com/oskyhn/CNNs-Without-Borders

參考資料

[1] https://zhuanlan.zhihu.com/p/99766566

[2] https://zhuanlan.zhihu.com/p/95758284

[3] https://zhuanlan.zhihu.com/p/38024868

[4] Zhang R. Making Convolutional Networks Shift-Invariant Again[C]//International Conference on Machine Learning. 2019: 7324-7334.

[5] Dijk T, Croon G. How Do Neural Networks See Depth in Single Images?[C]//Proceedings of the IEEE International Conference on Computer Vision. 2019: 2183-2191.

[6]Islam M A, Jia S, Bruce N D B. How much Position Information Do Convolutional Neural Networks Encode?[C]//International Conference on Learning Representations. 2019.

[7]Wang X, Kong T, Shen C, et al. SOLO: Segmenting Objects by Locations[J]. arXiv preprint arXiv:1912.04488, 2019.

[8]Liu R, Lehman J, Molino P, et al. An intriguing failing of convolutional neural networks and the coordconv solution[C]//Advances in Neural Information Processing Systems. 2018: 9605-9616.

[9]Novotny D, Albanie S, Larlus D, et al. Semi-convolutional operators for instance segmentation[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 86-102.

[10]Li B, Wu W, Wang Q, et al. Siamrpn++: Evolution of siamese visual tracking with very deep networks[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019: 4282-4291.

[11] Azulay, Aharon, and Yair Weiss. "Why do deep convolutional networks generalize so poorly to small image transformations?." Journal of Machine Learning Research 20.184 (2019): 1-25.