def __call__(self, input):
    """
    Args:
      input: batch_size x image_size x image_size x 3
    Returns:
      output: 4D tensor batch_size x out_size x out_size x 1 (default 1x5x5x1)
              filled with 0.9 if real, 0.0 if fake
    """
    with tf.variable_scope(self.name):
      # convolution layers
      C64 = ops.Ck(input, 64, reuse=self.reuse, norm=None,
          is_training=self.is_training, name='C64')             # (?, w/2, h/2, 64)
      C128 = ops.Ck(C64, 128, reuse=self.reuse, norm=self.norm,
          is_training=self.is_training, name='C128')            # (?, w/4, h/4, 128)
      C256 = ops.Ck(C128, 256, reuse=self.reuse, norm=self.norm,
          is_training=self.is_training, name='C256')            # (?, w/8, h/8, 256)
      C512 = ops.Ck(C256, 512,reuse=self.reuse, norm=self.norm,
          is_training=self.is_training, name='C512')            # (?, w/16, h/16, 512)

      # apply a convolution to produce a 1 dimensional output (1 channel?)
      # use_sigmoid = False if use_lsgan = True
      output = ops.last_conv(C512, reuse=self.reuse,
          use_sigmoid=self.use_sigmoid, name='output')          # (?, w/16, h/16, 1)

    self.reuse = True
    self.variables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=self.name)

    return output
Exemplo n.º 2
0
  def __call__(self, input):
    """
    Args:
      input: batch_size x image_size x image_size x 3
    Returns:
      output: 4D tensor batch_size x out_size x out_size x 1 (default 1x5x5x1)
              filled with 0.9 if real, 0.0 if fake
    """
    with tf.variable_scope(self.name):
      # convolution layers
      C64 = ops.Ck(input, 64, reuse=self.reuse, norm=None,
          is_training=self.is_training, name='C64')             # (b,w,h,3)----(4,4,3,64),s=2-------->(b,w/2,h/2,64)
      C128 = ops.Ck(C64, 128, reuse=self.reuse, norm=self.norm,
          is_training=self.is_training, name='C128')            # (b,w/2,h/2,64)-----(4,4,64,128),s=2------->(b,w/4,h/4,128)
      C256 = ops.Ck(C128, 256, reuse=self.reuse, norm=self.norm,
          is_training=self.is_training, name='C256')            # (b,w/4,h/4,128)-----(4,4,128,256),s=2------->(b,w/8,h/8,256)
      C512 = ops.Ck(C256, 512,reuse=self.reuse, norm=self.norm,
          is_training=self.is_training, name='C512')            # (b,w/8,h/8,256)-----(4,4,256,512),s=2------->(b,w/16,h/16,512)

      # apply a convolution to produce a 1 dimensional output (1 channel?)
      # use_sigmoid = False if use_lsgan = True
      output = ops.last_conv(C512, reuse=self.reuse,
          use_sigmoid=self.use_sigmoid, name='output') # (b,w/16,h/16,512)-----(4,4,512,1),s=1------->(b,w/16,h/16,1)=(1,16,16,1)

    self.reuse = True
    self.variables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=self.name)

    return output
Exemplo n.º 3
0
 def __init__(self,
              scope: str = "Discriminator",
              reg: float = 0.0005,
              norm: str = "instance"):
     super(Discriminator, self).__init__(name=scope)
     self.ck1 = ops.Ck(scope="C64", k=64, reg=reg, norm=norm)
     self.ck2 = ops.Ck(scope="C128", k=128, reg=reg, norm=norm)
     self.ck3 = ops.Ck(scope="C256", k=256, reg=reg, norm=norm)
     self.ck4 = ops.Ck(scope="C512", k=512, reg=reg, norm=norm)
     self.last_conv = ops.last_conv(scope="output", reg=reg)
Exemplo n.º 4
0
    def __call__(self, input):
        """
    Args:
      input: batch_size x image_size x image_size x 3
    Returns:
      output: 4D tensor batch_size x out_size x out_size x 1 (default 1x5x5x1)
              filled with 0.9 if real, 0.0 if fake
    """
        with tf.variable_scope(self.name):
            batch_size = input.get_shape().as_list()[0]
            patch = tf.random_crop(
                input, [batch_size, self.patch_size, self.patch_size, 3
                        ])  # (?, 70, 70, 70)

            # convolution layers
            C64 = ops.Ck(patch,
                         64,
                         reuse=self.reuse,
                         norm=None,
                         is_training=self.is_training,
                         name='C64')  # (?, 35, 35, 64)
            C128 = ops.Ck(C64,
                          128,
                          reuse=self.reuse,
                          norm=self.norm,
                          is_training=self.is_training,
                          name='C128')  # (?, 18, 18, 128)
            C256 = ops.Ck(C128,
                          256,
                          reuse=self.reuse,
                          norm=self.norm,
                          is_training=self.is_training,
                          name='C256')  # (?, 9, 9, 256)
            C512 = ops.Ck(C256,
                          512,
                          reuse=self.reuse,
                          norm=self.norm,
                          is_training=self.is_training,
                          name='C512')  # (?, 5, 5, 512)

            # apply a convolution to produce a 1 dimensional output (1 channel?)
            # use_sigmoid = False if use_lsgan = True
            output = ops.last_conv(C512,
                                   reuse=self.reuse,
                                   use_sigmoid=self.use_sigmoid,
                                   name='output')  # (?, 5, 5, 1)

        self.reuse = True
        self.variables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,
                                           scope=self.name)

        return output
Exemplo n.º 5
0
    def __call__(self, input):
        with tf.variable_scope(self.name):
            C64 = ops.Ck(input,
                         64,
                         reuse=self.reuse,
                         norm=None,
                         is_training=self.is_training,
                         name='C64')
            C128 = ops.Ck(C64,
                          128,
                          reuse=self.reuse,
                          norm=self.norm,
                          is_training=self.is_training,
                          name='C128')
            C256 = ops.Ck(C128,
                          256,
                          reuse=self.reuse,
                          norm=self.norm,
                          is_training=self.is_training,
                          name='C256')
            C512 = ops.Ck(C256,
                          512,
                          reuse=self.reuse,
                          norm=self.norm,
                          is_training=self.is_training,
                          name='C512')

            output = ops.last_conv(C512,
                                   reuse=self.reuse,
                                   use_sigmoid=self.use_sigmoid,
                                   name='output')

        self.reuse = True
        self.variables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,
                                           scope=self.name)

        return output
Exemplo n.º 6
0
 def test_last_conv(self):
     input = tf.placeholder(tf.float32, shape=[64, 256, 256, 32])
     result = ops.last_conv(input, name='LAST_CONV')
     print(result)
    def __call__(self, input):
        """
        Args:
          input: batch_size x image_size x image_size x 3
        Returns:
          output: 4D tensor batch_size x out_size x out_size x 1 (default 1x5x5x1)
                  filled with 0.9 if real, 0.0 if fake
        """

        with tf.variable_scope(self.name):
            if self.patchgan:

                if self.rf == 70:
                    print "using rf=70 patchgan"
                    C32 = ops.Ck(input,
                                 64,
                                 stride=1,
                                 reuse=self.reuse,
                                 norm=None,
                                 is_training=self.is_training,
                                 name='C32')
                    C64 = ops.Ck(C32,
                                 64,
                                 reuse=self.reuse,
                                 norm=self.norm,
                                 is_training=self.is_training,
                                 name='C64')  # (?, w/2, h/2, 64)
                    C128 = ops.Ck(C64,
                                  128,
                                  reuse=self.reuse,
                                  norm=self.norm,
                                  is_training=self.is_training,
                                  name='C128')  # (?, w/4, h/4, 128)
                    C256 = ops.Ck(C128,
                                  256,
                                  reuse=self.reuse,
                                  norm=self.norm,
                                  is_training=self.is_training,
                                  name='C256')  # (?, w/8, h/8, 256)
                    C512_0 = ops.Ck(C256,
                                    512,
                                    reuse=self.reuse,
                                    norm=self.norm,
                                    is_training=self.is_training,
                                    name='C512_0')  # (?, w/16, h/16, 512)

                    # apply a convolution to produce a 1 dimensional output (1 channel?)
                    # use_sigmoid = False if use_lsgan = True
                    output = ops.last_conv(C512_0,
                                           reuse=self.reuse,
                                           use_sigmoid=self.use_sigmoid,
                                           name='output',
                                           kernelsize=4)  # (?, w/16, h/16, 1)
                elif self.rf == 40:
                    print "using rf=40 patchgan"
                    C32 = ops.Ck(input,
                                 32,
                                 stride=1,
                                 reuse=self.reuse,
                                 norm=None,
                                 is_training=self.is_training,
                                 name='C32',
                                 kernelsize=3)
                    C64 = ops.Ck(C32,
                                 64,
                                 stride=1,
                                 reuse=self.reuse,
                                 norm=self.norm,
                                 is_training=self.is_training,
                                 name='C64',
                                 kernelsize=3)  # (?, w/2, h/2, 64)
                    C128 = ops.Ck(C64,
                                  128,
                                  reuse=self.reuse,
                                  norm=self.norm,
                                  is_training=self.is_training,
                                  name='C128')  # (?, w/4, h/4, 128)
                    C256 = ops.Ck(C128,
                                  256,
                                  reuse=self.reuse,
                                  norm=self.norm,
                                  is_training=self.is_training,
                                  name='C256')  # (?, w/8, h/8, 256)
                    C512_0 = ops.Ck(C256,
                                    512,
                                    reuse=self.reuse,
                                    norm=self.norm,
                                    is_training=self.is_training,
                                    name='C512_0')  # (?, w/16, h/16, 512)
                    output = ops.last_conv(C512_0,
                                           reuse=self.reuse,
                                           use_sigmoid=self.use_sigmoid,
                                           name='output',
                                           kernelsize=3)  # (?, w/16, h/16, 1)

                elif self.rf == 21:
                    print "using rf=21 patchgan"
                    C32 = ops.Ck(input,
                                 32,
                                 stride=1,
                                 reuse=self.reuse,
                                 norm=None,
                                 is_training=self.is_training,
                                 name='C32',
                                 kernelsize=3)
                    C64 = ops.Ck(C32,
                                 64,
                                 stride=1,
                                 reuse=self.reuse,
                                 norm=self.norm,
                                 is_training=self.is_training,
                                 name='C64',
                                 kernelsize=3)  # (?, w/2, h/2, 64)
                    C128 = ops.Ck(C64,
                                  128,
                                  reuse=self.reuse,
                                  norm=self.norm,
                                  is_training=self.is_training,
                                  name='C128',
                                  kernelsize=3)  # (?, w/4, h/4, 128)
                    C256 = ops.Ck(C128,
                                  256,
                                  reuse=self.reuse,
                                  norm=self.norm,
                                  is_training=self.is_training,
                                  name='C256',
                                  kernelsize=2)  # (?, w/8, h/8, 256)
                    C512_0 = ops.Ck(C256,
                                    512,
                                    reuse=self.reuse,
                                    norm=self.norm,
                                    is_training=self.is_training,
                                    name='C512_0',
                                    kernelsize=2)  # (?, w/16, h/16, 512)
                    output = ops.last_conv(C512_0,
                                           reuse=self.reuse,
                                           use_sigmoid=self.use_sigmoid,
                                           name='output',
                                           kernelsize=2)  # (?, w/16, h/16, 1)

                elif self.rf == 56:
                    print "using rf=56 patchgan"
                    C32 = ops.Ck(input,
                                 64,
                                 stride=1,
                                 reuse=self.reuse,
                                 norm=None,
                                 is_training=self.is_training,
                                 name='C32',
                                 kernelsize=4)
                    C64 = ops.Ck(C32,
                                 128,
                                 stride=2,
                                 reuse=self.reuse,
                                 norm=self.norm,
                                 is_training=self.is_training,
                                 name='C64',
                                 kernelsize=4)  # (?, w/2, h/2, 64)
                    C128 = ops.Ck(C64,
                                  256,
                                  stride=1,
                                  reuse=self.reuse,
                                  norm=self.norm,
                                  is_training=self.is_training,
                                  name='C128',
                                  kernelsize=3)  # (?, w/4, h/4, 128)
                    C256 = ops.Ck(C128,
                                  512,
                                  stride=2,
                                  reuse=self.reuse,
                                  norm=self.norm,
                                  is_training=self.is_training,
                                  name='C256',
                                  kernelsize=4)  # (?, w/8, h/8, 256)
                    C512_0 = ops.Ck(C256,
                                    1024,
                                    stride=2,
                                    reuse=self.reuse,
                                    norm=self.norm,
                                    is_training=self.is_training,
                                    name='C512_0',
                                    kernelsize=4)  # (?, w/16, h/16, 512)
                    output = ops.last_conv(C512_0,
                                           reuse=self.reuse,
                                           use_sigmoid=self.use_sigmoid,
                                           name='output',
                                           kernelsize=3)  # (?, w/16, h/16, 1)
                elif self.rf == 0:
                    print "using rf=0 wholegan"
                    C32 = ops.Ck(input,
                                 32,
                                 stride=1,
                                 reuse=self.reuse,
                                 norm=None,
                                 is_training=self.is_training,
                                 name='C32')
                    C64 = ops.Ck(C32,
                                 64,
                                 stride=2,
                                 reuse=self.reuse,
                                 norm=self.norm,
                                 is_training=self.is_training,
                                 name='C64')  # (?, w/2, h/2, 64)
                    C128 = ops.Ck(C64,
                                  128,
                                  stride=2,
                                  reuse=self.reuse,
                                  norm=self.norm,
                                  is_training=self.is_training,
                                  name='C128')  # (?, w/4, h/4, 128)
                    C256 = ops.Ck(C128,
                                  256,
                                  stride=2,
                                  reuse=self.reuse,
                                  norm=self.norm,
                                  is_training=self.is_training,
                                  name='C256')  # (?, w/8, h/8, 256)
                    C512 = ops.Ck(C256,
                                  512,
                                  stride=2,
                                  reuse=self.reuse,
                                  norm=self.norm,
                                  is_training=self.is_training,
                                  name='C512')  # (?, w/16, h/16, 512)
                    # C512_0 = ops.Ck(C512, 1024, stride=1, reuse=self.reuse, norm=self.norm,
                    #            is_training=self.is_training, name='C512_0')
                    batchsize = C512.get_shape()[0].value
                    reshaped = tf.reshape(C512, [batchsize, -1])
                    output = tf.layers.dense(reshaped,
                                             1,
                                             name='fc8',
                                             reuse=self.reuse)
                else:
                    print "unknow rf"
                    exit(0)
                if self.gan_mode == 'gan_logits':
                    batchsize = output.get_shape()[0].value
                    output = tf.reshape(
                        output, [batchsize, -1
                                 ])  # may cause error when batchsize is not 1
            else:
                # convolution layers
                C64 = ops.Ck(input,
                             64,
                             stride=2,
                             reuse=self.reuse,
                             norm=None,
                             is_training=self.is_training,
                             name='C64')  # (?, w/2, h/2, 64)
                C128 = ops.Ck(C64,
                              128,
                              stride=2,
                              reuse=self.reuse,
                              norm=self.norm,
                              is_training=self.is_training,
                              name='C128')  # (?, w/4, h/4, 128)
                C256 = ops.Ck(C128,
                              256,
                              stride=2,
                              reuse=self.reuse,
                              norm=self.norm,
                              is_training=self.is_training,
                              name='C256')  # (?, w/8, h/8, 256)
                C512 = ops.Ck(C256,
                              512,
                              stride=2,
                              reuse=self.reuse,
                              norm=self.norm,
                              is_training=self.is_training,
                              name='C512')  # (?, w/16, h/16, 512)
                #C512_0 = ops.Ck(C512, 1024, stride=1, reuse=self.reuse, norm=self.norm,
                #            is_training=self.is_training, name='C512_0')
                batchsize = C512.get_shape()[0].value
                reshaped = tf.reshape(C512, [batchsize, -1])
                output = tf.layers.dense(reshaped,
                                         1,
                                         name='fc8',
                                         reuse=self.reuse)
                if self.use_sigmoid:
                    output = tf.sigmoid(output)

        self.reuse = True
        self.variables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,
                                           scope=self.name)

        return output