轉置卷積(pytorch)

2021-10-03 18:55:28 字數 2679 閱讀 4862

nn.convtranspose2d(in_channels, out_channels, kernel_size=3, stride=2, padding=1, dilation=1, output_padding=1)

作用:進行轉置卷積,用於上取樣

設原本影象大小為in∗

inin*in

in∗i

n,影象的padding為1,經過乙個為ker

nelkernel

kernel

_s iz

esize

size

為3,卷積的dil

atio

ndilation

dilati

on為1的給定卷積核,得到乙個特徵圖大小為out

∗out

out*out

out∗ou

t,而這個轉置卷積就是用於將當前out

∗out

out*out

out∗ou

t的特徵圖上取樣成in∗

inin*in

in∗in,pad

ding

,str

ing,

kern

elpadding,string,kernel

paddin

g,st

ring

,ker

nel​_size,dilation 都是指原來的影象經過的卷積操作的引數,從而變成大小當前的特徵圖。out_padding用於防止stride大於1的時候1對多的現象。

卷積運算時,卷積核元素之間的距離,如果dilation不為1,卷積核的作用點更加分散,最後輸出的特徵圖會更小,大小等於用**kernel_size+(dilation-1)*(kernel_size-1)**大小的卷積核得到的特徵圖

假設現在有乙個卷積核3*3,stride = 2;那麼乙個5x5的圖,經過卷積得到的大小為2x2,乙個6x6的圖經過卷積也是2x2,那給定2x2的特徵圖,經過轉置卷積要恢復到哪個size呢?

卷積輸出的特徵圖計算公式為out

=in+

2∗pa

ddin

g−ke

rnel

size

stri

de+1

out = \frac + 1

out=st

ride

in+2

∗pad

ding

−ker

nels

ize​

+1這裡的除法一般都是下取整,所以導致上面的問題。

現在逆卷積要做的是給定out和卷積核的引數,恢復in,那麼將公式變換一下

i n=

(out

−1)∗

stri

de−2

∗pad

ding

+ker

nels

izein = (out - 1)*stride -2*padding + kernelsize

in=(ou

t−1)

∗str

ide−

2∗pa

ddin

g+ke

rnel

size

但是為了防止上面的現象,多加了乙個out_padding引數,可以自己指定恢復的大小,新的公式變成

i n=

(out

−1)∗

stri

de−2

∗pad

ding

+ker

nels

ize+

outp

addi

ngin = (out - 1)*stride -2*padding + kernelsize + outpadding

in=(ou

t−1)

∗str

ide−

2∗pa

ddin

g+ke

rnel

size

+out

padd

ing

因此現在無論原來是否發生下整除現象,我們都可以指定恢復原來的大小。

就上述的例子,如果原來是5x5,那麼我們令out_padding為0(原來是剛好整除的),如果原來是6x6,那麼我們令out_padding為1,就代入公式就得到6了。這裡的out_padding最多是str

ide−

1stride - 1

stride

−1,因為進行下取整最多捨去stride-1,因此有了這個引數一定可以恢復成原來指定的大小。

一般為了保持卷積same模式(in=

stri

de∗o

utin = stride*out

in=str

ide∗

out),我們令padding = (kernelsize-1)/2,out_padding = kersize - 1,帶入式子就可以得到in=

stri

de∗o

utin = stride*out

in=str

ide∗out

反卷積 轉置卷積

搞明白了卷積網路中所謂deconv到底是個什麼東西後,不寫下來怕又忘記,根據參考資料,加上我自己的理解,記錄在這篇部落格裡。第一次看到deconv這個詞,以為deconv的結果就是卷積的逆,覺得神奇,不禁產生了 哦?轉置的卷積就可以求逆了嗎?這樣的想法,然後在matlab裡面實驗求證,我還記得當時以...

轉置卷積 反卷積

借鑑於此個部落格,寫的非常好 轉置卷積 transposed convolution 也叫做反卷積 deconvolution pytorch中可以使用torch.nn.convtranspose2d 來呼叫,caffe中對應的轉置卷積層為deconv layer 作用 在 中用於對影象上取樣。操作...

轉置卷積個人理解(以pytorch為例)

直觀理解就是卷積的反向操作,比如4 4的用3 3的卷積核卷積,s 1,p 0,得到2 2的大小,反卷積就是要使輸入2 2的輸出為4 4的。在pytorch使用 class torch.nn.convtranspose2d in channels,out channels,kernel size,st...