今天一直在思考CNN的旋轉不變性,眾所周知,CNN具有平移不變性,但是是否具有旋轉不變性呢。我們來研究下吧。
1 查閱資料
查閱了許多國內外資料,在解釋旋轉不變性的時候,普遍得出來,CNN具有一定的旋轉不變性,但是這個旋轉不變性是有一定的角度控制的,當然起作用的是maxpooling 層,當我們正面拍一些照片的時候,在某些地方會得到activation.然后旋轉一定的角度之后,這個依然在相同的點得到activation區域。當然決定這個區域的是maxpooling 層,所以說maxpooling越大可以旋轉保持抽取特征不變性的角度就越大。現在很多人解決這種問題的方法都是用data augmentation。
data augmentation:人工增加訓練集的大小. 通過平移, 翻轉, 加噪聲等方法從已有數據中創造出一批"新"的數據
當然這位仁兄介紹的比較仔細,傳送門:http://www.cnblogs.com/love6tao/p/5841648.html,但是這種方法,很容易導致模型過擬合。有沒有一種方法能解決這個問題呢,下面我來介紹一篇CVPR 2016上的文章。
2 論文介紹
論文名字:RIFD-CNN: Rotation-Invariant and Fisher Discriminative Convolutional Neural Networks for Object Detection
當然這篇文章介紹了旋轉不變性改進,和判別改進,但是我這里只介紹一種。
R-CNN模型圖:
它這個模型其實很簡答,前面就是data augmentation. 然后放上傳統的CNN層(VGGNet,AlexNet).是傳統網絡分類層的前一層。本模型是在之間加了
層以保證模型的旋轉不變性。
模型分為兩層:一層data augmentation 和model training.
Data augmentation:給一些列初始的訓練樣本,我們通過旋轉變化得到了一系列新的訓練樣本:
,其中
是正樣本,
是負樣本,
是一些列的k個旋轉角度。
model training:為了達到旋轉不變的特性,文章增加了一個旋轉不變全連接層。
中的m是除了分類層次的所有層數。不像傳統的卷積神經網絡,僅僅優化多項邏輯斯蒂回歸,即y的值是多項的,是大於2分類的(0,1,2)。具體不多說,傳送門,講的很詳細:http://www.docin.com/p-586309778.html
但是本文提出的R-CNN模型,通過加上正則約束項優化一個新的目標函數,以確保訓練樣本在旋轉之前和之后分享相似的特征。
為了減少訓練損耗,直接把之前神經網絡訓練好的參數,帶進去。假設是
層的輸出,
是
的輸出。
是分類層
。
和
的參數。那么我們就可以得到:
其中,
是RELU 和softmax激活函數。關於激活函數我這里就不說了。
那么給出訓練樣本以及他們對應的標簽
,假設總的參數為
和
.
那么就可以得到下面的優化公式:
其中和
為平衡三個目標公式的約束項。其中
為softmax 分類器的損失函數:
. 其中N是訓練樣本個數,K是每個樣本旋轉的次數。
第二,是作為旋轉不變正則化約束項。可以表示為:
是RI-CNN旋轉之后特征的平均值,表示為:
目標函數的第三項作為一個權值衰減組,為了控制權重,防止過擬合。
整個模型的優化都是用隨機梯度下降來優化。
下面貼出這個算法:
總結:算法不是太難,但是想法很好。