dilated conv、deconv、fractional-strided conv


deconv的其中一個用途是做upsampling,即增大圖像尺寸。

dilated convolution:

dilated conv,中文可以叫做空洞卷積或者擴張卷積。

首先是誕生背景,在圖像分割領域,圖像輸入到CNN(典型的網絡比如FCN[3])中,FCN先像傳統的CNN那樣對圖像做卷積再pooling,降低圖像尺寸的同時增大感受野,但是由於圖像分割預測是pixel-wise的輸出,所以要將pooling后較小的圖像尺寸upsampling到原始的圖像尺寸進行預測(upsampling一般采用deconv反卷積操作)
之前的pooling操作使得每個pixel預測都能看到較大感受野信息。因此圖像分割FCN中有兩個關鍵,一個是pooling減小圖像尺寸增大感受野,另一個是upsampling擴大圖像尺寸。在先減小再增大尺寸的過程中,肯定有一些信息損失掉了,那么能不能設計一種新的操作,不通過pooling也能有較大的感受野看到更多的信息呢?答案就是dilated conv。
(a)圖對應3x3的1-dilated conv,和普通的卷積操作一樣,(b) 圖對應3x3的2-dilated conv,實際的卷積kernel size還是3x3,但是空洞為1,也就是對於一個7x7的圖像patch,只有9個紅色的點和3x3的kernel發生卷積操作,其余的點略過。也可以理解為kernel的size為7x7,但是只有圖中的9個點的權重不為0,其余都為0。 可以看到雖然kernel size只有3x3,但是這個卷積的感受野已經增大到了7x7(如果考慮到這個2-dilated conv的前一層是一個1-dilated conv的話,那么每個紅點就是1-dilated的卷積輸出,所以感受野為3x3,所以1-dilated和2-dilated合起來就能達到7x7的conv),(c)圖是4-dilated conv操作,同理跟在兩個1-dilated和2-dilated conv的后面,能達到15x15的感受野。對比傳統的conv操作,3層3x3的卷積加起來,stride為1的話,只能達到(kernel-1)*layer+1=7的感受野,也就是和層數layer成線性關系,而dilated conv的感受野是指數級的增長。
 
dilated的好處是不做pooling損失信息的情況下,加大了感受野,讓每個卷積輸出都包含較大范圍的信息。在圖像需要全局信息或者語音文本需要較長的sequence信息依賴的問題中,都能很好的應用dilated conv,比如圖像分割[3]、語音合成WaveNet[2]、機器翻譯ByteNet[1]中。簡單貼下ByteNet和WaveNet用到的dilated conv結構,可以更形象的了解dilated conv本身

deconv的其中一個用途是做upsampling,即增大圖像尺寸。而dilated conv並不是做upsampling,而是增大感受野。

可以形象的做個解釋:

對於標准的k*k卷積操作,stride為s,分三種情況:

(1) s>1,即卷積的同時做了downsampling,卷積后圖像尺寸減小;

(2) s=1,普通的步長為1的卷積,比如在tensorflow中設置padding=SAME的話,卷積的圖像輸入和輸出有相同的尺寸大小;

(3) 0<s<1,fractionally strided convolution,相當於對圖像做upsampling。比如s=0.5時,意味着在圖像每個像素之間padding一個空白的像素后,stride改為1做卷積,得到的feature map尺寸增大一倍。

而dilated conv不是在像素之間padding空白的像素,而是在已有的像素上,skip掉一些像素,或者輸入不變,對conv的kernel參數中插一些0的weight,達到一次卷積看到的空間范圍變大的目的。

當然將普通的卷積stride步長設為大於1,也會達到增加感受野的效果,但是stride大於1就會導致downsampling,圖像尺寸變小。大家可以從以上理解到deconv,dilated conv,pooling/downsampling,upsampling之間的聯系與區別,歡迎留言溝通交流。

 

DCGAN[5]中使用deconv就更自然了,本身GAN就需要generative model,需要通過deconv從特定分布的輸入數據中生成圖片。GAN這種模式被Yann LeCun特別看好,認為是unsupervised learning的一個未來。

 

fractional-strided convolution:

反卷積有時候也被叫做Fractionally Strided Convolution,翻譯過來大概意思就是小數步長的卷積。對於步長 s>1的卷積,我們可能會想到其對應的反卷積步長 s′<1。

對於反卷積操作的小數步長我們可以理解為:在其輸入特征單元之間插入 s−1 個0,插入0后把其看出是新的特征輸入,然后此時步長 s′ 不再是小數而是為1。

詳見網址:https://my.oschina.net/u/3702502/blog/1803358 http://www.mamicode.com/info-detail-2321005.html


免責聲明!

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



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