def build_model(x, scale, training, reuse): hidden_size = 128 bottleneck_size = 64 x = tf.layers.conv2d(x, hidden_size, 1, activation=None, name='in', reuse=reuse) for i in range(6): x = util.crop_by_pixel( x, 1) + conv(x, hidden_size, bottleneck_size, training, 'lr_conv' + str(i), reuse) if (scale == 4): scale = 2 x = tf.image.resize_nearest_neighbor( x, tf.shape(x)[1:3] * scale) + tf.layers.conv2d_transpose( util.lrelu(x), hidden_size, scale, strides=scale, activation=None, name='up1', reuse=reuse) x = util.crop_by_pixel(x, 1) + conv(x, hidden_size, bottleneck_size, training, 'up_conv', reuse) x = tf.image.resize_nearest_neighbor( x, tf.shape(x)[1:3] * scale) + tf.layers.conv2d_transpose( util.lrelu(x), hidden_size, scale, strides=scale, activation=None, name='up2', reuse=reuse) else: x = tf.image.resize_nearest_neighbor( x, tf.shape(x)[1:3] * scale) + tf.layers.conv2d_transpose( util.lrelu(x), hidden_size, scale, strides=scale, activation=None, name='up', reuse=reuse) for i in range(4): x = util.crop_by_pixel( x, 1) + conv(x, hidden_size, bottleneck_size, training, 'hr_conv' + str(i), reuse) x = util.lrelu(x) x = tf.layers.conv2d(x, 3, 1, activation=None, name='out', reuse=reuse) return x
def make_patches(hr_image, lr_image, scale, resize): hr_image = tf.stack(flip([hr_image])) lr_image = tf.stack(flip([lr_image])) hr_image = util.crop_by_pixel(hr_image, 12) lr_image = util.crop_by_pixel(lr_image, 12 / scale) hr_patches = util.image_to_patches(hr_image) if resize: lr_image = util.resize_func(lr_image, tf.shape(hr_image)[1:3]) lr_patches = util.image_to_patches(lr_image) else: lr_patches = util.image_to_patches(lr_image, scale) return hr_patches, lr_patches
def build_model(x, scale, training, reuse): hidden_size = 128 bottleneck_size = 64 x = tf.layers.conv2d(x, hidden_size, 1, activation=None, name='in', reuse=reuse) for i in range(6): x = util.crop_by_pixel( x, 1) + conv(x, hidden_size, bottleneck_size, training, 'lr_conv' + str(i), reuse) x = util.lrelu(x) if scale == 4: scale = 2 x = tf.layers.conv2d_transpose(x, hidden_size, scale, strides=scale, activation=None, name='up1', reuse=reuse) x = util.crop_by_pixel(x, 1) + conv(x, hidden_size, bottleneck_size, training, 'up_conv', reuse) x = util.lrelu(x) hidden_size = 64 x = tf.layers.conv2d_transpose(x, hidden_size, scale, strides=scale, activation=None, name='up2', reuse=reuse) else: hidden_size = 64 x = tf.layers.conv2d_transpose(x, hidden_size, scale, strides=scale, activation=None, name='up', reuse=reuse) for i in range(4): x = util.crop_by_pixel( x, 1) + conv(x, hidden_size, bottleneck_size, training, 'hr_conv' + str(i), reuse) x = util.lrelu(x) x = tf.layers.conv2d(x, 3, 1, activation=None, name='out', reuse=reuse) return x
def build_model(x, scale, training, reuse): hidden_size = 128 bottleneck_size = 32 survival_rate = 0.5 survival_rate = tf.constant(survival_rate, name='survival_rate') x = tf.layers.conv2d(x, hidden_size, 1, activation=None, name='in', reuse=reuse) for i in range(5): x = util.crop_by_pixel( x, 1) + conv(x, hidden_size, bottleneck_size, training, 'lr_conv' + str(i), reuse) x = tf.nn.relu(x) x = tf.layers.conv2d_transpose(x, hidden_size, scale, strides=scale, activation=None, name='up', reuse=reuse) print(x.get_shape().as_list()) for i in range(5): shortcut = util.crop_by_pixel(x, 1) # print shortcut.get_shape().as_list() resblock = conv(x, hidden_size, bottleneck_size, training, 'hr_conv_share', reuse=None if i == 0 else True) if training: survival_roll = tf.random_uniform(shape=[], minval=0.0, maxval=1.0, name='suvival' + str(i)) survive = tf.less(survival_roll, survival_rate) dummy_zero = tf.zeros_like(resblock) x = tf.cond(survive, lambda: tf.add(shortcut, resblock), lambda: tf.add(dummy_zero, shortcut)) else: x = tf.add(tf.mul(resblock, survival_rate), shortcut) x = tf.nn.relu(x) x = tf.layers.conv2d(x, 3, 1, activation=None, name='out', reuse=reuse) return x
def build_model(x, scale, training, reuse): hidden_size = 128 bottleneck_size = 32 x = tf.layers.conv2d(x, hidden_size, 1, activation=None, name='in', reuse=reuse) for i in range(10): x = util.crop_by_pixel(x, 1) + conv(x, hidden_size, bottleneck_size, training, 'conv' + str(i), reuse) x = tf.nn.relu(x) x = tf.layers.conv2d(x, 3, 1, activation=None, name='out', reuse=reuse) return x
lr_image_padded = util.pad_boundary(lr_image) sr_image = model.build_model(lr_image_padded - 0.5, FLAGS.scale, training=False, reuse=False) sr_image = util.crop_center(sr_image, hr_image_shape) if data.residual: if data.resize: sr_image += lr_image else: sr_image += util.resize_func(lr_image, hr_image_shape) sr_image = sr_image * tf.uint8.max + 0.5 sr_image = tf.saturate_cast(sr_image, tf.uint8) sr_image = tf.cast(sr_image, tf.float32) sr_image = sr_image * (1.0 / tf.uint8.max) sr_image = util.crop_by_pixel(sr_image, FLAGS.scale + 6) hr_image = util.crop_by_pixel(hr_image, FLAGS.scale + 6) error = tf.losses.mean_squared_error(hr_image, sr_image) init = tf.global_variables_initializer() init_local = tf.local_variables_initializer() saver = tf.train.Saver() error_acc = .0 psnr_acc = .0 acc = 0 with tf.Session() as sess: sess.run(init_local) if tf.gfile.Exists( FLAGS.model_file) or tf.gfile.Exists(FLAGS.model_file + '.index'): saver.restore(sess, FLAGS.model_file)