深度学习——基于TensorFlow的生成模型实验

风格迁移和对抗生成网络

  • 风格迁移:风格迁移,就是在开始前使用两张图片,一张图片作为风格图片,一张图片作为内容图片,我们将风格图片的风格和内容图片的内容提取出来,通过我们的网络模型进行训练,将其组合成一个新的图片,新的突破保留了风格图片的风格,也保留了内容图片的内容

深度学习——基于TensorFlow的生成模型实验_第1张图片
深度学习——基于TensorFlow的生成模型实验_第2张图片
核心思想

  1. 提取图片内容
  2. 给图片施加风格(纹理)
  • GAN网络:GAN网络,又叫对抗生成神经网络,因为对抗的意义就是——不服就是干(GAN)!

    • 该网络由两个部分组成:

      • 生成器(Generator):生成图片
      • 鉴定器(Discriminator):鉴定图片
    • 其原理就是,生成器生成的图片会送到鉴定器中去做鉴定,如果鉴定器鉴定为假,那么生成器就得继续生成图片,直到鉴定为真,而我们的目的,就是让生成器和鉴定器做对抗,为了能够生成鉴定为真的图片,生成器网络就会不断地训练自己,让自己变得强大,让自己生成的图片尽可能的靠近真的图片,而这个过程就是一个对抗的过程,所以又叫对抗生成神经网络,又有点类似于进化论的意思,神经网络,也是能够在不断地训练进化的!

    • 举个栗子:

      • 鸟和虫的对抗:众所周知,早起的鸟儿有虫吃,虫子被吃多了,要反抗,怎么办,就开始进化,让自己的身体的颜色融入环境,形成保护自己不被鸟发现的手段,那虫子都进化了,鸟没东西吃了咋办,就得让自己的眼力变得更好、更强、更能发现虫子的踪迹,不断地对抗博弈、不断地进化

深度学习——基于TensorFlow的生成模型实验_第3张图片

深度学习——基于TensorFlow的生成模型实验_第4张图片

模型构建

  • 风格迁移
    深度学习——基于TensorFlow的生成模型实验_第5张图片
    深度学习——基于TensorFlow的生成模型实验_第6张图片
    GAN网络:核心:生成器的反卷积!

深度学习——基于TensorFlow的生成模型实验_第7张图片

生成器:

generator_input= keras.Input(shape=(latent_dim,))  # latent_dim= 32
x = layers.Dense(128 * 16 * 16)(generator_input) 
x = layers.LeakyReLU()(x) 
x = layers.Reshape((16, 16, 128))(x) 
x = layers.Conv2DTranspose(256, 4, strides=2, padding='same')(x) 
x = layers.LeakyReLU()(x) 
x = layers.Conv2D(256, 5, padding='same')(x) 
x = layers.LeakyReLU()(x) 
x = layers.Conv2D(256, 5, padding='same')(x) 
x = layers.LeakyReLU()(x) 
x = layers.Conv2D(3, 7, activation='tanh', padding='same')(x)
generator = keras.models.Model(generator_input, x) 
generator.summary()

在这里插入图片描述

鉴别器:

discriminator_input= layers.Input(shape=(height, width, channels)) 
x = layers.Conv2D(128, 3)(discriminator_input) 
x = layers.LeakyReLU()(x) 
x = layers.Conv2D(128, 4, strides=2)(x) 
x = layers.LeakyReLU()(x) 
x = layers.Conv2D(128, 4, strides=2)(x) 
x = layers.LeakyReLU()(x) 
x = layers.Conv2D(128, 4, strides=2)(x) 
x = layers.LeakyReLU()(x) 
x = layers.Flatten()(x) 
x = layers.Dropout(0.4)(x) 
x = layers.Dense(1, activation='sigmoid')(x) 
discriminator = keras.models.Model(discriminator_input, x) 
discriminator.summary()

深度学习——基于TensorFlow的生成模型实验_第8张图片
最后组合起来:
深度学习——基于TensorFlow的生成模型实验_第9张图片

实验过程

  1. 风格迁移:
  • 内容图片:
    深度学习——基于TensorFlow的生成模型实验_第10张图片

  • 风格图片:

  • 目标图片:
    深度学习——基于TensorFlow的生成模型实验_第11张图片

  1. GAN网络
  • 实现该网络有几个重要步骤:

    • 定义一个鉴定器,并且训练鉴定器,让鉴定器拥有能够区别真图和假图的功能

    • 定义一个生成器,让生成器能够生成图片

    • 将生成器和鉴定器连接,组成一个新的神经网络,让生成器的输出图片作为鉴定器的输入图片,对图片进行鉴定

    • 将整个神经网络的结果判为真,即输出的图片为真,鉴定器的鉴定结果也为真,所以生成器的输出结果也会不断地朝真的方向训练,使得其输出的图片逐渐靠近真相

真值表:

神经网络 = 鉴定器 ∩ 生成器,现在已知神经网络和鉴定器的值为真,所以可以求出生成器的值也应该为真,所以生成器的真值在训练的过程中会不断地向1靠近

神经网络 鉴定器 生成器
1 1 x→1

深度学习——基于TensorFlow的生成模型实验_第12张图片
深度学习——基于TensorFlow的生成模型实验_第13张图片
深度学习——基于TensorFlow的生成模型实验_第14张图片
从一开始啥也看不清,最后能稍微辨别出裤子衣服和鞋子,这就是生成器在不断训练进化地证明

  1. 图像修复:
  • 从GAN网络中我们知道,训练的最后,生成器已经可以根据输入图片而自动的恢复一些特征,让图片变得更靠近原始图片,这就是图像修复的功能

  • 输入的噪声图片:
    深度学习——基于TensorFlow的生成模型实验_第15张图片
    深度学习——基于TensorFlow的生成模型实验_第16张图片

  • 不断训练后修复的图片:
    深度学习——基于TensorFlow的生成模型实验_第17张图片
    深度学习——基于TensorFlow的生成模型实验_第18张图片

  • 原始图片:
    深度学习——基于TensorFlow的生成模型实验_第19张图片
    深度学习——基于TensorFlow的生成模型实验_第20张图片
    可以看出,修复后的图片虽然和原石图片仍有一些差距,但是与噪声图片相比,确实是恢复了不少的细节

你可能感兴趣的:(深度学习,tensorflow,神经网络)