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

风格迁移和对抗生成网络

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

在这里插入图片描述
在这里插入图片描述
核心思想

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

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

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

    • 举个栗子:

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

在这里插入图片描述

在这里插入图片描述

模型构建

  • 风格迁移
    在这里插入图片描述
    在这里插入图片描述
    GAN网络:核心:生成器的反卷积!

在这里插入图片描述

生成器:

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()

在这里插入图片描述
最后组合起来:
在这里插入图片描述

实验过程

  1. 风格迁移:
  • 内容图片:
    在这里插入图片描述

  • 风格图片:
    在这里插入图片描述

  • 目标图片:
    在这里插入图片描述

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

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

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

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

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

真值表:

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

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从一开始啥也看不清,最后能稍微辨别出裤子衣服和鞋子,这就是生成器在不断训练进化地证明

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

  • 输入的噪声图片:
    在这里插入图片描述
    在这里插入图片描述

  • 不断训练后修复的图片:
    在这里插入图片描述
    在这里插入图片描述

  • 原始图片:
    在这里插入图片描述
    在这里插入图片描述
    可以看出,修复后的图片虽然和原石图片仍有一些差距,但是与噪声图片相比,确实是恢复了不少的细节

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值