Download ops.py from qninhdt/augan: direct link, hf CLI and curl.
- Browser
- Download file 7.45 kB
-
https://huggingface.co/qninhdt/augan/resolve/main/ops.py
- Command line
-
hf download hf://qninhdt/augan/ops.py
-
curl -L -o ops.py https://huggingface.co/qninhdt/augan/resolve/main/ops.py
7.45 kB
| import tensorflow as tf | |
| # import tensorflow.contrib.slim as slim | |
| import tf_slim as slim | |
| import math | |
| import pprint | |
| pp = pprint.PrettyPrinter() | |
| get_stddev = lambda x, k_h, k_w: 1 / math.sqrt(k_w * k_h * x.get_shape()[-1]) | |
| # import tensorflow.contrib as tf_contrib | |
| # weight_init = tf_contrib.layers.xavier_initializer() | |
| weight_init = tf.initializers.GlorotUniform() | |
| weight_regularizer = None | |
| def batch_norm(x, name="batch_norm"): | |
| # return tf.contrib.layers.batch_norm( | |
| # x, decay=0.9, updates_collections=None, epsilon=1e-5, scale=True, scope=name | |
| # ) | |
| return tf.keras.layers.BatchNormalization( | |
| momentum=0.9, epsilon=1e-5, scale=True, name=name | |
| )(x) | |
| def instance_norm(input, name="instance_norm"): | |
| with tf.compat.v1.variable_scope(name): | |
| depth = input.get_shape()[3] | |
| scale = tf.compat.v1.get_variable( | |
| "scale", | |
| [depth], | |
| initializer=tf.keras.initializers.RandomNormal( | |
| mean=1.0, stddev=0.02, seed=None | |
| ), | |
| ) | |
| offset = tf.compat.v1.get_variable( | |
| "offset", [depth], initializer=tf.constant_initializer(0.0) | |
| ) | |
| mean, variance = tf.nn.moments(input, axes=[1, 2], keepdims=True) | |
| epsilon = 1e-5 | |
| inv = tf.math.rsqrt(variance + epsilon) | |
| normalized = (input - mean) * inv | |
| return scale * normalized + offset | |
| def conv2d(input_, output_dim, ks=4, s=2, stddev=0.02, padding="SAME", name="conv2d"): | |
| with tf.compat.v1.variable_scope(name): | |
| return slim.conv2d( | |
| input_, | |
| output_dim, | |
| ks, | |
| s, | |
| padding=padding, | |
| activation_fn=None, | |
| weights_initializer=tf.keras.initializers.TruncatedNormal(stddev=stddev), | |
| biases_initializer=None, | |
| ) | |
| def deconv2d(input_, output_dim, ks=4, s=2, stddev=0.02, name="deconv2d"): | |
| with tf.compat.v1.variable_scope(name): | |
| return slim.conv2d_transpose( | |
| input_, | |
| output_dim, | |
| ks, | |
| s, | |
| padding="SAME", | |
| activation_fn=None, | |
| weights_initializer=tf.keras.initializers.TruncatedNormal(stddev=stddev), | |
| biases_initializer=None, | |
| ) | |
| def dilated_conv2d( | |
| input_, output_dim, ks=3, s=2, stddev=0.02, padding="SAME", name="conv2d" | |
| ): | |
| with tf.compat.v1.variable_scope(name): | |
| batch, in_height, in_width, in_channels = [int(d) for d in input_.get_shape()] | |
| filter = tf.compat.v1.get_variable( | |
| "filter", | |
| [ks, ks, in_channels, output_dim], | |
| dtype=tf.float32, | |
| initializer=tf.random_normal_initializer(0, stddev), | |
| ) | |
| conv = tf.nn.atrous_conv2d(input_, filter, rate=s, padding=padding, name=name) | |
| return conv | |
| def one_step(x, ch, kernel, stride, name): | |
| return lrelu( | |
| instance_norm( | |
| conv2d(x, ch, kernel, stride, name=name + "_first_c"), name + "_first_bn" | |
| ) | |
| ) | |
| def one_step_dilated(x, ch, kernel, stride, name): | |
| return lrelu( | |
| instance_norm( | |
| dilated_conv2d(x, ch, kernel, stride, name=name + "_first_c"), | |
| name + "_first_bn", | |
| ) | |
| ) | |
| def num_steps(x, ch, kernel, stride, num_steps, name): | |
| for i in range(num_steps): | |
| x = lrelu( | |
| instance_norm( | |
| conv2d(x, ch, kernel, stride, name=name + "_c_" + str(i)), | |
| name + "_bn_" + str(i), | |
| ) | |
| ) | |
| return x | |
| def one_step_noins(x, ch, kernel, stride, name): | |
| return lrelu(conv2d(x, ch, kernel, stride, name=name + "_first_c")) | |
| def num_steps_noins(x, ch, kernel, stride, num_steps, name): | |
| for i in range(num_steps): | |
| x = lrelu(conv2d(x, ch, kernel, stride, name=name + "_c_" + str(i))) | |
| return x | |
| def dis_down(images, kernel_size, stride, n_scale, ch, name): | |
| backpack = images[0] | |
| for i in range(n_scale): | |
| if i == n_scale - 1: | |
| images[i] = num_steps( | |
| backpack, ch, kernel_size, stride, n_scale, name + str(i) | |
| ) | |
| else: | |
| images[i] = one_step_dilated( | |
| images[i + 1], ch, kernel_size, 1, name + str(i) | |
| ) | |
| return images | |
| def dis_down_noins(images, kernel_size, stride, n_scale, ch, name): | |
| backpack = images[0] | |
| for i in range(n_scale): | |
| if i == n_scale - 1: | |
| images[i] = num_steps_noins( | |
| backpack, ch, kernel_size, stride, n_scale, name + str(i) | |
| ) | |
| else: | |
| images[i] = one_step_noins(images[i + 1], ch, kernel_size, 1, name + str(i)) | |
| return images | |
| def final_conv(images, n_scale, name): | |
| for i in range(n_scale): | |
| images[i] = conv2d(images[i], 1, s=1, name=name + str(i)) | |
| return images | |
| def lrelu(x, leak=0.2, name="lrelu"): | |
| return tf.maximum(x, leak * x) | |
| def linear(input_, output_size, scope=None, stddev=0.02, bias_start=0.0, with_w=False): | |
| with tf.compat.v1.variable_scope(scope or "Linear"): | |
| matrix = tf.get_variable( | |
| "Matrix", | |
| [input_.get_shape()[-1], output_size], | |
| tf.float32, | |
| tf.random_normal_initializer(stddev=stddev), | |
| ) | |
| bias = tf.get_variable( | |
| "bias", [output_size], initializer=tf.constant_initializer(bias_start) | |
| ) | |
| if with_w: | |
| return tf.matmul(input_, matrix) + bias, matrix, bias | |
| else: | |
| return tf.matmul(input_, matrix) + bias | |
| def get_ones_like(logit): | |
| target = [] | |
| for i in range(len(logit)): | |
| target.append(tf.ones_like(logit[i])) | |
| return target | |
| def get_zeros_like(logit): | |
| target = [] | |
| for i in range(len(logit)): | |
| target.append(tf.zeros_like(logit[i])) | |
| return target | |
| def conv( | |
| x, | |
| channels, | |
| kernel=4, | |
| stride=2, | |
| pad=0, | |
| pad_type="zero", | |
| use_bias=True, | |
| scope="conv_0", | |
| ): | |
| with tf.compat.v1.variable_scope(scope): | |
| if pad_type == "zero": | |
| x = tf.pad(x, [[0, 0], [pad, pad], [pad, pad], [0, 0]]) | |
| if pad_type == "reflect": | |
| x = tf.pad(x, [[0, 0], [pad, pad], [pad, pad], [0, 0]], mode="REFLECT") | |
| x = tf.layers.conv2d( | |
| inputs=x, | |
| filters=channels, | |
| kernel_size=kernel, | |
| kernel_initializer=weight_init, | |
| kernel_regularizer=weight_regularizer, | |
| strides=stride, | |
| use_bias=use_bias, | |
| ) | |
| return x | |
| def reduce_sum(input_tensor, axis=None, keepdims=False): | |
| try: | |
| return tf.reduce_sum(input_tensor, axis=axis, keepdims=keepdims) | |
| except: | |
| return tf.reduce_sum(input_tensor, axis=axis, keep_dims=keepdims) | |
| def get_shape(inputs, name=None): | |
| name = "shape" if name is None else name | |
| with tf.name_scope(name): | |
| static_shape = inputs.get_shape().as_list() | |
| dynamic_shape = tf.shape(inputs) | |
| shape = [] | |
| for i, dim in enumerate(static_shape): | |
| dim = dim if dim is not None else dynamic_shape[i] | |
| shape.append(dim) | |
| return shape | |
| def show_all_variables(): | |
| model_vars = tf.trainable_variables() | |
| slim.model_analyzer.analyze_vars(model_vars, print_info=True) | |