1. 程式人生 > >群等變網絡的pytorch實現

群等變網絡的pytorch實現

kernel 叠代 能夠 ant tails 於平 debug con 進行

CNN對於旋轉不具有等變性,對於平移有等變性,data augmentation的提出就是為了解決這個問題,但是data augmentation需要很大的模型容量,更多的叠代次數才能夠在訓練數據集合上對旋轉等變,對於測試集合,也不一定能夠保證等變

可能大家會問,旋轉等變網絡有什麽優點?data augmentation有什麽優點,旋轉等變網絡就有什麽優點,比如,不同方向的狗,轉了一個方向之後還是一個狗,cnn希望經過多層卷積之後的feature也只是轉了一個方向。16年的一篇ICML論文應運而生。

給出鏈接

Group Equivariant Convolutional Networks ,視頻,https://archive.org/details/Redwood_Center_2016_06_27_Taco_Cohen, 代碼:https://github.com/tscohen/GrouPy

這裏給出github上的一個pytorch實現的版本

代碼鏈接:https://github.com/adambielski/pytorch-gconv-experiments,很強

實際上18年有一篇論文講述了如何用群等邊網絡來進行病理圖片的分割,題目為Rotation Equivariant CNNs for Digital Pathology

裏面有一張圖講述群等變網絡講的很清楚,拷貝過來給大家講一下,英文好的還可以看有兩個視頻https://www.youtube.com/watch?time_continue=1586&v=TlzRyHbWeP0

tohen親自講的也有一個:https://archive.org/details/Redwood_Center_2016_06_27_Taco_Cohen

圖片如下

技術分享圖片

上面這個圖表示的是經過旋轉之後的圖片,輸出的feature map具有等變性。

通過debug pytorch的代碼,能夠了解具體操作的過程是,Z2-P4卷積是將kernel旋轉四次,分別與輸入的圖片做卷積,而P4-P4卷積是對於輸出的4個feature map,分別將四個kernel繞著順時針方向轉動90°,同時kernel自身也轉動90°,這樣的四種狀態分別與輸出的不動的feature map分別做卷積,每一種狀態做卷積之後的輸出結果四個相加,這樣為一個featuremap,四個狀態對應4個feature map,即為最終的輸出,那這樣又為什麽會學習到一個旋轉不變的性質呢?因為同一個kernel的四種狀態對於不同的feature map應該是能夠得到一個p4的約束,所以能夠學習到一個旋轉等變的性質

群等變網絡的pytorch實現