美文网首页
"ColorGAN":paper code学

"ColorGAN":paper code学

作者: HellyCla | 来源:发表于2018-09-19 10:42 被阅读86次

    2018-09-03关于CycleGAN优化发现

    Augmented CycleGAN: Learning Many-to-Many Mappings
    from Unpaired Data

    多对多映射的CycleGAN。
    很有道理。
    很多场景可以具有多种特征形态,单纯的映射为单一状态,并不完全合理。
    也许我们可以利用这个特征,来训练,从恢复的多个状态中选择一个最合适的作为结果来处理。

    CycleGAN代码优化实现的版本

    2018-09-05代码学习笔记

    命令行学习神器
    关于映射填充
    关于在tensorflow中读取数据

    2018-09-11 关于urllib3的使用

    曾经的urllib2在python36环境下已经下载不到了
    只能有urllib3
    对于网页数据集下载,从:

    f=urllib2.urlopen(url)
    return json.loads(f.read())
    

    变成

    def list_categories(tag):
        url = 'http://lsun.cs.princeton.edu/htbin/list.cgi?tag=' + tag
        pool = urllib3.PoolManager()
        f = pool.urlopen('GET', url)
        return json.loads(f.data.decode('utf-8'))
    

    2018-09-14关于卷积中的细节

    conv2d(
        input,
        filter,
        strides,
        padding,
        use_cudnn_on_gpu=None,
        data_format=None,
        name=None
    )
    
    1. input是一个4d输入[batch_size, in_height, in_width, n_channels],表示图片的批数,大小和通道。
    2. filter是一个4d输入[filter_height, filter_width, in_channels, out_channels],表示kernel的大小,输入通道数和输出通道数,其中输出通道数表示从上一层提取多少特征
      参考
      讲的超级无敌清楚的卷积细节
      image.png

    卷积层尺寸的计算原理

    • 输入矩阵格式:四个维度,依次为:样本数、图像高度、图像宽度、图像通道数
    • 输出矩阵格式:与输出矩阵的维度顺序和含义相同,但是后三个维度(图像高度、图像宽度、图像通道数)的尺寸发生变化。
    • 权重矩阵(卷积核)格式:同样是四个维度,但维度的含义与上面两者都不同,为:卷积核高度、卷积核宽度、输入通道数、输出通道数(卷积核个数)
    • 输入矩阵、权重矩阵、输出矩阵这三者之间的相互决定关系
      • 卷积核的输入通道数(in depth)由输入矩阵的通道数所决定。(红色标注)
      • 输出矩阵的通道数(out depth)由卷积核的输出通道数所决定。(绿色标注)
      • 输出矩阵的高度和宽度(height, width)这两个维度的尺寸由输入矩阵、卷积核、扫描方式所共同决定。计算公式如下。(蓝色标注)
    image.png

    tesorflow中的激活函数

    所有激活函数 输入 和 输出 的维度是一样的

    tf.nn.relu()
    tf.nn.sigmoid()
    tf.nn.tanh()
    tf.nn.elu()
    tf.nn.bias_add()
    tf.nn.crelu()
    tf.nn.relu6()
    tf.nn.softplus()
    tf.nn.softsign()
    tf.nn.dropout()
    tf.nn.relu_layer(x, weights, biases,name=None)
    def relu_layer(x, weights, biases, name=None):
      """Computes Relu(x * weight + biases).
      Args:
        x: a 2D tensor.  Dimensions typically: batch, in_units
        weights: a 2D tensor.  Dimensions typically: in_units, out_units
        biases: a 1D tensor.  Dimensions: out_units
        name: A name for the operation (optional).  If not specified
          "nn_relu_layer" is used.
      Returns:
        A 2-D Tensor computing relu(matmul(x, weights) + biases).
        Dimensions typically: batch, out_units.
      """
    

    2018-09-15函数笔记

    激活函数

    image.png
    • 红色:ReLU
    • 蓝色:Tanh
    • 绿色:Sigmoid
    • 紫色:Linear

    tf.reshape(tensor,shape, name=None)

    函数的作用是将tensor变换为参数shape的形式。.
    其中shape为一个列表形式,特殊的一点是列表中可以存在-1。-1代表的含义是不用我们自己指定这一维的大小,函数会自动计算,但列表中只能存在一个-1。

    tf.gradients

    tf.gradients(ys, xs, 
                 grad_ys=None, 
                 name='gradients',
                 colocate_gradients_with_ops=False,
                 gate_gradients=False,
                 aggregation_method=None,
                 stop_gradients=None)
    

    对求导函数而言,其主要功能即求导公式:∂y/∂x。在tensorflow中,y和x都是tensor。
    更进一步,tf.gradients()接受求导值ys和xs不仅可以是tensor,还可以是list,形如[tensor1, tensor2, …, tensorn]。当ys和xs都是list时,它们的求导关系为:
    1.tf.gradients()实现ys对xs求导
    2.求导返回值是一个list,list的长度等于len(xs)

    3.假设返回值是[grad1, grad2, grad3],ys=[y1, y2],xs=[x1, x2, x3]。则,真实的计算过程为: . image.png

    2018-09-15代码研究-improved_wgan

    在colorGAN中关于损失计算部分,improved_wgan主要是增加一个梯度惩罚项,gradients_penalty_lamda为系数,默认是10。

            #discriminator_wgan # on sigmoid = no prob
            self.logits_real = self.discriminator_wgan(self.images, config=config)
            self.logits_fake = self.discriminator_wgan(self.generate_image, reuse=True, config=config)
    
            #w-distance
            self.g_loss = -tf.reduce_mean(self.logits_fake)
            self.d_loss = -tf.reduce_mean(self.logits_real - self.logits_fake)
    
            #improved wgan
            if config.improved_wgan:
                alpha = tf.random_uniform(
                    shape=[config.batch_size, 1],
                    minval=0.,
                    maxval=1.,
                    dtype=tf.float32
                    )
                differences = self.generate_image - self.images
                interpolates = self.images+(alpha*differences)
                gradients = tf.gradients(self.discriminator_wgan(interpolates, reuse=True, config=config), [interpolates])[0]
                slopes = tf.sqrt(tf.reduce_sum(tf.square(gradients), reduction_indices=[1]))
                self.gradient_penalty = tf.reduce_mean((slopes-1.)**2)
                self.d_loss+=config.gradient_penalty_lambda*self.gradient_penalty
    
            self.total_loss = self.d_loss + self.g_loss
    

    2018-09-15论文与实现对比

    https://arxiv.org/pdf/1702.06674.pdf

    Generator
    • noise Z应该是只连接前半部分网络,代码中并未有额外的处理。
    • channels: 128->64->64->64->32->2(UV图)


      Discriminator
    • 代码实现情况一致

    2018-09-17 今日代码细节

    关于在 RGB2YUV 转换时的报错:
    ValueError: dot (64,64) (3,3) dim 64 != dim 3
    经过imge.shape查验是数据集中存在灰度图,大部分图像是(64,64,3),小部分混入灰度图导致矩阵乘法失败,单通道本身无法进行多通道的转换。

    • 踩坑:
    1. image.ndim 无法正确检测通道
    2. image.shape[2] 在shape[2]缺失的情况下,无法正确表示出真正的通道数,出错原因是缺维,而不是第三维的值不是3.
    3. len(image.shape)==2 是表明是第三维缺失的情况,符合报错情况。
    • 解决:
      判断异常非三通道图片并从数据集中移除
    import cv2
    import os
    import shutil
    from glob import glob
    from scipy import misc
    import matplotlib.pyplot as plt
    
    #No use
    # def isGray(img):
    #     if img.ndim == 3:
    #         return False
    #     else:
    #         return True
    
    
    if __name__ == '__main__':
        data = glob(os.path.join("./data/", "colorImage/", "*.JPEG"))
        print(len(data))
        image_file = data[:len(data)]
        counter = 0
        for one_image in image_file:
            img = misc.imread(one_image)
            if len(img.shape) < 3:
                print(img.shape)
                counter += 1
                os.remove(one_image)
                print("delete %d",counter)
        print(counter)
        print(len(data))
    
    

    相关文章

      网友评论

          本文标题:"ColorGAN":paper code学

          本文链接:https://www.haomeiwen.com/subject/egwbnftx.html