利用tf.nn.conv2d_transpose实现图片分辨率按指定倍数扩展
2017-06-16 11:26
204 查看
我有输入尺寸为 64x64x3 的图片,即高64, 宽64, 通道数3
我想通过transposed convolution 来使图片的高宽放大到2倍,即 128x128
上述代码运行后,会使输入高宽放大至2倍, 128x128;
如果你想让图片放大至多少倍,则 可以修改strides参数,
如上我的代码中 strides
用的是 [1 , 2 , 2, 1], 这个2就相当于代表了放大倍数(实际上,这是滤波器的滑动步长)
你可以用[ 1, 3, 3, 1] 来实现图片放大至3倍的效果。
实际上,你可以用相对应的tf.nn.conv2d来验证output_shape是否设置的合理
因为,conv2d_transpose 的效果相当于是将conv2d反过来一样,由conv2d的输出到它的输入
如,
运行完上面这段代码,你可以通过比较expected_x的尺寸和 x 的是否一样,来判断conv2d_transpose的output_shape参数设置是否正确
还有一种实现尺寸扩大的方法,注:这里不考虑用线性插值的方法!!!!!
如一图片数据的尺寸, H x W x C 我想让它尺寸扩大
首先,利用卷积的方法,扩展其输出通道至r*r倍,但图像的高宽尺寸不变,
则输出的图片输出尺寸为 H x W x C*r*r
然后,用像素重新排列的方法使图片变为 H*r x W*r x C,达到了尺寸放大r倍的效果
注:这里提到的像素重新排列方法可参考论文 Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network
我还没有实现这个像素重排列的过程,当以后用到再说
我想通过transposed convolution 来使图片的高宽放大到2倍,即 128x128
import tensorflow as tf import numpy as np # 64 64 高宽, 通道数3 x = np.ones((1, 64, 64, 3), dtype=np.float32) # 卷积尺寸, 5x5 ,第一个3代表输出通道数, 第二个3代表输入通道数 w = np.ones((5, 5, 3, 3), dtype=np.float32) out = tf.nn.conv2d_transpose(x, w, (1, 128, 128, 3), [1, 2, 2, 1], padding='SAME') sess = tf.Session() a = sess.run(out) print(a) print(a.shape)
上述代码运行后,会使输入高宽放大至2倍, 128x128;
如果你想让图片放大至多少倍,则 可以修改strides参数,
conv2d_transpose( value, filter, output_shape, strides, padding='SAME', data_format='NHWC', name=None )
如上我的代码中 strides
out = tf.nn.conv2d_transpose(x, w, (1, 128, 128, 3), [1, 2, 2, 1], padding='SAME')
用的是 [1 , 2 , 2, 1], 这个2就相当于代表了放大倍数(实际上,这是滤波器的滑动步长)
你可以用[ 1, 3, 3, 1] 来实现图片放大至3倍的效果。
实际上,你可以用相对应的tf.nn.conv2d来验证output_shape是否设置的合理
因为,conv2d_transpose 的效果相当于是将conv2d反过来一样,由conv2d的输出到它的输入
如,
# 这个out代表上述具有output_shape形状的输出 out = tf.constant(1, shape=[1, 128, 128, 3]) expected_x = tf.nn.conv2d(out, w, strides=[1, 2, 2, 1], pading='SAME')
运行完上面这段代码,你可以通过比较expected_x的尺寸和 x 的是否一样,来判断conv2d_transpose的output_shape参数设置是否正确
还有一种实现尺寸扩大的方法,注:这里不考虑用线性插值的方法!!!!!
如一图片数据的尺寸, H x W x C 我想让它尺寸扩大
首先,利用卷积的方法,扩展其输出通道至r*r倍,但图像的高宽尺寸不变,
则输出的图片输出尺寸为 H x W x C*r*r
然后,用像素重新排列的方法使图片变为 H*r x W*r x C,达到了尺寸放大r倍的效果
注:这里提到的像素重新排列方法可参考论文 Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network
我还没有实现这个像素重排列的过程,当以后用到再说
相关文章推荐
- 利用代码实现Android多分辨率的对应——即一套图片对应多个分辨率
- Py之Crawler:爬虫利用随机选取代理访问服务器的方法实现下载某网址上所有的图片到指定文件夹——Jason niu
- PHP实现html生成pdf、html生成图片 利用wkhtmltox,wkhtmltopdf扩展
- ddpowerzoomer.js利用jQuery扩展,实现对图片局部放大功能(源码分析)
- c#下利用winAPI来实现扩展屏的分辨率设置、方向切换等
- 利用代码实现Android多分辨率的对应——即一套图片对应多个分辨率
- Android中利用Picasso实现图片压缩指定任意尺寸
- 【TensorFlow】tf.nn.conv2d_transpose是怎样实现反卷积的?
- 利用PHOTOSHOP CS 和 脚本实现批量自动处理图片
- 利用鼠标滚轮实现图片缩放
- 利用MFC实现浏览器的定制与扩展
- 浅谈如何利用PB实现图片透明叠加(改编)
- 利用JSP的实现图片的数据库存储和显示
- 利用Wipe等ActiveX技术,实现n(n>>2)幅图片轮换擦洗显
- 利用javascript实现图片动态的放大和缩小
- 利用Wipe等ActiveX技术,实现n(n>>2)幅图片轮换擦洗显
- 利用Wipe等ActiveX技术,实现n(n>>2)幅图片轮换擦洗显示
- 利用httpget实现计划任务访问某一指定页面
- 利用ASP实现在线生成电话图片效果脚本附演示
- 利用javascript从数据库取数据来实现CSDN首页图片的切换效果(新增下载地址)