当前位置:   article > 正文

深度学习之基于DCGAN实现动漫人物的生成_根据照片生成虚拟动态人物代码深度学习

根据照片生成虚拟动态人物代码深度学习

:因为硬件原因,这次的实验并没有生成图片,但是代码应该是没有问题的,可以参考学习一下。
本次基于DCGAN实现动漫人物的生成。最终的效果可以参考大神**K同学啊**的博客。与上篇文章基于DCGAN生成手写数字的步骤基本一致。

1.导入库

import tensorflow as tf
import numpy as np
import glob,imageio,os,PIL,pathlib
import matplotlib.pyplot as plt

# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.数据准备

data_dir = "E:/tmp/.keras/datasets/car_face_photos"
data_dir = pathlib.Path(data_dir)

pic_paths = list(data_dir.glob('*'))
pic_paths = [str(path) for path in pic_paths]
img_count = len(list(pic_paths))#共21551张图片
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
plt.figure(figsize=(10, 5))
plt.suptitle("数据示例", fontsize=15)

for i in range(40):
    plt.subplot(5, 8, i + 1)
    plt.xticks([])
    plt.yticks([])

    # 显示图片
    images = plt.imread(pic_paths[i])
    plt.imshow(images)

plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

查看图片:
在这里插入图片描述
数据预处理:
1.归一化到[-1,1]之间
2.调整图片大小为[64,64]
3.将数据按照batch_size划分开,并打乱

#数据处理
def preprocess_image(image):
    image = tf.image.decode_jpeg(image,channels=3)
    image = tf.image.resize(image,[64,64])
    return (image - 127.5)/127.5
def load_and_preprocess_image(path):
    image = tf.io.read_file(path)
    return preprocess_image(image)

path_ds = tf.data.Dataset.from_tensor_slices(pic_paths)
image_ds = path_ds.map(load_and_preprocess_image,num_parallel_calls=tf.data.experimental.AUTOTUNE)

buffer_size = 60000
batch_size = 256
dataset = image_ds.shuffle(buffer_size).batch(batch_size)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3.生成器与判别器的构建

生成器采用tf.keras.layers.Conv2DTranspose(上采样层)从噪声数据中产生图片。以一个使用该种子作为输入的 Dense 层开始,然后多次上采样直到达到所期望的 64x64x3 的图片尺寸。
除了最后一层使用tanh作为激活函数外,其余的都采用LeakyReLU作为激活函数。

def Geberator_model():
    model = tf.keras.Sequential([])
    model.add(tf.keras.layers.Dense(4*4*1024,use_bias=False,input_shape=(100,)))
    model.add(tf.keras.layers.BatchNormalization())
    model.add(tf.keras.layers.LeakyReLU())
    model.add(tf.keras.layers.Reshape((4,4,1024)))
    assert model.output_shape == (None,4,4,1024)

    #1
    model.add(tf.keras.layers.Conv2DTranspose(512,(5,5)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/423185
推荐阅读
相关标签
  

闽ICP备14008679号