예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
    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)