反卷積(Transposed Convolution)是一種圖像上采樣(UpSample)的方法,在DCGAN中用它來將隨機采樣的值轉換為一張完整的圖像。
“反向卷積也叫轉置卷積,它是一種特殊的正向卷積,先按照一定的比例通過補0來擴大輸入圖像的尺寸,接著旋轉卷積核(Kernel),再進行正向卷積。
反卷積的操作只是恢復了矩陣的尺寸大小,并不能恢復每個元素值。
tf.nn.conv2d_transpose(
input, filters, output_shape, strides, padding='SAME', data_format='NHWC',
dilations=None, name=None
)
Transposed Convolution將Output Size恢復為Input Size,對于Convolution過程,我們知道其Output Size與Input Size的尺寸關系如下:
其中,o為Output Size, i是Input Size, p為Padding Size,s為Stride。
若要將o恢復為i,需考慮2種情況,整除以及不整除兩種情況。
詳細的公式就不推導了,網上有很多資料,有興趣可以深入研究下這些材料:
https://www.cnblogs.com/shine-lee/p/11559825.html
A guide to convolution arithmetic for deep learning
假設我們令輸入圖像為:
卷積核(kernel)為:
如果要使輸出的尺寸是5 x 5,步長stride = 2,tensorflow代碼:
tf.nn.conv2d_transpose(
value=input, filter=kernel,
output_shape=[1,5,5,1],
strides=2, padding='SAME')
Tensorflow的內部做了以下幾件事情:
1)根據步數stride對Input進行填充,即在Input的每個元素之間填充0 ,填充0的個數n與stride的關系為:
這里stride=1,所以在每個元素之間填充一個0。
2)用卷積核kernel對填充后的輸入進行stride=1的正向卷積,輸入尺寸為5 x 5。
如果要使輸出的尺寸是6x6,其它參數不變,tensorflow代碼:
tf.nn.conv2d_transpose(
value=input, filter=kernel,
output_shape=[1,6,6,1],
strides=2, padding='SAME')
卷積類型是same,我們首先在外圍填充一圈0。此時仍然不能生成尺寸為6x6的圖片,Tensorflow會在左上再填充一行和一列0,填充后的輸入為:
對input執行卷積核為3x3的卷積操作,結果如下:
https://github.com/vdumoulin/conv_arithmetic?
https://www.tensorflow.org/api_docs/python/tf/nn/conv2d_transpose?
https://zhuanlan.zhihu.com/p/31988761
https://www.cnblogs.com/shine-lee/p/11559825.html?
https://www.tensorflow.org/tutorials/generative/dcgan?hl=zh-cn
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态