『計算機視覺』棋盤效應


零、轉置卷積介紹

『TensotFlow』轉置卷積

TensorFlow轉置卷積API詳解

一、棋盤效應

當我們要用到深度學習來生成圖像的時候,是往往是基於一個低分辨率且具有高層語義的圖像。這會使得深度學習來對這種低分辨率圖像進行填充細節。一般來說,為了執行從低分辨率圖像到高分辨率圖像之間的轉換,我們往往要進行deconvolution。簡單來說,deconvolution layer可以允許模型通過每一個點進行繪制高分辨率圖像上的一個方塊,這種情況的產生與deconvolution的stride、kernel size有關。

問題產生:kernel size無法被stride整除

stride為1,kernel size為3,這導致了重復上采樣繪圖的部分不均勻(下圖深色部分),

 

二維情況更為嚴重,

思路一:多層重復轉置卷積

一個常見的想法是寄希望於多層重復轉置卷積,希望能抵消掉棋盤效應,但是實際上一般事與願違,

重復的結構使得棋盤更加復雜。

思路二:stride為1的轉置卷積

此時可以很好地解決這個問題,

但是……轉置卷積的意義在於上采樣,stride為1還上采毛線……,所以一般會用於卷積棧的末尾作為調整,不過效果有限,

思路三:調整kernel權重分布

加大無重疊部分的權重分布可以很好的解決的這個問題,原理如下圖:

但是這種做法會極大地限制模型的學習能力(避免棋盤效應往往會降低模型容量,會使得模型變得更大從而使得難以訓練。原文的話是指: Avoiding artifacts significantly restricts the possible filters, sacrificing model capacity)

二、更好的上采樣

方法一:采取可以被stride整除的kernel size

該方案較好的應對了棋盤效應問題,但是仍不夠圓滿,因為一旦我們的kernel學習不均勻,仍然會產生棋盤效應,

在上圖中,我們的weight並不夠平衡,這直接導致了輸出的棋盤效應。

即便如此,采用這個思路去設計網絡仍然是必要的

方法二:插值

可以直接進行插值resize操作,然后再進行卷積操作。這種操作在超分辨率文獻中很常見。例如,我們可以采取近鄰插值或者樣條插值來進行上采樣。

有關上圖的三個矩陣不是很理解,不過方法給了,就是先插值再卷積,這在我之前的項目DCGAN_TensorFlow有應用, 可以參考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM