# 1.研究背景
我们都喜欢动漫角色,并试图创造我们的定制角色。然而,要掌握绘画技巧需要巨大的努力,之后我们首先有能力设计自己的角色。为了弥补这一差距,动画角色的自动生成提供了一个机会,在没有专业技能的情况下引入定制角色的存在。除了对非专业人士的好处外,专业的创造者还可以利用自动生成来获得动画和游戏角色设计的灵感;Doujin RPG开发者可以使用无版权的面部图像来降低游戏制作的设计成本。
# 2.图片演示
![1.png](a4045c31872372dd2287b79556c37a43.png)
![2.png](878cf8f0af06fdd6f54b2e427ed88fbd.png)
![3.png](75d8681d0ac02da1bd1f8beba17470d4.png)
# 3.视频演示
[基于GAN的动漫头像生成系统(源码&教程)_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1FN4y1P7kw/?spm_id_from=333.999.0.0&vd_source=bc9aec86d164b67a7004b996143742dc)
# 4.项目难点
(1)如何根据用户设置的属性,对GAN的生成结果进行精确控制?(注意GAN是黑盒模型)
(2)模型的生成结果由用户设置的属性和随机噪声(随机数)共同决定。因此,即使设置的属性不变,每次生成的头像都有所差异。那么如何既保证属性控制的精确性,又保证生成头像的随机性?
(3)如何把不同属性的组合,无缝地融合到同一张头像中?
(4)[之前提出的头像生成方法](https://mbd.pub/o/bread/Y5mbmpdq),其输出结果存在模糊和画面混乱的问题,而且生成结果的质量很不稳定。那么,如何让模型生成高质量的头像?如何让模型以较高的成功率输出高质量的结果?
# 5.网络结构
#### 生成器
![image.png](65afc6e58b331afff66f0d1544808ba3.png)
#### 判别器
![image.png](5bd913e751af93abb2dbcb0cf486ce07.png)
# 6.数据集的准备
![6.png](ccaccf5a1ff9e9e7c1c0b51b053eaf51.png)
要想训练出高质量的动漫头像生成模型,其必要前提为:数据集中的插画质量高、绘画风格一致、噪声小。现有的大规模插画数据集虽然提供了大量插画,但存在绘画风格差异巨大、数据集内噪声多等问题。为了避免这些问题,本文选择了一个游戏销售网站上的“游戏人物介绍插画”作为数据来源。
在批量下载的插画中,如何自动找出头像所在区域的坐标?[论文使用基于Local Binary Pattern(LBP)特征的“人脸检测”(Face Detection)算法 \[foot note-6\]](https://afdian.net/item?plan_id=b679c95a599511ed973552540025c377)。为了使检测结果包含发型,将算法输出的检测框(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 layers
class 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 x
class 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 logits
def 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界面](https://s.xiaocichang.com/s/aa1760)
![5.png](bd0d5b5874578d6cca7f6c9ee27a0b15.png)
参考[博客《基于GAN的动漫头像生成系统(源码&教程)》](https://s.xiaocichang.com/s/aa1760)
# 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, B
不会仰游的河马君
- 粉丝: 5506
- 资源: 7711
最新资源
- 红外测距传感器GP2D12与STM32单片机程序,滤波算法,设计步骤和代码流程清晰非常实用 是机器人中最常用的红外测距传感器 程序源码注释详细,非常适合单片机开发人员
- (web安全)逻辑漏洞测试
- 基于二阶锥规划的主动配电网动态最优潮流求解 关键词:配电网优化 二阶锥优化 动态优化 最优潮流 仿真代码:MATLAB YALMIP+CPLEX 优势:代码注释详实,适合参考学习 主要内容:代码主
- 逆变器环流分析,包括Matlab仿真与分析报告
- matlab fft 快速傅里叶变 双边谱,单边谱,相位谱 基于matlab2018b及以上版本实现 对信号做fft,然后绘制其双边谱,单边谱,和对应的相位谱 有详细介绍并附带注释,保证可以运行 附
- 考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化 仿真平台:matlab “双碳”背景下,为提高能源利用率,优化设备的运行灵活性,进一步降低综合能源系统(IES)的碳排放水平,提出一种IES低碳经济
- 蒙特卡洛算法对电动汽车充电负荷模拟 仿真平台:matlab 可自己修改电动汽车数量,lunwen复现 参考lunwen:基于V2G的电动汽车充放电优化调度策略 有注释简单易懂,可随意调整参数
- 非线性观测器,就是磁链观测器,理论上这个比那些估算反电动势的要强得多,也稳定得多 单出Matlab模型(2021b版本),图是直接闭环启动的效果,仿真里面可以做到 在实际硬件中可以做到5%或者更低
- Verilog+PID调节器源码+FPGA+PID自动控制
- COMSOL光学模型:光子晶体线缺陷波导能带分析
- foc滑膜观测器(SMO+PLL)matlab模型,仿真里面是直接0速闭环启动的效果,当然这是仿真,应用到硬件肯定要加开环启动,目前已经在M4的硬件中实现了,效果还不错,现在出这个模型,matlab
- 51单片机开发的直流电机PID 算法控制转速项目,可实现稳定调节设定转速 非常实用的一个项目,包括程序源码和protues 仿真,程序源码注释详细 非常适合单片机开发人员或者电机控制人员
- c#winform WCS上位机控制系统模板 Mysql 数据库 三层架构 wcs仓库控制系统主要用于自动化立体仓库之中,配合wms系统使用,wcs系统协调各种物流设备 如输送机、堆垛机、穿梭车以
- 光伏发电+boost+储能+双向dcdc+并网逆变器控制(低压用户型电能路由器仿真模型)【含个人笔记+建模参考】 包含Boost、Buck-boost双向DCDC、并网逆变器三大控制部分 boost电
- 四层电梯PLC仿真程序 四层简易电梯程序 博途V16版本 【仅供参考学习,请勿商用】
- Bayes-CNN贝叶斯优化卷积神经网络多输入单输出回归预测(Matlab) 1.命令窗口输出MAE、MSE、RMSEP、R^2、RPD和MAPE 2.贝叶斯优化算法优化参数为学习率、批处理样本大小
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈