def encode_decode(self, x_var, x_exemplar, reuse=False): with tf.variable_scope("encode_decode") as scope: if reuse == True: scope.reuse_variables() x_var = tf.concat([x_var, x_exemplar], axis=3) conv1 = tf.nn.relu( instance_norm(conv2d(x_var, output_dim=64, k_w=7, k_h=7, d_w=1, d_h=1, name='e_c1'), scope='e_in1')) conv2 = tf.nn.relu( instance_norm(conv2d(conv1, output_dim=128, k_w=4, k_h=4, d_w=2, d_h=2, name='e_c2'), scope='e_in2')) conv3 = tf.nn.relu( instance_norm(conv2d(conv2, output_dim=256, k_w=4, k_h=4, d_w=2, d_h=2, name='e_c3'), scope='e_in3')) r1 = Residual(conv3, residual_name='re_1') r2 = Residual(r1, residual_name='re_2') r3 = Residual(r2, residual_name='re_3') r4 = Residual(r3, residual_name='re_4') r5 = Residual(r4, residual_name='re_5') r6 = Residual(r5, residual_name='re_6') g_deconv1 = tf.nn.relu(instance_norm(de_conv(r6, output_shape=[self.batch_size, self.output_size/2, self.output_size/2, 128], name='gen_deconv1'), scope="gen_in")) # for 1 g_deconv_1_1 = tf.nn.relu(instance_norm(de_conv(g_deconv1, output_shape=[self.batch_size, self.output_size, self.output_size, 32], name='g_deconv_1_1'), scope='gen_in_1_1')) g_deconv_1_1_x = tf.concat([g_deconv_1_1, x_var], axis=3) x_tilde1 = conv2d(g_deconv_1_1_x, output_dim=self.channel, k_w=7, k_h=7, d_h=1, d_w=1, name='gen_conv_1_2') return tf.nn.tanh(x_tilde1)
def encode_decode(self, x, reuse=False): with tf.variable_scope("encode_decode") as scope: if reuse == True: scope.reuse_variables() conv1 = tf.nn.relu( instance_norm(conv2d(x, output_dim=64, k_w=7, k_h=7, d_w=1, d_h=1, name='e_c1'), scope='e_in1')) conv2 = tf.nn.relu( instance_norm(conv2d(conv1, output_dim=128, k_w=4, k_h=4, d_w=2, d_h=2, name='e_c2'), scope='e_in2')) conv3 = tf.nn.relu( instance_norm(conv2d(conv2, output_dim=256, k_w=4, k_h=4, d_w=2, d_h=2, name='e_c3'), scope='e_in3')) r1 = Residual(conv3, residual_name='re_1') r2 = Residual(r1, residual_name='re_2') r3 = Residual(r2, residual_name='re_3') r4 = Residual(r3, residual_name='re_4') r5 = Residual(r4, residual_name='re_5') r6 = Residual(r5, residual_name='re_6') g_deconv1 = tf.nn.relu( instance_norm(de_conv(r6, output_shape=[ self.batch_size, self.output_size / 2, self.output_size / 2, 128 ], name='gen_deconv1'), scope="gen_in")) # for 1 g_deconv_1_1 = tf.nn.relu( instance_norm(de_conv(g_deconv1, output_shape=[ self.batch_size, self.output_size, self.output_size, 64 ], name='g_deconv_1_1'), scope='gen_in_1_1')) g_deconv_1_1_x = tf.concat([g_deconv_1_1, x], axis=3) x_tilde1 = conv2d(g_deconv_1_1_x, output_dim=self.channel, k_w=7, k_h=7, d_h=1, d_w=1, name='gen_conv_1_2') # for 2 g_deconv_2_1 = tf.nn.relu( instance_norm(de_conv(g_deconv1, output_shape=[ self.batch_size, self.output_size, self.output_size, 64 ], name='g_deconv_2_1'), scope='gen_in_2_1')) g_deconv_2_1_x = tf.concat([g_deconv_2_1, x], axis=3) x_tilde2 = conv2d(g_deconv_2_1_x, output_dim=self.channel, k_w=7, k_h=7, d_h=1, d_w=1, name='gen_conv_2_2') # for 3 g_deconv_3_1 = tf.nn.relu( instance_norm(de_conv(g_deconv1, output_shape=[ self.batch_size, self.output_size, self.output_size, 64 ], name='gen_deconv3_1'), scope='gen_in_3_1')) g_deconv_3_1_x = tf.concat([g_deconv_3_1, x], axis=3) g_deconv_3_2 = conv2d(g_deconv_3_1_x, output_dim=32, k_w=3, k_h=3, d_h=1, d_w=1, name='gen_conv_3_2') x_tilde3 = conv2d(g_deconv_3_2, output_dim=3, k_h=3, k_w=3, d_h=1, d_w=1, name='gen_conv_3_3') # for 4 g_deconv_4_1 = tf.nn.relu( instance_norm(de_conv(g_deconv1, output_shape=[ self.batch_size, self.output_size, self.output_size, 64 ], name='gen_deconv4_1'), scope='gen_in_4_1')) g_deconv_4_1_x = tf.concat([g_deconv_4_1, x], axis=3) g_deconv_4_2 = conv2d(g_deconv_4_1_x, output_dim=32, k_w=3, k_h=3, d_h=1, d_w=1, name='gen_conv_4_2') x_tilde4 = conv2d(g_deconv_4_2, output_dim=3, k_h=3, k_w=3, d_h=1, d_w=1, name='gen_conv_4_3') # for 5 g_deconv_5_1 = tf.nn.relu( instance_norm(de_conv(g_deconv1, output_shape=[ self.batch_size, self.output_size, self.output_size, 64 ], name='gen_deconv5_1'), scope='gen_in_5_1')) g_deconv_5_1_x = tf.concat([g_deconv_5_1, x], axis=3) g_deconv_5_2 = conv2d(g_deconv_5_1_x, output_dim=32, k_w=3, k_h=3, d_h=1, d_w=1, name='gen_conv_5_2') x_tilde5 = conv2d(g_deconv_5_2, output_dim=3, k_h=3, k_w=3, d_h=1, d_w=1, name='gen_conv_5_3') # for 6 g_deconv_6_1 = tf.nn.relu( instance_norm(de_conv(g_deconv1, output_shape=[ self.batch_size, self.output_size, self.output_size, 64 ], name='gen_deconv6_1'), scope='gen_in_6_1')) g_deconv_6_1_x = tf.concat([g_deconv_6_1, x], axis=3) g_deconv_6_2 = conv2d(g_deconv_6_1_x, output_dim=32, k_w=3, k_h=3, d_h=1, d_w=1, name='gen_conv_6_2') x_tilde6 = conv2d(g_deconv_6_2, output_dim=3, k_h=3, k_w=3, d_h=1, d_w=1, name='gen_conv_6_3') # for 7 g_deconv_7_1 = tf.nn.relu( instance_norm(de_conv(g_deconv1, output_shape=[ self.batch_size, self.output_size, self.output_size, 64 ], name='g_deconv_7_1'), scope='gen_in_7_1')) g_deconv_7_1_x = tf.concat([g_deconv_7_1, x], axis=3) x_tilde7 = conv2d(g_deconv_7_1_x, output_dim=self.channel, k_w=7, k_h=7, d_h=1, d_w=1, name='gen_conv_7_2') # for 8 g_deconv_8_1 = tf.nn.relu( instance_norm(de_conv(g_deconv1, output_shape=[ self.batch_size, self.output_size, self.output_size, 64 ], name='g_deconv_8_1'), scope='gen_in_8_1')) g_deconv_8_1_x = tf.concat([g_deconv_8_1, x], axis=3) x_tilde8 = conv2d(g_deconv_8_1_x, output_dim=self.channel, k_w=7, k_h=7, d_h=1, d_w=1, name='gen_conv_8_2') return tf.nn.tanh(x_tilde1), tf.nn.tanh(x_tilde2), tf.nn.tanh(x_tilde3), \ tf.nn.tanh(x_tilde4), tf.nn.tanh(x_tilde5), tf.nn.tanh(x_tilde6), tf.nn.tanh(x_tilde7), tf.nn.tanh(x_tilde8)