1.研究背景

我们都喜欢动漫角色,并试图创造我们的定制角色。然而,要掌握绘画技巧需要巨大的努力,之后我们首先有能力设计自己的角色。为了弥补这一差距,动画角色的自动生成提供了一个机会,在没有专业技能的情况下引入定制角色的存在。除了对非专业人士的好处外,专业的创造者还可以利用自动生成来获得动画和游戏角色设计的灵感;Doujin RPG开发者可以使用无版权的面部图像来降低游戏制作的设计成本。

2.图片演示

3.视频演示

基于GAN的动漫头像生成系统(源码&教程)_哔哩哔哩_bilibili

4.项目难点

(1)如何根据用户设置的属性,对GAN的生成结果进行精确控制?(注意GAN是黑盒模型)
(2)模型的生成结果由用户设置的属性和随机噪声(随机数)共同决定。因此,即使设置的属性不变,每次生成的头像都有所差异。那么如何既保证属性控制的精确性,又保证生成头像的随机性?
(3)如何把不同属性的组合,无缝地融合到同一张头像中?
(4)之前提出的头像生成方法,其输出结果存在模糊和画面混乱的问题,而且生成结果的质量很不稳定。那么,如何让模型生成高质量的头像?如何让模型以较高的成功率输出高质量的结果?

5.网络结构

生成器

判别器

6.数据集的准备

要想训练出高质量的动漫头像生成模型,其必要前提为:数据集中的插画质量高、绘画风格一致、噪声小。现有的大规模插画数据集虽然提供了大量插画,但存在绘画风格差异巨大、数据集内噪声多等问题。为了避免这些问题,本文选择了一个游戏销售网站上的“游戏人物介绍插画”作为数据来源。

在批量下载的插画中,如何自动找出头像所在区域的坐标?论文使用基于Local Binary Pattern(LBP)特征的“人脸检测”(Face Detection)算法 [foot note-6]。为了使检测结果包含发型,将算法输出的检测框(bounding box)放大为原来的1.5倍。

一个值得思考的问题:当拥有了带有属性标注的头像数据集之后,为什么还需要训练头像自动生成模型?“数据集”能否代替“自动生成模型”? {*}
(1)理论上,当数据集的规模趋于无限大,使得每种可能的属性组合都包含大量例子时,可能不太需要再训练自动生成模型。但实际上,随着属性数量的增多,可能出现的属性组合数会呈爆炸式增长!而高质量头像的设计和绘制需要较高成本,所以不太可能拥有如此大规模的数据集。
另外,笔者认为应该从“创新”(而不是“模仿”)的角度来思考这一问题:
(2)GAN生成器以随机噪声作为输入,使得即使设置的属性完全相同,每次生成的结果也会发生微小但随机的变化。这是图片总数固定的数据集所无法实现的。
(3)GAN能够生成数据集中不存在的属性组合。例如数据集中分别有蓝发的头像和绿眼的头像,但没有蓝发绿眼的头像。而经过训练后,GAN能够生成蓝发绿眼的头像。(前提是GAN已充分学习了蓝发的特征和绿眼的特征。)
(4)GAN能学习训练集中不同图像的“特征”(“特征”包括但不限于所标注的属性),并将来自不同图像的特征无缝融合在一张生成结果中。所以,GAN能够“创造”数据集中不存在的头像。
(5)GAN可以实现“两幅头像间的插值”和“头像渐变动画”。(下文将进行介绍)

6.代码实现

import  tensorflow as tf
from    tensorflow import keras
from    tensorflow.keras import layersclass Generator(keras.Model):def __init__(self):super(Generator, self).__init__()# z: [b, 100] => [b, 3*3*512] => [b, 3, 3, 512] => [b, 64, 64, 3]self.fc = layers.Dense(3*3*512)self.conv1 = layers.Conv2DTranspose(256, 3, 3, 'valid')self.bn1 = layers.BatchNormalization()self.conv2 = layers.Conv2DTranspose(128, 5, 2, 'valid')self.bn2 = layers.BatchNormalization()self.conv3 = layers.Conv2DTranspose(3, 4, 3, 'valid')def call(self, inputs, training=None):# [z, 100] => [z, 3*3*512]x = self.fc(inputs)x = tf.reshape(x, [-1, 3, 3, 512])x = tf.nn.leaky_relu(x)#x = tf.nn.leaky_relu(self.bn1(self.conv1(x), training=training))x = tf.nn.leaky_relu(self.bn2(self.conv2(x), training=training))x = self.conv3(x)x = tf.tanh(x)return xclass Discriminator(keras.Model):def __init__(self):super(Discriminator, self).__init__()# [b, 64, 64, 3] => [b, 1]self.conv1 = layers.Conv2D(64, 5, 3, 'valid')self.conv2 = layers.Conv2D(128, 5, 3, 'valid')self.bn2 = layers.BatchNormalization()self.conv3 = layers.Conv2D(256, 5, 3, 'valid')self.bn3 = layers.BatchNormalization()# [b, h, w ,c] => [b, -1]self.flatten = layers.Flatten()self.fc = layers.Dense(1)def call(self, inputs, training=None):x = tf.nn.leaky_relu(self.conv1(inputs))x = tf.nn.leaky_relu(self.bn2(self.conv2(x), training=training))x = tf.nn.leaky_relu(self.bn3(self.conv3(x), training=training))# [b, h, w, c] => [b, -1]x = self.flatten(x)# [b, -1] => [b, 1]logits = self.fc(x)return logitsdef main():d = Discriminator()g = Generator()x = tf.random.normal([2, 64, 64, 3])z = tf.random.normal([2, 100])prob = d(x)print(prob)x_hat = g(z)print(x_hat.shape)if __name__ == '__main__':main()

7.系统整合

下图源码&环境部署视频教程&数据集&自定义UI界面

参考博客《基于GAN的动漫头像生成系统(源码&教程)》

8.参考文献


[1] Martin Arjovsky and Leon Bottou. Towards principlled methods for training generative adversarial networks.arXiv preprint arXiv:1701.04862,2017.
[2] Martin Arjovsky, Soumith Chintala, and Leon Bottou. Wasserstein gan. arXiv preprint arXiv:1701.07875,2017.
[3] Sanjeev Arora,Rong Ge,Yingyu Liang,TengyuMa, and Yi Zhang. Generalization and equilibrium in
generative adversarial nets (gans). arXivpreprint arXiv:1703.00573,2017.
[4] Marc G Bellemare,Ivo Danihelka, Will Dabney,Shakir Mohamed, Balaji Lakshminarayanan, Stephan
Hoyer, and Remi Munos. The cramer distance as a sollution to biased wasserstein gradients. arXiv preprint arXiv:1705.10743,2017.
[5] Ian Goodfellow,Jean Pouget-Abadie,Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron
Courville, and Yoshua Bengio. Generative adversarial nets. In Advances in neural information processing systems, pages 2672-2680,2014.
[6] Ishaan Gulrajani, Faruk Ahmed, Martin Arjovsky, Vincent Dumoulin, and Aaron Courville. Improved
training of wasserstein gans. arXiv preprint arXiv:1704.00028,2017.
[7] Martin Heusel,Hubert Ramsauer,Thomas Unterthiner, Bernhard Nessler, Günter Klambauer, and Sepp
Hochreiter. Gans trained by a two time-scale update rule converge to a nash equilibrium. arXiv preprint arXiv:1706.08500,2017.
[8] Hiroshiba. Girl friend factory.
[9] Phillip Isola, Jun-Yan Zhu, Tinghui Zhou, and Alexei A Efros. Image-to-image translation with conditional
adversarial networks. arXiv preprint arXiv:1611.07004,2016.
[10] Diederik Kingma and Jimmy Ba. Adam: Amethod for stochastic optimization. arXiv preprint
arXiv:1412.6980,2014.
[11] Naveen Kodali,Jacob Abernethy,James Hays,and Zsolt Kira. How to train your dragan. arXiv preprint
arXiv:1705.07215,2017.

基于GAN的动漫头像生成系统(源码&教程)相关推荐

  1. 基于DCGAN的动漫头像生成

    基于DCGAN的动漫头像生成 数据 数据集:动漫图库爬虫获得,经过数据清洗,裁剪得到动漫头像.分辨率为3 * 96 * 96,共5万多张动漫头像的图片,从知乎用户何之源处下载. 生成器:输入为随机噪声 ...

  2. 基于JAVA国产精品动漫网站计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA国产精品动漫网站计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA国产精品动漫网站计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  3. 基于Java毕业设计传统文化知识竞赛系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计传统文化知识竞赛系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计传统文化知识竞赛系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S ...

  4. PHP随机静态页面生成系统源码雨尘SEO系统

    介绍: PHP随机静态页面生成系统源码雨尘SEO系统v1.3 一款随机静态页面生成系统,一秒钟可生成上千条单页面,批量生成单页用来做SEO是非常不错的源码. 雨尘SEO静态页面生成系统源码v1.3版本 ...

  5. PHP二维码在线制作生成系统源码 无需数据库 带logo图标

    简介: PHP二维码在线制作生成系统源码 无需数据库 带logo图标 网盘下载地址: http://kekewl.net/Myae89V9DX00 图片:

  6. PHP随机静态页面生成系统源码雨尘SEO系统v1.3

    介绍: PHP随机静态页面生成系统源码雨尘SEO系统v1.3 一款随机静态页面生成系统,一秒钟可生成上千条单页面,批量生成单页用来做SEO是非常不错的源码.雨尘SEO静态页面生成系统源码v1.3版本, ...

  7. 基于Java毕业设计校园外卖零食商城系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计校园外卖零食商城系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计校园外卖零食商城系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S ...

  8. java ssm框架论文,基于SSM框架的个人博客系统(源码+论文)

    需求分析 使用spring+springmvc+mybatis实现一个个人博客系统,可以记录个人生活日志, 进行技术分享, 并且浏览者可以对博客进行阅览与评论 本站提供了其他类型的 在线个人博客网站源 ...

  9. 收款码在线生成系统源码 无限制

    截图 收款码在线生成系统源码 无限制 说明 之后用过两个收款码生成系统,一个是收款啦,还有一个是优启梦收款码,前面一个用起来挺方便的,就是二维码识别得比较慢,自己想改接口但是没学过php也做不了什么. ...

最新文章

  1. 外包三年,我废了..…
  2. Python学习笔记-进度条
  3. Gitflow工作流程
  4. VS2015 打包添加系统必备组件
  5. 【直播预告】计算机视觉中数据增强原理和实践
  6. linux环境搭建golang服务器,Linux下golang环境搭建-Go语言中文社区
  7. 初一级模拟赛总结(3.15)
  8. 如果删除github上项目的文件
  9. 隐马尔可夫模型HMM[转载牛人,看了半天没看懂]
  10. 如何开发神经网络来预测电离层中的干扰
  11. Practical JAVA(三)关于final
  12. 使用opencv和python进行智能图像处理pdf_OpenCV图像处理编程实例 PDF 高清版
  13. 阿里云数据库(RDS)是什么,与传统数据库有什么区别?
  14. linux下搭建游戏服务器运行环境
  15. 使用itchat监控微信消息,从此不再为撤回烦恼
  16. 如何合理管理您的时间呢?
  17. 7-2 江学长的游戏
  18. 根据文件名修改文件(创业天使-xxx 120101_超清.mp4 -- 120101-创业天使-xxx.mp4)
  19. 大学生的小乐趣:HTML制作MacOS Dock栏
  20. ElGamal算法实现

热门文章

  1. 一文详解java线程池 详解Java线程池的七个参数 详解池化技术 java如何选择核心线程数 详解Java线程池的拒绝策略
  2. Armhf 中安装 ROS Indigo 的方法
  3. LTR_retriever: 一个更加准的LTR整合分析工具
  4. 四川有哪些计算机平面设计学校,四川设计类专科学校排名
  5. 【TypeScript】TS安装与使用
  6. 使用keil下载芯唐固件报错
  7. 全网最新!你根本就不会用百度网盘,下载不限速12M/s,附教程!
  8. windows训练自己的语义分割
  9. 卡罗拉 (COROLLA) 2017 款 改款 1.6 L S-CVT GL - 音响控制
  10. FME工具助力多源基础地理数据融合