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...