如何通过DCGAN实现动漫人物图像的自动生成

您所在的位置:网站首页 动漫画像图片 如何通过DCGAN实现动漫人物图像的自动生成

如何通过DCGAN实现动漫人物图像的自动生成

2024-01-15 12:50| 来源: 网络整理| 查看: 265

背景

基于生成对抗网络(GAN)的动漫人物生成近年来兴起的动漫产业新技术。传统的GAN模型利用反向传播算法,通过生成器和判别器动态对抗,得到一个目标生成模型。由于训练过程不稳定,网络难以收敛,导致生成的图像缺乏多样性和准确性,甚至会产生模式崩溃。本文基于深度学习,参考相关实战项目pytorch-book,学习网络的训练方法,采用经过标准化处理和分类的动漫人物面部图像知乎用户何之源分享的素材,训练DCGAN,实现动漫人物图像自动生成。在训练过程中,控制实验参数,进行定量分析和优化,得到可自动生成动漫人物图像的生成器模型。主要工作如下:

设计DCGAN网络模型。对课题中所涉及到GAN原理、优化器等技术进行分析,并根据DCGAN的基本原则设计面向动漫人物生成的神经网络。 建立图像样本库。采集40000张动漫人物图像,按照比例随机分为训练集和测试集,并利用数据集对DCGAN进行无监督训练以及测试。 实现并训练DCGAN网络。使用Pytorch作为DCGAN的框架,利用Vidsom将图像生成过程的可视化,完成目标网络的构造以及训练。在训练过程中,控制实验参数,进行定量分析和优化,得到一组高质量网络参数。

背景及意义

随着二次元文化逐渐走进大众视野,各种动漫作品所塑造的角色已经成为一种特殊的文化符号。但是,由于动漫本身复杂的性质,其对于制作成本,质量,创意都有较高的要求,导致动漫行业频频出现投入高,收益低的现象。由于生成对抗网络(GAN)在图像生成领域和视频生成领域具有巨大的发展潜力,许多研究者尝试从GAN入手,实现动漫图像的自动生成,为创作者带来了灵感,还节省了巨额创作开支。

目前已有的动漫图像生成方式主要分为两种,第一种,是基于已有的真实人脸图片,进行人脸风格迁移,U-GAT-IT项目利用图像处理将原始图像内容与动漫风格相融合,实现动漫风格转换,如图1.1所示。虽然风格迁移技术已经有丰富研究成果,但有一些缺陷依然无法避免,例如:生成的卡通图像表情单一、面部特征畸变、网络结构复杂等问题。

图 1.1(a)(b) 热力图 (c)动漫图像

第二种方法,是将已有的动漫人物图像,输入到训练好的生成对抗神经网络模型中,对动漫图像的面部进行特征提取,最后训练出一组网络模型,实现自动生成新的动漫人物图像,如图1.2所示。DCGAN模型一般为五层,相较于传统的GAN模型更加稳定,生成的图像也更具有多样性,更能满足创作者的需求。

图 1.2自动生成的动漫人物图像

1、基于GAN的图像处理研究现状

深度学习领域在近几年取得了重大突破,其中大部分研究成果都基于感知技术,计算机通过模仿人类的思维方式,感知物体、识别内容。生成对抗网络的理念由Goodfellow于2014年提出的,它的发展历程只有六年,却对人工智领域带来了极大的冲击。

GAN的博弈过程,就是使用生成器制造的数据分布来拟合真实的数据分布。设置是一个生成动漫图片的网络,接收一个随机的噪声,生成动漫图片并输出。设置为判别网络,输入一张动漫图片,判别器可以计算出该图为生成的或真实图片的概率。两者分别根据返回的结果反向更新网络,相互抗衡,动态变化最后达到纳什均衡。

基于GAN性能的优越性,该模型逐渐被运用到图像处理领域的各个方向,其中包括图片转换、图像修复、风格迁移、图像生成等。例如:2016年Phillip Isola等人设计的pix2pixGAN[4]模型,可以将语义图片转换为街景和建筑的照片、素描图转彩色图片等,在图像转换领域实现了重大突破。

原始的GAN网络虽然在2014年才首次提出,但其扩展速度迅猛,产生了大量衍生网络,如:DCGAN、SGAN、ACGAN等。2015年Mattya首次提出了chainerGAN,通过DCGAN实现动漫人物生成,但Chainer框架并未得到大范围应用。随后,Jie Lei等人在2017年发表了Animegan,该项目使用GAN框架,提出了三种新的损失函数:灰度风格loss、灰度对抗loss、色彩重构loss,将各类现实场景下的图像转化为动漫风格的图像,例如自然风景、道路街景的转换。但遗憾的是,这些项目对于非计算机领域的爱好者使用具有一定难度,产生了局限性。

2017年,复旦大学和CMU的学生共同发布了一项名为MakeGirlsMore的动漫人物生成项目,发布后在Github受到广泛关注。该项目使用 React.js作为页面基本框架,为了提高项目的实用性,开发者将Chainer模型转化为基于WebAssembly的Java 模型。用户可以在浏览器的界面上设置动漫人物的相关参数,例如:眼睛颜色、面部表情、发型等信息,实现动漫人物的自动生成。

1.2、训练方案

首先,建立图像样本库需要大量动漫图像,可使用Python在动漫素材相关网站爬取或使用网络上已有的数据集,按照固定比例划分训练集和测试集,并对样本进行标准化处理,使图像大小保持,每一张图片拥有唯一ID。

其次,选择CNN作为DCGAN的基础网络,对CNN的池化层和全连接层进行调整。DCGAN是一种深度卷积网络,可以实现目标特征提取以及图像分类。在定义DCGAN中的生成网络和判别网络时,通过增加ReLU、Sigmoid等激活函数用于参数处理、图像分类等工作。

在训练网络之前,使用Pytorch作为框架,Python作为编程语言完成代码编写,利用Adam优化器最小化损失函数,优化程序调整超参数。训练网络时,使用Visdom实现训练过程的可视化,通过控制学习率、迭代次数、训练比例等参数,设置多组对照实验,观察实验结果并利用测试集进行多次测试。

将多组实验结果进行对比分析,可得到一组最优网络参数,利用训练好的目标网络模型,便可输出多张不同的动漫图像,技术路线如图1.3所示:

图1.3 技术路线图

2 神经网络及GAN相关技术介绍

2.1、神经网络相关概念

计算机网络中的神经元是神经网络基本组成单位,它的结构参考了生物神经元。1943年McCulloch等人提出了神经元模型M-P。对于神经网络的发展有着重要的影响。M-P抽象模型如图2.1所示:

图2.1 神经元结构模型

结合图2.1来看,神经元的输入输出关系用有向箭头来表示,输入信号可以用Xi表示,输出用Y来表示, Wi表示权重。多个神经元可以通过设定的连接关系组合成为神经网络。

目前,神经网络根据工作原理可以分为人工神经网络和生物神经网络,在计算机领域中,人工神经网络的原理是利用计算机模拟大脑的工作方式。下图2.2展示了神经网络主要类别,本文的DCGAN模型就是基于多层神经网络CNN实现的。

图2.2 神经网络主要类别 

单层感知器模型前馈神经网络最经典的模型,该模型与1957年由Frank Rosenblatt提出,可实现二类线性分类。将神经元节点添加在网络的输入、输出位置,作为网络的输入单元和输出单元。输入单元的功能是传输数据,输出单元实现对上一层的输入进行计算功能。下图2.3为第一代神经网络感知模型:

图2.3 第一代神经网络模型

由于第一代神经网络模型不能适用于处理异或问题,仅局限于线性可分问题。所以直至20 世纪 80 年代中期,分布式并行处理(Parallel Distributed Pro-cessing ,PDP)模型开始受到广泛关注。反向传播算法也逐渐成为 PDP 模型的主要学习算法这时,神经网络才又开始引起人们的注意,并重新成为新的研究热点[7]。第二代神经网络结构也应运而生,如图2.4所示:

图2.4 第二代神经网络结构图

2006年Geoffrey Hinton提出了深度网络,通过大量数据训练神经元间的权重,让整个网络按照最大概率来生成数据,是一种概率生成模型,能够通过学习表示高阶抽象的复杂函数,可以使用它来识别特征、分类数据、生成数据等。

▐  卷积神经网络

卷积神经网络(convolutional neural network,CNN)是指至少在网络的一层中使用卷积运算来代替一般的矩阵乘法运算的神经网络[18]。第一个卷积神经网络是Alexander Waibel在1987年提出的时延神经网络(TDNN),但是直到2012年ImageNet竞赛之前,CNN才重新走进人们的视野。目前常用的CNN结构是由多个卷积层、池化层、全连接层组合构成的。如图 2.5 所示

图2.5 神经网络结构图

卷积层主要通过卷积核进行图像局部特征提取,其神经元按照宽度,高度和深度的排列方式,适用于彩色图像的RGB三色通道结构,因此它的排列方式又称为三维排列。避免了传统的感知器模型纬度较低的问题,可以更好地生成于高分辨率的图像,卷积层的各个参数设置影响卷积神经网络的性能,网络的精度和卷积层数呈正相关。

激活层一般常使用ReLU激活函数,它可以缓解梯度消失问题,通过将特征图映射到新的特征空间,提高模型鲁棒性、非线性表达能力。

池化层的主要作用是进行特征选择。池化层可以通过下采样过程,对于特征图进行融合和降维,相较于卷积层降低了计算量,避免了信息冗余。常用最大池化法和平均池化法。

全连接层用于将前一层输出的局部特征,重新连接成完整的图,可以将卷积神经网络的尾部重新拟合,减少特征信息的损失。

▐  卷积运算

卷积(Convolution)的过程是在图像每个位置进行线性变换映射成新值的过程。本节主要讨论卷积运算在图像处中的运用。卷积运算主要是通过特征提取器(滤波器)对图片进行特征提取,例如图像的线条、结构等,降低深层网络模型的复杂度。其下列公式2.1、2.2可表示多层神经,上下层之间的关系:

上式2.1、2.2中有几个重要参数,W1:卷积前图像的宽度;W2:卷积后特征图的宽度;H1:卷积前图像的宽度;H2:卷积后特征图高度 ;S:步长(Stride),卷积核在滑动时的间隔;F:filter的宽度;P:零补充(Zero Padiding),在原始图像两端补零的圈数。

下图2.6是一张大小的原始图片,设置经过卷积操作后,得到一张大小的特征图像的部分过程,图2.6为原始输入图像,绿色部分为卷积核,蓝色图像为目标图像,为卷积后图像长度,图2.7中的值可以通过绿色部分的运算。

卷积后图像特征图的长度为:

运算后的取值为:

通过以上运算过程,可以总结出,卷积运算就是将高维数据映射到低维数据,而逆卷积运算就是卷积运算的相反操作,将低维数据映射到高维数据。

动漫图像生成网络设计 ▐ DCGAN设计原则

DCGAN目前是GAN在实际工程实践中被采用最多的衍生网络,为了提高图像生成质量,增强其稳定性,许多研究学者尝试进行优化,并提出了四点设计原则,本课题中DCGAN的生成器和判别器的设计是基于该原则实现,下面将进一步阐述它们之间的关系。

(1)卷积层代替池化层

池化操作会使卷积核在缩小的特征图上覆盖了更大的图像视野,但是对网络性能的优化效果较小,使用卷积层代替池化层,让网络自动选择筛去不必要信息,学习上采样和下采样过程,提高计算机运算能力。

(2)去掉全连接层

全连接层一般添加在网络的末层,用于将图像特征进行连接,可以减少特征信息的损失,但是由于其参数过多,会产生过拟合、计算速度降低等问题。由于面部图像特征提取的感受野范围较小,不需要提取全图特征,所以为了避免上述问题,本项目中网络模型去掉了全连接层。

(3)批量归一化

本课题中的生成器和判别器都是五层神经网络,每一层输入的数据的复杂度都会逐层递增,使输出数据的分布发生变化,对网络参数的初始化和BP算法的性能产生影响。将数据进行批量归一化(Bach Normalization,BN),可以使输出的数据服从某个固定数据的分布,把数据特征转换为相同尺度,从而加速神经网络的收敛速度。

(4)激活函数

激活函数(Activation Function)具有连续可导的特性,可以使神经网络进行非线性变化,通过对数值优化来学习网络参数,提升网络的扩展性。本课题的生成器和判别器均为五层网络模型,计算量较大,每一层的激活函数选择需要满足高计算效率和训练稳定两点,其导函数的值域分布合理。

基于以上原则,在DCGAN的生成器添加了ReLu函数、Tanh函数,判别器中添加了LeakyReLu函数和Sigmoid函数,如下内容将对这四个激活函数进行的简单介绍。

Sigmoid函数是一种两端饱和型函数,取值范围在0∼1之间,Sigmoid函数定义如公式3.1所示:

下图3.1是Sigmoid的函数图像,它以坐标轴原点0为分界,输入值变大,输出结果接近于1,输入值减小,输出结果接近0,所以一般用它做输出端,解决二分类问题。这种特性也存在一定弊端,例如,神经网络训练结果输出恒大于零,并且当输入数据为极大,极小值时,Sigmoid函数梯度无限趋近于0,不利于神经网络的反向传播。

图3.1 Sigmoid函数图像

Tanh函数的图像也是S型,一般情况下Tanh的收敛速度都优于Sigmoid函数,它可以避免出现均值不为零的情况,公式如3.2所示:

由函数图像3.2可得,它的值域为(0,1),DCGAN网络在生成器的输出层添加Tanh函数,有利于图像色彩覆盖。

图3.2 Tanh函数图像

Relu激活函数是一种左饱和的激活函数。它的计算效率较高,一般常用于隐层神经元输出,在近几年被广泛用于训练多层神经网络模型,其函数公式3.3所示:

由ReLU函数图3.3可知,导数在x>0时为1,x



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3