轉置卷積的詳細理解

1.圖像卷積

圖2
一樣地,卷積的時候須要對卷積核進行180的旋轉,同時卷積核中心與需計算的圖像像素對齊,輸出結構爲中心對齊像素的一個新的像素值,計算例子以下
圖3
這樣計算出左上角(即第一行第一列)像素的卷積後像素值。
 
給出一個更直觀的例子,從左到右看,原像素通過卷積由1變成-8。
圖4
經過滑動卷積核,就能夠獲得整張圖片的卷積結果,
圖5
    到了這裏,大體能夠明白圖像卷積。可是咱們能夠看出,經過圖像卷積後,新圖像的大小跟原來同樣,或者變小。圖2計算後圖像大小不變,如圖5卷積後圖像變小是由於沒有對所用像素進行卷積計算。可是1維的卷積結果不是變大了嗎? 下面對其解釋。
 
    在matlb中對2維卷積的計算分爲了3類,1.full   2.same   3. valid   參考:https://cn.mathworks.com/help/matlab/ref/conv2.html?requestedDomain=www.mathworks.com
圖2對應的卷積就是就是所謂的same,圖5對應的就是valid。那麼full又是什麼呢?以下圖
圖6

    圖6中藍色爲原圖像,白色爲對應卷積所增長的padding,一般所有爲0,綠色是卷積後圖片。圖6的卷積的滑動是從卷積核右下角與圖片左上角重疊開始進行卷積,滑動步長爲1,卷積核的中心元素對應卷積後圖像的像素點。能夠看到卷積後的圖像是4X4,比原圖2X2大了,咱們還記1維卷積大小是n1+n2-1,這裏原圖是2X2,卷積核3X3,卷積後結果是4X4,與一維徹底對應起來了。其實這纔是完整的卷積計算,其餘比它小的卷積結果都是省去了部分像素的卷積。下面是WIKI對應圖像卷積後多出部分的解釋:html

Kernel convolution usually requires values from pixels outside of the image boundaries. There are a variety of methods for handling image edges.意思就是多出來的部分根據實際狀況能夠有不一樣的處理方法。(其實這裏的full卷積就是後面要說的反捲積)網絡

 

這裏,咱們能夠總結出full,same,valid三種卷積後圖像大小的計算公式:
1.full: 滑動步長爲1,圖片大小爲N1xN1,卷積核大小爲N2xN2,卷積後圖像大小:N1+N2-1 x N1+N2-1
如圖6, 滑動步長爲1,圖片大小爲2x2,卷積核大小爲3x3,卷積後圖像大小:4x4
2.same: 滑動步長爲1,圖片大小爲N1xN1,卷積核大小爲N2xN2,卷積後圖像大小:N1xN1
3.valid:滑動步長爲S,圖片大小爲N1xN1,卷積核大小爲N2xN2,卷積後圖像大小:(N1-N2)/S+1 x (N1-N2)/S+1
如圖5,滑動步長爲1,圖片大小爲5x5,卷積核大小爲3x3,卷積後圖像大小:3x3
 

2.轉置卷積(通常叫反捲積,可是不是很準確)

    這裏提到的反捲積跟1維信號處理的反捲積計算是很不同的,FCN做者稱爲backwards convolution,有人稱Deconvolution layer is a very unfortunate name and should rather be called a transposed convolutional layer. 咱們能夠知道,在CNN中有con layer與pool layer,con layer進行對圖像卷積提取特徵,pool layer對圖像縮小一半篩選重要特徵,對於經典的圖像識別CNN網絡,如IMAGENET,最後輸出結果是1X1X1000,1000是類別種類,1x1獲得的是。FCN做者,或者後來對end to end研究的人員,就是對最終1x1的結果使用反捲積(事實上FCN做者最後的輸出不是1X1,是圖片大小的32分之一,但不影響反捲積的使用)。
    這裏圖像的反捲積與圖6的full卷積原理是同樣的,使用了這一種反捲積手段使得圖像能夠變大,FCN做者使用的方法是這裏所說反捲積的一種變體,這樣就能夠得到相應的像素值,圖像能夠實現end to end。
不說一些理論的了,下面是一些推導:
這裏的 c 中的第一行對應卷積核首次卷積的位置( 卷積核未涉及到的位置爲0 , 因此從左往右出現 )

 

相關文章
相關標籤/搜索