卷積神經網路提取圖像特徵時具有旋轉不變性嗎?

  • 自己用訓好的網路來提圖像特徵用於其他任務,選擇的特徵是輸出層前面的全鏈接層4096維特徵,但發現這個特徵不具有旋轉不變性,回顧了整體過程,感覺也沒有哪個步驟可以保證旋轉不變,而例如SIFT提取主方向那步很明顯保證了旋轉不變,請問該如何做改進使cnn特徵有旋轉不變性

  • 仿射變換(Affine transformation,平移,縮放,旋轉等線性變換)

  • 有人說:"因為有共享權值模式,可以使卷積神經網路(CNN)識別出圖像中的物體,而與物體的旋轉、平移、縮放無關" --卷積神經網路原理

  • 有人說:「CNN解決不變性問題的一招,就是所謂的池化」--CNN之「看了又看」

  • LeNet-5 的CNN模型確實也能識別各種旋轉 、縮放 --Yann LeCun"s news,效果好得出奇。只是不知道他是否使用了data augmentation技術(在原始圖片中加入隨機旋轉來訓練)?或者有其他特殊的設置。

首先說CNN沒有旋轉不變性是錯誤的,其實CNN是具有一定的旋轉不變性,具體在這個回答下面可以看到,之前看過一篇對於maxpooling分析的文章,現在一下子記不起來了,所以就口頭說一下
How is a convolutional neural network able to learn invariant features?
其實之所以有旋轉不變性是因為maxpooling得來的,當我們正面拍一些照片的時候,也許我們學習得到的一些地方的activation會比較大,當我們略微的轉過一點角度之後,由於maxpooling的存在,會使得我們的maxpooling依然在那個地方取到最大值,所以有一定的旋轉不變性,但是,對於角度很大的來說,maxpooling可能也會失效,所以需要一定的data augmentation,或者你也可以提高maxpooling的窗口,來提高一定的旋轉不變性。


一般的思路是做data augmentation。也就是隨機轉圖片來train。

http://homes.cs.washington.edu/~pedrod/papers/nips14.pdf
Deep Symmetry Networks 有一些這方面的努力。

還有這個贏了10萬刀kaggle競賽的entry,有一些trick可以用
http://benanne.github.io/2015/03/17/plankton.html


cnn是沒有的,只能靠數據增強。
有個spatial transformer network,用了之後可以旋轉不變。


有,但是data augmentation 的效果更好


方案1. 你訓練的時候用當前圖像進行旋轉生成新的訓練樣本用以擴充訓練集。
方案2. 具體識別時把待識別目標進行旋轉,從一個目標變為n個目標,分別識別,以識別可靠性最好的結果作為輸出。


我覺得不能說CNN特徵具有旋轉不變性,因為從CNN的架構來說並不能保證一個特徵旋轉某個角度得到同樣的激勵。一定的平移不變性是確定的,maxpool能保證在在一定範圍內平移特徵能得到同樣的激勵。使用data augmentation得到的一定程度的旋轉不變性我認為是因為CNN將不同角度的特徵當做不同的特徵,比如一個檢測45度角邊緣的卷積核和90度角邊緣的卷積核應該看做2個特徵而不是一個特徵的45度和90度旋轉不變。


卷積運算本身是不抗仿射變換的(你想想卷積的性質)


先說結論,具有一定的旋轉不變性。
上圖

作者針對圖片放縮,旋轉,上下翻轉,左右翻轉都進行了考量。Reference:Gong, Y., Wang, L., Guo, R., Lazebnik, S. (2014). Multi-scale orderless pooling of deep convolutional activation features. Lecture Notes in Computer Science (Including Subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics), 8695 LNCS(PART 7), 392–407. http://doi.org/10.1007/978-3-319-10584-0_26


可以這麼看待問題了,不管是旋轉不變性,平移不變性,縮放不變性等等,都可以看作是我們要學習的基函數F(x),這個函數是用Conv隱式內嵌在CNN的(實際上我們並不知道哪部分是F(x)),也就是說CNN不一定本身有旋轉不變這麼個特性,但是CNN可以隱式逼近這樣一個F(x),所以可以通過加入旋轉的圖片來學習F(x)


瀉藥。 @馬進

卷積本身不具有rotation invariance,max-pooling 可以稍微代償一下這個功能缺失,但因為pooling 本身不是為此設計的,總體上說CNN 提取旋轉不變的特徵能力是比較弱的。 ICML 2016 中 max welling 提出了一種卷積網路的構造,解決了這個問題。不多說了,見下

http://www.ics.uci.edu/~welling/publications/papers/icml2016_GCNN.pdf


沒仔細研究過,只是個人猜測一下。對於一般的圖片應該是沒有的,除非你的圖片中的目標本身是具有一定的對稱性,然後在訓練集中有充足的各種角度的偏轉圖片就能使得訓練的模型對提取的特徵有一定的旋轉不變性。但是對於大角度的旋轉,同時目標不怎麼對稱,數據集再多也沒用,因為模型根本就不會收斂。
以上個人只是個人揣測,歡迎交流。


CNN不具備旋轉不變性!

我自己現在是給數據的時候自己旋轉一下(剛好數據不夠的情況下,要增加數據)。

已經有多篇論文工作研究該問題。


正如上面一個人所說,所謂的不變性都是有個定語,也就是一定程度的。對於權重共享的卷積層,和只提取池化層局部的最大值都是會保證具有一定程度的 旋轉 縮放和平移不變性 。


很多地方都提到過不變性,但是很好理解的是平移不變性,旋轉不變性沒理解到過。


推薦閱讀:

請問各位大大現在的放療計劃系統在做自動化計劃時用的是神經網路嗎?

TAG:計算機視覺 | 特徵提取 | 深度學習DeepLearning | 卷積神經網路CNN |