Skip to content
This repository has been archived by the owner on Jul 9, 2021. It is now read-only.

Latest commit

 

History

History
802 lines (479 loc) · 68.5 KB

Thesis.md

File metadata and controls

802 lines (479 loc) · 68.5 KB

基于生成对抗网络的动漫头像生成软件开发

Generative Adversarial Network Based Anime Avatar Generator Development

摘要

针对动漫爱好者们日益增长的对于个性化动漫头像的需求,及现存动漫头像生成模型无法同时满足生成高质量动漫头像和选择特定条件的矛盾,本毕业设计将现存模型的优势相结合,制作了一个新的动漫头像生成模型,并封装作为网页应用提供给用户。模型使用基于样式的生成对抗网络作为基础,结合带条件的生成对抗模型,能够兼顾生成动漫头像的质量以及受用户控制的程度。模型将条件作为输入的一部分,连同原有的潜在空间向量一起通过改进后的映射网络,映射到过渡空间。该过渡空间被输入的条件划分为若干相互交叉的不同区域,代表不同的动漫头像特征。位于同一区域的中间向量经过生成网络后生产的动漫头像特征相近。而原模型中潜在空间向量的作用被削弱,使得映射后的中间向量始终位于相应的区域当中。相比于现存模型,该模型能够根据条件生成较高质量的动漫头像。为了方便使用,本毕业设计将训练好的动漫头像生成模型封装为网页应用提供给用户。用户能够通过访问网站,选择自己喜欢的动漫头像的属性,生成随机动漫头像,并且能够对生产的动漫头像进行简单的编辑,以满足自己的要求。

关键词:动漫头像;生成对抗网络;软件开发

Abstract

In response to the growing demand for personalized anime avatars from anime fans and the inability of existing anime avatar generation models to simultaneously generate high quality anime avatars and select specific conditions, this design combines the advantages of existing models to create a new anime avatar generation model that is packaged and made available to users as a web application. The model uses a style-based generative adversarial network as a basis, combined with a conditional generative adversarial model, which is able to balance the quality of the generated anime avatars with the degree of control by the user. The model takes the conditions as part of the input and maps them, along with the original latent space vector, into a transition space via a modified mapping network. The transition space is divided by the input conditions into a number of different regions that intersect with each other, representing different anime avatar features. The intermediate vectors located in the same region produce similar anime avatar features after passing through the generative network. The role of potential space vectors in the original model is weakened so that the mapped intermediate vectors are always located in the corresponding regions. Compared to the existing model, this model is able to produce higher quality anime avatars according to the conditions. For ease of use, the trained anime avatar generation model is packaged into a web application for the user. Users are able to visit the website, select the attributes of their preferred anime avatar, generate a random anime avatar and simply edit the produced anime avatar to suit their requirements.

**Keywords: **anime avatar; generative adversarial network; software development

目录

[toc]

1 引言

1.1 课题背景

近些年,动漫产业发展迅速,对于动漫角色的设计也愈发丰富,喜欢使用动漫人物作为自己社交平台账号头像的用户也大量存在,人们开始追求使用更加个性化、与众不同的动漫头像。但创作动漫头像具有一定的难度,创作者需要具备一定的艺术素养和专业技能才能够创作出一张满意的动漫头像。寻找有创作能力的艺术家帮助创作动漫头像是另一种方法,但时间和经济上的成本仍然使这种方法难以成为主流。直接使用网路上的免费动漫头像可以大大节省时间和经济成本,但难以获得令自己满意的那一张专属动漫头像。GAN(Generative Adversarial Network,生成对抗网络)的出现$ ^{[1]} $,带给了动漫爱好者们一个强有力的工具,其生成真实人脸的能力已经被人们广泛关注。动漫头像与真实人脸并非是完全不同的两种图像,它们之间也存在着一定的关联。正是这种关联使得将GAN应用于动漫头像的生成成为可能,正如当前可以通过GAN生成各式各样的真实人脸。动漫头像与真实人脸相似,拥有许多可以相互区分的视觉特征,包括发型、发色、微笑、发饰、腮红等,但也有一些真实人脸没有的,或现实中非常少见的特征,如兽耳、犄角、瞳色、尖耳、天使光环等。人们在使用GAN生成动漫头像的同时,也希望能够按照自己的意愿生成具有特定属性的动漫头像,而不是完全由系统随机决定。在模型性能相同的情况下,使用带有条件约束的模型比完全随机的模型能用更少的次数产生出用户满意的动漫头像。使用了本毕业设计提供的动漫头像生成模型,用户即使不具备创作动漫头像的能力,也可以在短时间内以低成本的方式获得一张动漫头像。用户使用个性化的动漫头像,增加了自己的区分度,活跃了社区。另一方面,机器生成的动漫头像也能够带给艺术工作者灵感,促进中国特色社会主义精神文明建设。

1.2 国内外研究动态

为了提升生成图像的质量,研究者们基于GAN在网络结构、损失函数设计、数据集的选择等方面都做了不少尝试。通过使用DCNN(Deep Convolutional Neural Network,深度卷积神经网络),DCGAN$ ^{[2]} $将图像质量提升了一个水平。WGAN$ ^{[3,4]} $,WGAN-GP$ ^{[5]} $则是从损失函数下手,致力于提高训练GAN的稳定性以及避免模式崩塌的问题。PGGAN$ ^{[6]} $使用了一种渐进式的训练手段,将生成图像的分辨率逐渐由低变高进行训练。这一想法被在后来的许多GAN模型中都有体现。最近,StyleGAN$ ^{[7-9]} $的提出又使得GAN的生成图像质量获得了显著提升。基于StyleGAN的人脸生成和动漫头像生成模型都能生成出高质量的图像,但如果想要对某个特定的条件进行约束,只能从已经随机生成的图像当中寻找特征与潜在空间中的向量之间的对应关系。为了对生成图像的内容进行控制,研究者们也提出了根据给定条件来生成图像的CGAN$ ^{[10]} $,以及在CGAN之后提出的ACGAN$ ^{[11]} $,LMV-ACGAN$ ^{[12]} $。对在特定条件下生成动漫人物头像这一任务做出针对性优化的 MakeGirlsMoe$ ^{[13]} $在一定程度上满足了动漫爱好者对于个性化的需求。StyleGAN提出后,CStyleGAN$ ^{[14]} $将StyleGAN生成图像的高质量与CGAN根据条件生成图像的可控性结合起来,并应用在商标的生成当中。

GAN不仅能够用来从“零”生成图片,还可以用于将一种类型的图像转换成另一种类型。这种图像的变换被称作图像转换$ ^{[15]} $。但要训练此网络要求使用成对的图像作为训练集,而在现实中获得成对图像的难度较大。针对这一问题,能够使用不成对图像训练的网络CycleGAN$ ^{[16]} $被提出。CycleGAN使用两组GAN,分别用于两种类型图像的相互转换。能够将真实图像转换为动漫风格图像的网络也开始出现$ ^{[17]} $。针对CycleGAN的弊端,先后又有人提出了能够在两个以上类型之间相互转换的StarGAN$ ^{[18]} $,进一步提升转换质量的U-GAT-IT$ ^{[19]} $等模型。这些模型在生成动漫头像的邻域中也都取得了超过CGAN的效果。在实际的应用中,有时候我们只要求能够做单向的转换,而不需要从目标类型转换回原类型。但CycleGAN的结构要求必须同时训练两组GAN,造成了训练的时间开销和计算资源上的浪费。CouncilGAN$ ^{[20]} $对此进行了改进,使得图像转换不再需要同时训练两个方向的转换,因此在生成的目标图像当中不再需要保留原图像的某些特征,从而能够生成更加符合目标类型特征的图像。特别是在动漫头像生成的课题上,类似CycleGAN结构的模型会在生成的动漫头像上仍然保留一些真实人脸的特征,但使用CouncilGAN生成的图像可以看到有明显的改善。

目前,在网络上比较主流的用于生成动漫头像的模型有以下两种。网络用户Aaron Gokaslan提供的预训练模型使用了StyleGAN2,在Danbooru2020数据集上训练,能够生成512×512分辨率的动漫头像,但该预训练模型不能由用户设置条件,缺乏一定的可控性。MakeGirlsMoe中提供的在线生成网站能够满足可控性,使用DRAGAN$ ^{[21]} $作为基础,在生成图像的质量上稍有不足。除此之外,人们也尝试使用过将PGGAN、MSG-GAN$ ^{[22]} $、BigGAN$ ^{[23]} $、SAGAN$ ^{[24]} $、GAN-QP$ ^{[25]} $、WGAN-GP等模型用于生成动漫头像,但效果均不理想1

1.3 软件特色

为了能够满足用户想要根据自己要求生成特定动漫头像的需求,和解决现存模型生成图像质量不佳的问题,本毕业设计参考CStyleGAN的做法,将StyleGAN与CGAN两种GAN的特点相结合,旨在训练一个兼具生成图像高质量特点和图像内容可控性的动漫头像生成模型。同时为了方便广大动漫爱好者们的使用,本毕业设计将训练好的动漫头像生成模型打包为网页应用提供给用户。用户能够通过访问网站,选择自己喜欢的动漫头像的属性,生成随机动漫头像,并且能够对生产的动漫头像进行简单的编辑,以满足自己的要求。完成编辑后,用户可以将自己的动漫头像和本网站分享到自己的社交平台账号上,或直接将动漫头像下载到本地并立即使用。除此之外,用户也可以浏览其它用户生成并编辑后的动漫头像。

2 现有模型相关研究工作

2.1 动漫图像数据集的准备

为了训练一个高质量的模型,需要准备一个好的数据集。动漫头像生成模型训练使用的数据集主要有两个来源。大部分来源于Danbooru2020数据集2,另一部分则为从Pixiv3、Fantia4、Twitter5等创作或社交平台搜集的高质量的动漫图像。

2.1.1 干净的数据集

Danbooru2020是一个大规模的动漫图像数据集,包含有$ 420 $万以上的动漫图像,以及$ 130 $万准确标注的图像标签。该数据集的制作者每隔一年都会将新创作的动漫图像加入到数据集中,使数据集中的动漫图像更加丰富。上文中提到的比较知名的StyleGAN2预训练动漫头像生成模型TWDNE(This Waifu Does Not Exist,这个老婆不存在)6就使用此数据集训练。完整的Danbooru2020数据集的大小约为$ 3.7 $TB,需要使用大量的磁盘空间储存。因此,本毕业设计使用Kaggle上提供的数据集子集,约$ 36 $GB。

Danbooru2020数据集使用的标签大致可以分为以下的几个大类:

  • 版权,即作品所基于的整体特许经营权、剧场版、动漫、漫画等。对于像《新世纪福音战士》这样的长期特许经营权,或拥有多种创作形式的作品的图像,可以有多个这样的标签。如果没有这样的相关作品,那么这张动漫图像就属于原创图像。
  • 角色,表示动漫图像中出现的角色的名字,可能有多个。
  • 作者,创作这副动漫图像的人。
  • 描述性标签,这其中数量最多的$ 10 $个标签分别是:一个女孩、单人、长发、高分辨率、胸部、腮红、短发、微笑、多个女孩、张开嘴巴,看向观众。这反映了动漫爱好者们对动漫图像的常见关注点。

这些标签描述了动漫图像的各个方面。除了像长发或看向观众这样的常见标签外,还有许多奇怪的和不寻常的标签,包括许多动漫或插图的特定标签,如声优关联指图像中的两个角色是由同一个声优在不同的动漫中配音,作画崩坏指艺术家经常不小心画出两只左脚,或是不符合一般人的人体结构。标签也可能是分层次的,一个标签包含另一个标签。图像中带有文字的动漫图像会有已翻译的、漫画或对话框等图像标签7

Kaggle中也包含了按照角色分类好的动漫头像数据集8。但该数据集缺少对应的图像标签,且现存预训练模型中没有只用于头像部分的图像标注器,因此不选择用来作为本动漫头像生成模型的训练数据集。

自行搜集动漫图像时,应该选择创作年份在2017年以后的动漫图像。因为Kaggle数据集中包含的动漫图像创作时间主要集中与2005年至2017年之间。选择2017年之后的图像能够减少重复搜集的可能。对于这部分图像,需要使用工具对图像进行标注。

2.1.2 图像标签预处理

Kaggle提供的数据集子集中,所有的动漫图像都有对应的元数据,包括:

  • 图像ID,是一个正整数。
  • MD5哈希值。
  • 上传者的用户名。
  • 原始的图像链接,或作品的名字。
  • 上传和下载量。
  • 关联图像。一张图像可能会以多种形式存在,例如除了最终的彩色图像外,还有草图或黑白版本,经过编辑的更大或更小的版本,适合工作场合的和不适合工作场合的,或描绘一个场景中的多个时刻。
  • 图像说明和对话。作者可能会为图像提供文字说明,这些说明都已经被翻译为英语。
  • 作者的评论。

这些元数据都被一起保存在多个JSON(JavaScript Object Notation,JavaScript对象表示法)文件当中。为了方便在模型训练过程中快速根据特定动漫头像获得图像标签信息,而不是每次都重新计算图像MD5哈希值,首先需要进行数据转换,以文件名作为关键字,对应图像标签数组作为值存储到单个JSON格式的大文件中。

本动漫头像生成模型使用Github用户RF5提供的预训练动漫图像标注模型进行标注。该预训练模型同样使用了Danbooru2020数据集,能够对动漫图像标注六千个不同的标签,并输出相应的概率。图1展示了对数据集中一张动漫图像进行标注得到的图像标签及相应的概率。这些标签是Danbooru2020数据集标签的子集,与Kaggle中的标签兼容。经过测试,该预训练模型标注准确率较高,即使是低概率的标签大部分也是准确的。所以使用$ 0.25 $为概率阈值,对自行搜集的图像进行标注可以得到一个图像标签较完整,标注准确率较高的数据集。标注得到的图像标签信息也一并添加到上文的JSON大文件中。

Tagger_Example

图1 图像标签示例图

标注完成后,需要对所有图像标签进行过滤。过滤分为两个层面,既要根据图像标签过滤掉不需要的动漫图像,又要过滤掉不需要的图像标签。需要过滤的动漫图像和图像标签包括以下几类:

  • 动漫图像

    • 素描、四格漫画、线稿等图像风格与一般彩色动漫图像差别较大的动漫图像。
    • 包含多个人物的动漫图像。过滤此类动漫图像是因为图像标签是以动漫图像为单位描述图像,而不是以动漫角色头像为单位。保留此类动漫图像会导致数据集中含有不匹配的图像标签组合。
    • 过滤后无任何对应图像标签的动漫图像。
  • 图像标签

    • 上文中提到的版权、角色、作者等类别的图像标签。
    • 其它身体部位的描述性标签,或仅从头像部分难以分辨出来的描述性标签。
    • 对应动漫图像数量占总数量的比例小于$ 5% $或大于$ 50% $的图像标签。

2.1.3 动漫头像剪裁

无论是Kaggle的数据集还是自行搜集的数据集,其中包含的动漫图像都是完整的一副作品,无法直接输入进网络进行训练。通过网络用户ultraist提供的基于OpenCV的动漫头像检测算法9,对数据集中的动漫图像进行裁剪。

该算法能够检测动漫图像中包含的人物脸部,并返回所有可能是动漫人物脸部的区域的位置和大小。返回区域是一个正方形,它的大小可以通过参数进行设置,以截取适当脸部比例的图像。因为本动漫头像生成模型的设计输出规模为$ 128\times128 $大小,所以在动漫头像裁剪的过程中还使用了最小检测区域大小的参数,将大小小于$ 128\times128 $的返回结果删去。但在实践中发现,该动漫人物脸部检测算法用于检测动漫头像识别时,识别效果与预期有一定差异。经过对比动漫人物脸部和动漫头像的区别后,本人认为主要原因是两者指代的像素区域不相同。动漫人物脸部通常指动漫人物头部显示为皮肤颜色的部分,而动漫头像不仅包括动漫人物的脸部,其区域为包括肩部以上、头顶,两耳等部位。因此,针对这一原因,本毕业设计将动漫人物脸部检测算法的输出结果进行了修正,即将检测到的区域大小放大$ 0.5 $倍,同时将区域中心向图像上部平移$ 0.25 $倍边长的距离。图2为修正前后检测算法的效果对比图。红色边框表示调整以前动漫人物脸部检测算法识别结果,蓝色边框表示调整后算法检测结果。

Cropper_Modigy

图2 裁剪效果对比图

剪裁后,还需要人工检查剪裁结果。使用动漫人物脸部检测算法获得的结果当中,仍然包含了一部分没有被准确识别的动漫图像。这些图像大部分是被误检测的其他部位的图像。在准确识别的动漫头像当中,也有一部分头部姿势不太理想,与平均情况差别较大的图像。这些图像会在一定程度上影响动漫头像生成模型的训练,增加模型收敛时间,增加模型生成效果的不稳定性。经过人工检查后,最终的训练集大小约为$ 11 $万张动漫头像。

2.2 动漫头像生成模型

2.2.1 TWDNE

长期以来,生成高质量的动漫头像一直是神经网络研究工作的重心之一。2018年StyleGAN模型的发明有效地解决了这项任务,人们已经训练了一个StyleGAN模型,可以在$ 512\times512 $分辨率下生成高质量的动漫头像。作者提供了一个网站,用来展示使用StyleGAN2模型随机生成的动漫头像,每隔$ 15 $秒就会显示一个不同的神经网络生成的脸和一段文字描述10

TWDNE动漫头像生成模型使用的StyleGAN模型借鉴了风格转换文献中的技术。这种模型架构可以自动学习,通过无监督的方式分离图像中的高层次属性,如动漫人物的脸部朝向,也可以生成动漫头像中的随机细节变化,如头发形状、腮红位置,并能够对生成的动漫头像进行直观的、精确的控制。这种模型在传统的分布质量指标方面有显著的插值特性,也更好的反应了影响动漫头像中细节变化的潜在因素。

StyleGAN_Arch

图3 StyleGAN结构图

传统上,潜在空间的随机向量会直接输入到生成器网络的第一层当中。但在StyleGAN模型中,生成器网络的由一个常数层开始,而没有直接使用随机向量。图3展示了StyleGAN模型的架构图。潜在空间$ Z $中的随机向量$ z $首先会通过一个非线性的映射网络$ f $在过渡空间$ W $中产生中间向量$ w $。通过学习映射变换,$ w $被转换为表示样式的数据对$ y $,用作生成器网络中的自适应实例归一化操作的两个参数。自适应实例归一操作在下文中有更详细的介绍。最后,StyleGAN模型通过为生成器网络中的每个层引入噪声输入,来产生随机的图像细节。这些噪声都是由不相关的高斯噪声组成的单通道图像,通过学习到的每个特征的系数传播到所有特征图,然后输出到相应卷积层的输出结果中$ ^{[7]} $。

2.2.2 MakeGirlsMoe

MakeGirlsMoe动漫头像生成模型通过搜集一个更干净、更适合的数据集和利用DRAGAN模型的实践经验,从数据和模型两个方面解决了将生成对抗模型应用于动漫头像生成无法得到满意结果的问题。通过定量分析和案例研究,MakeGirlsMoe模型的作者证明了这是一个稳定的并且高质量的动漫头像生成模型。此外,为了帮助人们进行角色设计,研究人员还建立了一个网站,并在网络上提供了与训练好的动漫头像生成模型,使得公众能够更容易的使用到这项研究的成果。

MakeGirlsMoe模型的一大特色是用户能够选择自己想要的图像标签来生成动漫头像。在MakeGirlsMoe作者给出的测试结果中,可以注意到一些罕见的颜色属性,如橙色眼睛、水蓝色头发、水蓝色眼睛具有相对较高的精确度,而这些属性对应的动漫头像在训练数据集中所占的比例不到$ 1% $。作者认为与颜色有关的视觉概念足够简单,生成器可以通过极少的训练样本获得良好的学习效果。相比之下,像帽子、眼镜、钻头发型这样的复杂属性在实验中表现得最差。当以这些标签为条件时,生成的图像往往是扭曲的,难以识别。尽管训练数据集中有大约$ 5% $的动漫头像带有这些属性,但它们所隐含的复杂的视觉概念对于生成器来说更难理解并产生满意的动漫头像$ ^{[13]} $。

但相比之下,MakeGirlsMoe模型生成的动漫头像的质量比上文中提到的TWDNE模型略有不足。一个可能的原因是TWDNE模型没有输入条件的限制,生成器只需要保留能够产生高质量动漫头像的图像特征。而MakeGirlsMoe模型迫于用户的要求,必须将这些质量较差的图像的特征保留下来,以满足判别器对条件部分的判断。尽管如此,MakeGirlsMoe模型能够选择条件的优势使得该模型仍然具有较高的人气。

2.3 训练技巧

2.3.1 数据增强

数据增强技术的使用使得即使使用小规模的数据集训练模型,也能够获得与较大规模数据集训练模型比拟的训练效果。在图像生成邻域,数据增强一般通过对数据集中的数字图像进行随机变换得到,如平移,旋转,翻转等。在本动漫头像生成模型的训练中,使用了水平翻转来增强数据集。动漫头像的左右两边尽管在视觉上对称,但如果考虑到像素的颜色取值,仍然有一定的差别。但其它的数据增强手段不适合本动漫头像生成模型训练使用的数据集。因为其它的操作会使得操作后的动漫头像出现没有像素的区域。这些区域如果反应到生成图像上面就会表现为一大块黑色的像素,大大影响动漫头像的观赏效果。

2.3.2 步进式训练

使用PGGAN中提高的步进式的训练技巧能够增加动漫生成模型的生成图像的稳定性,即从低分辨率的动漫头像开始训练,随着模型训练的进行而增加高分辨率的神经网络层。考虑到低分辨率动漫头像拥有较少的样式和较少的类别信息,动漫头像生成模型能够学习动漫头像数据集中的较高层次的样式,然后随着分辨率的提高,从学习粗略的细节逐渐转向更精细的细节。这不仅稳定了模型训练的质量,而且还加快了模型训练的速度,因为生成对抗网络不需要立刻将中间的潜伏空间映射到高分辨率图像的任务。

progressive

图4 步进式训练原理图

图4展示了步进式训练的步骤。生成器$ G $和判别器$ D $的训练从$ 4\times4 $像素的低分辨率开始,但随着训练的进行,其分辨率会不断提高。为了避免在添加新层时对网络已经训练的层造成突然性的影响,图中间设置了一个过渡阶段。在过渡阶段,一个向前跳跃的旁路被引入以帮助过渡到更高的分辨率。经过几次迭代后,这些连接被移除并继续训练。值得注意的是,在这个过程中没有任何层被冻结,整个网络在整个过程中都是可训练的。虽然步进式训练在很大程度上解决了高分辨率训练的模型稳定性问题,但将复杂的数据分布嵌入到一个相对小的潜在空间中,会导致不可避免的特征纠缠。也就是说,多个特征被映射到空间中的单一位置。这种纠缠导致了控制网络输出的巨大困难。不过条件的引入使得这个问题得到了一定的缓解$ ^{[14]} $。

2.3.3 自适应实例规范化

一般来说,在稳定的模型训练方法中,每个卷积层都需要使用批量归一化,这么做能够减轻模型训练的复杂性。然而,使用实例归一化代替批量归一化能够显著改善风格转移的效果。

$$ \begin{equation}IN(x)=\gamma\left(\frac{x-\mu(x)}{\sigma(x)}\right)+\beta\tag{1}\end{equation} $$

实例归一化如公式$ (1) $表示,其中$ \mu(x) $和$ \sigma(x) $表示图像$ x $的平均值和标准差。该式将输入图像归一化为某种风格,由参数$ \gamma $和$ \beta $共同定义。为了使这个方程能够适应任何给定的风格,可以使用一个自适应的变换。 $$ \begin{equation}AdaIN(x,y)=\sigma(y)\left(\frac{x-\mu(x)}{\sigma(x)}\right)+\mu(y)\tag{2}\end{equation} $$ 自适应实例归一化如公式$ (2) $所示。自适应实例归一化需要一个额外的样式$ y $的输入,即平均值$ \mu(y) $和标准差$ \sigma(y) $,以取代实例归一化的两个参数。在StyleGAN模型中,中间变量$ w $被转换为自适应实例归一化方程的平均值和标准差。$ w $反映了图像的风格,自适应实例归一化通过它的归一化过程,定义了卷积层中各个层的参数的重要性。因此,通过自适应实例归一化,特征图被转化为一种视觉表现$ ^{[14]} $。

3 模型改进与实现

3.1 条件整合

为了得到高质量的动漫头像,本毕业设计使用与上文中TWDNE动漫头像生成模型相同的StyleGAN模型作为基础。但仅仅使用StyleGAN模型不足以满足人们对控制生成的动漫头像中相关属性的需求。因此,本毕业设计参考了CStyelGAN中的做法,将条件作为输入的一部分,与潜在空间中的随机变量进行整合。 $$ \begin{equation}Z=\begin{bmatrix}l_{11}&l_{12}&\cdots&l_{1d}\l_{21}\\vdots\l_{n1}&l_{n2}&\cdots&l_{nd}\end{bmatrix};Y=\begin{bmatrix}y_{11}&y_{12}&\cdots&y_{1c}\y_{21}\\vdots\y_{n1}&y_{n2}&\cdots&y_{nc}\end{bmatrix}\tag{3}\end{equation} $$

以下展示过渡空间中的中间向量$ W $与潜在空间的随机向量$ Z $和条件向量之间的关系。假设输入是大小为$ n $的批次。如公式$ (3) $所示,$ z $服从均值为$ \mu $、方差为$ \sigma^2 $的正态分布,是$ n\times d $的由潜在空间随机向量组成的矩阵,其中$ n $是批次大小,$ d $是潜在空间随机向量的维度。$ Y $是$ n\times c $的由条件向量组成的矩阵,$ c $是动漫头像生成模型中支持的条件的数量。所有的条件向量中元素的取值为$ {0,1} $,且相互独立。

$$ \begin{equation}W=f([Y\times R]::Z)\tag{4}\end{equation} $$

过渡空间中中间向量$ W $如公式$ (4) $所示。$ Y $与大小为$ n\times c $的服从正态分布的随机矩阵相乘,并将结果与$ Z $相连接。$ f $表示映射网络。$ W $随后被StyleGAN中的生成器网络作为样式输入生成动漫头像$ ^{[14]} $。图5展示了实现上述过程的网络结构。

cStyleGAN_Arch

在实践上,潜在空间随机向量$ Z $与条件向量$ Y $的结合可以与映射同时完成,它们的目的都是产生一个能够表示特定动漫头像属性的过渡空间中间向量$ W $。在本动漫头像生成模型中,将映射网络的第一层的大小从$ n\times d $修改为$ n\times(d+c) $,并将潜在空间随机向量与条件向量一同输入到该输入层中。映射网络的剩余部分均与StyleGAN模型中的映射网络相同。

表1 图像标签标签中英文对应表
tag 对于中文名称
animal_ears 兽耳
bangs 刘海
black_hair 黑色头发
blonde_hair 金色头发
blue_eyes 蓝色眼睛
blue_hair 蓝色头发
blush 腮红
brown_eyes 棕色眼睛
brown_hair 棕色头发
green_eyes 绿色眼睛
green_hair 绿色头发
hair_ornament 发饰
hat 帽子
open_mouth 张开嘴巴
pink_hair 粉色头发
purple_eyes 紫色眼睛
purple_hair 紫色头发
red_eyes 红色眼睛
ribbon 缎带
silver_hair 银色头发
smile 微笑
twintails 双马尾
yellow_eyes 黄色眼睛

为了缩短训练的时间和减少使用的计算机资源,本动漫头像生成模型对网络的规模进行了一定的限制。动漫头像的输出大小被设计为$ 128\times128 $,这个大小能够满足大部分社交平台账号头像的使用需求,同时也能够方便的使用超分辨率技术获得更大的动漫头像而不影响视觉上的观赏体验。本动漫头像生成模型使用的条件较少,将潜在空间随机向量的维度及过渡空间中间向量的维度设置为$ 256 $足够表示不同条件下动漫头像的特征。

3.2 超分辨率技术

为了弥补减少模型规模带来的生成图像大小较小的缺点,本动漫头像生成模型在生成网络的末尾串联两个超分辨率模型来增加图像的大小。该超分辨率模型由Github用户yu45020以CARN模型$ ^{[26]} $为基础改进而来11。CARN模型是一个用于图像超分辨率的精确和轻量级的深度学习模型,用于解决过去深度学习算法需要大量计算,不能轻易应用于现实世界的问题。CARN模型在一个残差网络上实现一个级联机制。改进后的模型将CARN模型中的$ 1\times1 $卷积核全部替换为$ 3\times3 $卷积核,并且引入了挤压和激发网络。挤压和激发网络用于改进卷积神经网络的性能,通过明确地模拟通道之间的相互依赖关系,来适应性地重新校准通道的特征表达,提高整个特征层次的空间编码质量来加强卷积神经网络的表现力。

图6展示了分别使用传统数字图像处理算法和使用超分辨率模型将同一副动漫图像放大四倍后的效果。左图为传统数字图像处理算法效果,右图为超分辨率模型效果

Waifu2x_T_4xWaifu2x_4x

图6 超分辨率模型与传统图像算法对比图

通过连续的两个超分辨率模型,原动漫头像生成模型生成的$ 128\times128 $大小的动漫先后被放大到$ 256\times256 $和$ 512\times512 $。$ 512\times512 $大小的动漫头像在网页应用当中展示视觉效果好,不显得太大,也不显得太小。同时,网页中剩余的空白部分足够放下大部分相关的控件,使得用户无需翻页即可使用本软件模块的全部功能。

4 软件系统设计

4.1 可行性分析

4.1.1 技术可行性

本毕业设计使用Arch Linux操作系统为开发平台。Linux操作系统拥有比Windows更友好的软件开发环境,更简单的配置手段,并提供现成的Python运行环境。Arch Linux操作系统相比其它的Linux发行版,提供了大量整合好的软件包,进一步简化了配置开发环境的步骤。

在整个开发阶段,本毕业设计使用Git工具进行版本管理。Git是一个自由和开源的分布式版本控制系统,旨在以速度和效率处理从小型到非常大的项目。

目前,人工智能领域的学术研究主要将Python作为语言工具。Python是一种解释型的高级通用编程语言。Python的设计理念强调代码的可读性,它显著地使用了缩进。它的语言结构和面向对象的方法旨在帮助程序员为小型和大型项目编写清晰的、有逻辑的代码。同时,Python拥有大量的官方和用户软件包,以满足不同开发、研究领域的工作需要。

动漫头像生成模型部分,本毕业设计使用PyTorch进行开发。PyTorch是一个开源的机器学习框架,加速了从研究原型到生产部署的进程,并且提供了活跃的开发者社区。使用成熟的框架能够降低设计实现生成对抗网络的难度,提高了开发效率。相比另一主流的TensorFlow机器学习框架,PyTorch的兼容性更好,能够适应Arch Linux的高版本Python环境,也能够运行使用低版本PyTorch编写的模型。

人机界面部分,本毕业设计使用Flask开发网页应用的服务器后端。Flask是一个轻量级的WSGI网页应用框架。它被设计成能够快速、简单地入门,并能够扩展到复杂的应用程序。Flask也使用Python语言开发,因此可以快速且高效地与动漫头像生成模型对接。相比其它主流网页框架,Flask框架更适合简单的小型系统。Flask内置了Jinja渲染引擎,能够快速开发网页前端,实现前后端通信。Jinja是一种现代的、对设计师友好的Python模板语言,仿照Django的模板。它速度快,使用范围广,而且有可选择的沙盒式模板执行环境,很安全。

本毕业设计使用Google Chrome,Firefox和Opera三种主流浏览器作为客户端,对网页应用前端部分进行测试。

综上,本毕业设计的开发在技术上可行。

4.1.2 经济可行性

本毕业设计开发使用的开发环境,开发框架均为开源软件,不需要额外的购买或授权费用。训练动漫头像生成模型所需要的数据集为Danbooru2020的子集,能够从网络上免费下载使用。整个软件开发主要分为两部分,即动漫头像生成模型开发和人机界面开发。其中,动漫头像生成模型开发所需时间长,主要原因是模型训练需要大量时间,训练设备性能有限。因此,使用较小规模的模型搭配超分辨率技术能够减少项目开发时间。模型开发在StyleGAN的基础上进行改进,工作量较小。另一方面,本系统整体规模小,模块少,人机界面开发不复杂,工作量适中。

综上,本毕业设计的开发经济成本低,开发时间合适,能够在规定时间内按照任务书要求进行开发,在经济上可行。

4.1.3 操作可行性

本毕业设计以网页应用的形式提供给用户使用。在现代社会,互联网已经成为人们日常生活和工作中不可缺少的一部分。用户不需要接受专业培训或学习专业知识即可使用网页应用。本毕业设计将动漫头像生成模型做了封装,屏蔽了运行所需的参数细节,以文字与图形相结合的方式向用户展现,并给出了详细的提示信息,使用户更容易上手。在设计人机界面时,参考了主流的网页设计,符合用户的日常使用习惯。

综上,本毕业设计用户界面友好,上手简单,访问容易,在操作上可行。

4.2 需求分析

4.2.1 功能需求

  • 用户能够在软件给出的属性列表中根据自己的喜好选择若干条属性作为生成动漫头像的条件。
  • 软件在成功生成动漫头像后,若用户不满意,可以重新使用相同的条件生成动漫头像。
  • 软件在生成用户满意的动漫头像后,用户可以直接在软件中对生成的动漫头像进行简单的图像编辑,包括但不限于平移、旋转、添加滤镜等操作。
  • 用户完成动漫头像编辑后,软件提供分享到社交平台账号的接口,及下载动漫头像的接口。
  • 用户可以浏览其它用户生成的经过编辑的动漫头像。
  • 软件能够跟踪用户的动漫头像生成进度,保证用户在一次生成的不同阶段操作的图像一致。

4.2.2 性能需求

  • 用户访问软件内非图像相关页面时,网页响应时间应在1秒内。
  • 用户使用动漫头像生成页面时,网页响应时间应在45秒内。
  • 用户使用动漫头像编辑页面时,网页响应时间应在5秒内。

4.2.3 出错处理需求

本毕业设计以网页应用的形式提供用户使用,其出错处理应当按照网页应用相关规范实现。

4.2.4 逆向需求

  • 软件不要求用户登录才能使用相关功能,也不要求使用软件的特定的时间,地点。任何用户在任何时间任何地点都可以访问软件,并使用软件提供的服务。
  • 软件不会强制用户分享才能下载,也不会强制用户分享时使用的文字描述。从软件中下载的动漫头像即是用户在网页中看到的源图像。

4.3 总体设计

4.3.1 模块设计

  • 条件选择模块:接受用户网页输入,转换为模型要求的输入格式
  • 动漫头像生成模块:接受用户输入的条件,产生潜在空间随机向量,生成动漫头像。
  • 动漫头像编辑模块:针对用户指定的动漫头像,接受用户的输入参数,对动漫头像进行编辑。
  • 动漫头像分享模块:提供动漫头像下载接口,提供多个社交平台分享接口。
  • 其它模块:包括网页使用相关框架信息的展示,网页主入口的展示

4.3.2 层次图

图7展示软件系统层次图。

Layer

图7 软件层次图

4.3.3 软件流程图

Flow

图8中在动漫头像生成模型后,连续连接了两个超分辨率模型。每个超分辨率模型将输入图像放大至原图像的两倍,故用户将会看到放大四倍之后的清晰动漫头像以判断对该头像是否满意。

4.4 开发与测试工具

本毕业设计主要使用两种开发工具进行开发,分别是用于开发动漫头像生成模型的Jupyter Notebook和用户开发服务器后端的PyCharm。网页应用的测试则使用Postman。

Jupyter Notebook是一个开源的网络应用程序,允许用户创建和分享包含实时代码、方程、可视化和描述下文本的文档。它能够用于数据清理和转换、数值模拟、统计建模、数据可视化、机器学习等领域。在设计实现动漫头像生成模型的阶段,对实时交互的能力需求较大。用户需要及时调整网络模型的架构和运行参数,但对于运行性能的需求不高,仅作为开发使用。当动漫头像生成模型设计完成后,即可将代码转移至性能更好的服务器中进行模型训练。此外,Jupyter Notebook还有大量可以使用的插件,使得开发环境更加高效,舒适。用户在Jupyter Notebook中运行代码时,Jupyter Notebook可以自动计算代码运行所用的时间,方便用户调试程序,优化程序结构。

PyCharm提供了智能代码完成、代码检查、即时错误突出显示和快速修复、以及自动代码重构和丰富的导航功能。PyCharm的智能代码编辑器为Python、CSS(Cascading Style Sheets,层叠样式表)等流行语言提供了一流的支持。拥有语言感知和代码补全、错误检测和即时代码修复的优势。PyCharm的代码自动保存功能和Flask框架自带的开发调试用服务器的自动检测修改功能使得开发效率大大增加,用户无需手动重启服务器,只需要将注意力集中在代码的实现上。因为没有可以使用的公网IP和域名,本毕业设计仅在Flask框架内置的开发调试用服务器的生产环境中测试。

Postman是一个用于API(Application Programming Interface,应用程序接口)开发的协作平台。它能够简化构建API的步骤,以及协作的方式。相比浏览器中内置的调试器,使用Postman能够定义复杂的请求,发送任何类型的请求,包括用于发送简单文本数据的默认内容类型,用于发送大量二进制数据或包含非ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)字符的文本的符合数据类型。Postman还能够方便的检查响应状态,查看状态编码,响应时间和响应大小。Postman的自动语言检测、链接和语法高亮、搜索和文本格式化使得检查响应体变得容易。

5 服务器后端设计与实现

5.1 接口设计

以下表2表24表示各接口及相应参数的定义

5.1.1 主模块

5.1.1.1 主页

表2 主页接口定义表
请求接口 请求方式
/ GET

软件主页,用于引导用户进入下一步操作。

5.1.1.2 细节页面

表3 细节页面接口定义表
请求接口 请求方式
/details GET

用于展示再整个软件系统设计实现过程中使用到的框架,软件,资源等。若用户对该应用感兴趣,也可以参考这些信息自行改进实现。

5.1.1.3 制作者信息

表4 制作者信息接口定义表
请求接口 请求方式
/about GET

包含本人的一些个人信息,欢迎广大同好与本人一起改进本软件系统。

5.1.1.4 画廊

表5 画廊接口定义表
请求接口 请求方式
/gallery GET

用于展示其它用户在本软件系统生成并编辑的动漫头像。

5.1.2 标签选择模块

5.1.2.1 标签展示

表6 标签展示接口定义表
请求接口 请求方式
/labels/show GET

用于展示动漫头像生成模型中的条件信息。

5.1.3 动漫头像生成模块

5.1.3.1 生成动漫头像

表7 生成动漫头像接口定义表
请求接口 请求方式
/avatar/generate POST
5.1.3.1.1 请求体参数定义
表8 生成动漫头像请求体参数定义表
参数名 参数类型 参数描述
labels 字符串列表 用户选择的动漫头像属性
truncation 浮点型 动漫头像生成模型的截断参数
truncation_mean 整型 动漫头像生成模型平均向量参数

接受用户选择的动漫头像属性作为输入,调用动漫头像生成模块,生成动漫头像,并将产生的动漫头像返回给用户。参数truncation用于调整动漫头像生成模型生成的发散程度,取值介于$ 0 $至$ 1 $。取值越小,动漫头像生成模型生成的图像越接近平均图像,取值越大,动漫头像生成模型生成的图像更加多样化。参数truncation_mean用于产生过渡空间中间向量取值的平均值,只在参数truncation小于$ 1 $时使用。

5.1.4 动漫头像编辑模块

5.1.4.1 动漫头像编辑预览

表9 动漫头像编辑预览接口定义表
请求接口 请求方式
/edit/show GET

返回当前设置下的动漫头像预览。用户能够及时查看提交的参数对动漫头像的修改是否符合预期。

5.1.4.2 平移动漫头像

表10 平移动漫头像接口定义表
请求接口 请求方式
/edit/shift POST
5.1.4.2.1 请求体参数定义
表11 平移动漫头像请求体参数定义表
参数名 参数类型 参数描述
shift_x 整型 水平方向平移距离
shift_y 整型 竖直方向平移距离

将动漫头像向某一特定方向平移。若参数shift_x大于零,则将动漫头像中的像素向右平移,若小于零则将动漫头像中的像素向左平移,绝对值的大小表示平移的距离,即跨越的像素个数。同理,若参数shift_y大于零,则将动漫头像中的像素向下平移,若小于零则将动漫头像中的像素向上平移,绝对值的大小表示的意义同参数shift_x

5.1.4.3 旋转动漫头像

表12 旋转动漫头像接口定义表
请求接口 请求方式
/edit/rotate POST
5.1.4.3.1 请求体参数定义
表13 旋转动漫头像请求体参数定义表
参数名 参数类型 参数描述
angle 整型 旋转的角度

将动漫头像以图像中点为中心旋转,若参数angle大于零,则将动漫头像向顺时针方向旋转,若小于零则将动漫头像向逆时针方向旋转,绝对值的大小表示旋转的角度,参数的单位是角度制。

5.1.4.4 修改动漫头像亮度

表14 修改动漫头像亮度接口定义表
请求接口 请求方式
/edit/lightness POST
5.1.4.4.1 请求体参数定义
表15 修改动漫头像亮度请求体参数定义表
参数名 参数类型 参数描述
lightness 整型 动漫头像的亮度

将动漫头像的亮度修改为指定数值。计算方法如公式$ (5) $所示。

$$ \begin{equation}x_{new}=\left(1+\frac{lightness}{100}\right)\cdot x_{old}\tag{5}\end{equation} $$

5.1.4.5 修改动漫头像饱和度

表16 修改动漫头像饱和度接口定义表
请求接口 请求方式
/edit/saturation POST
5.1.4.5.1 请求体参数定义
表17 修改动漫头像饱和度请求体参数定义表
参数名 参数类型 参数描述
saturation 整型 动漫头像的饱和度

将动漫头像的饱和度修改为指定数值。计算方法如公式$ (6) $所示。

$$ \begin{equation}x_{new}=\left(1+\frac{saturation}{100}\right)\cdot x_{old}\tag{6}\end{equation} $$

5.1.4.6 修改动漫头像对比度

表18 修改动漫头像对比度接口定义表
请求接口 请求方式
/edit/contrast POST
5.1.4.3.1 请求体参数定义
表19 修改动漫头像对比度请求体参数定义表
参数名 参数类型 参数描述
contrast 整型 动漫头像的对比度

将动漫头像的对比度修改为指定数值。计算方法如公式$ (7) $所示。

$$ \begin{equation}x_{new}=\min(0.1\cdot contrast\cdot x_{old},255)\tag{7}\end{equation} $$

5.1.4.7 添加动漫头像滤镜

表20 添加动漫头像滤镜接口定义表
请求接口 请求方式
/edit/filters POST
5.1.4.7.1 请求体参数定义
表21 添加动漫头像滤镜请求体参数定义表
参数名 参数类型 参数描述
filter 字符串 滤镜名称

为动漫头像添加指定的滤镜。参数filter的取值如下表所示。

表22 参数filter取值表
filter取值 滤镜
null 不适用滤镜
sketch 素描
nostalgia 怀旧
halo 光晕
rising 流年
relief 浮雕
engraving 雕刻
glass 毛玻璃

5.1.5 动漫头像分享模块

5.1.5.1 动漫头像展示

表23 动漫头像展示接口定义表
请求接口 请求方式
/share/summary GET

展示用户修改完成后的动漫头像,并将社交平台分享功能集成在本页面。

5.1.5.2 动漫头像下载

表24 动漫头像下载接口定义表
请求接口 请求方式
/share/download GET

将用户修改完成后的动漫头像发送至客户端。

5.2 数据存储方式设计

在本毕业设计中有多种类型的数据需要存储,并且各种类型的数据使用场景各不相同,因此需要分析每种场景下的需求,选择合适的存储方案。

软件系统中需要使用两个机器学习模型来完成相关的任务,即动漫头像生成模型和超分辨率模型。这两种模型的模型参数都使用pt格式存储在服务器后端。pt格式文件通常被用于存储序列化的机器学习模型的参数数据,可以直接使用PyTorch框架读取或写入。

使用动漫头像生成模型时,用户的条件输入需要转换为条件向量才能够被模型使用。动漫头像生成模型支持的条件共有23个,文件大小较小,可以使用字符串存储为JSON格式文件。JSON是一种亲良机的数据交换格式,其清晰和简洁的层次结构使得JSON格式易于人类的阅读和编写,也易于机器的解析和生成,并有效地提升网络传输的效率。在Python中也提供了JSON函数库用于方便地处理JSON格式文件。

在用户使用软件系统的过程中,用户经常需要在页面直接跳转。软件系统必须能够区分跳转前后访问本系统的用户是否是同一人。同时,用户可能携带了在之前页面中记录下来的一些信息,需要被服务器使用。因为现在广泛使用的超文本传输协议是无状态的,服务器不能知道用户上一次做了什么,这严重阻碍了交互式网页应用程序的实现。这些数据通常被存储在Cookie当中。Cookie是网页应用为了辨别用户身份而存储在本地终端上经过加密的数据,是一种小型文本文件。内存Cookie由浏览器维护,保存在内存当中,浏览器关闭时Cookie自动清除。

软件系统还提供浏览其他用户生成的动漫头像的功能。要实现这个功能,要求服务器能够记录下先前用户生成的动漫头像。动漫头像在服务器中以PNG(Portable Network Graphics,便携式网络图形)格式存储,只需要记录下文件名即可保存动漫头像生成信息。在读取生成信息时,服务器通常要读取大量的动漫头像用于连续展示,而使用数据库存储单一字段的数据表会增加额外的开销,不适合应用与本场景。因此直接使用文本文件记录文件名列表是一个合适的选择。

5.3 前后端数据交换方式设计

本毕业设计中主要使用表单和模板引擎交换前后端的数据。表单在网页中主要负责数据采集的功能,能够接受用户的输入,并将其发送至服务器。服务器接受到输入后,即能执行进一步的操作。服务器后台完成用户提交的任务后,通过模板渲染引擎将结构嵌入HTML(Hyper Text Markup Language,超文本标记语言)中,返回给用户。使用表单传输数据无需运行JavaScript脚本,且能够被大多数浏览器支持。

6 人机界面设计与实现

6.1 软件系统主页

index

图9 软件系统主页

图9展示软件系统主页,主要包含软件系统的简介,以及帮助用户使用动漫头像生成模型的引导。其中,页面顶部的导航栏以及底部的开发者信息为通用部分,在其它页面中同样存在。为了使页面内容集中在中部,页面两边各有$ 25% $的空白区。这两个区域也可以插入广告作为网站收入。

6.2 标签选择页面

labels

图10 条件选择页面

图10为条件选择界面,包括$ 23 $个条件复选框和两个模型参数输入框。每个条件相互独立,可以按照任意组合选择。

6.3 动漫头像生成页面

avatar

图11 动漫头像生成页面

图11展示动漫头像生成页面。该页面设计较简单,起到承上启下的作用。接下来用户将以该动漫头像为基础对其进行编辑。

6.4 动漫头像编辑页面

edit_show

图12 动漫头像编辑页面预览部分

edit_edit

图13 动漫头像编辑页面操作部分

图12图13为动漫头像编辑页面,包含当前设置下的动漫头像预览,以及可以执行的图像编辑操作。

6.5 动漫头像分享页面

share

图14 动漫头像分享页面

图14为动漫头像分享页面,包含用户完成编辑之后的最终动漫头像,并提供下载接口及社交平台分享接口。

7 软件测试

本毕业设计主要使用模块化测试技术,分模块对软件系统进行测试。对与本软件系统,主要分为动漫头像生成模型测试和网页应用测试两大部分。在网页应用测试中,测试内容更加细分到各个功能模块。下文分别对两大部分的测试情况做简要介绍。

7.1 动漫头像生成模型测试

动漫头像生成模型测试的主要目的是测试动漫头像生成模型是否能够按照用户给定的条件生成相应的动漫头像。以下图15图18中,左边$ 24 $幅为本动漫头像生成模型生成图像,右边$ 24 $幅为MakeGirlsMoe模型生成图像。

7.1.1 不同条件组合下的模型生成效果

条件组合1

条件:金色头发、双马尾、腮红、微笑、缎带、红色眼睛。

Anivatar_Case_aMakeGirlsMoe_Case_a

图15 条件组合1效果对比图

条件组合2

条件:银色头发、腮红、微笑、张开嘴巴、蓝色眼睛。

Anivatar_Case_bMakeGirlsMoe_Case_b

图16 条件组合2效果对比图

条件组合3

条件:蓝色头发、双马尾、张开嘴巴、蓝色眼睛。

Anivatar_Case_cMakeGirlsMoe_Case_c

图17 条件组合3效果对比图

条件组合4

条件:金色头发、帽子、红色眼睛。

Anivatar_Case_dMakeGirlsMoe_Case_d

通过以上四组在不同条件组合下动漫头像生成模型和MakeGirlsMoe模型生成动漫头像的对比,可以了解动漫头像生成模型对特定条件下的生成效果是否符合预期。总体来说,本动漫头像生成模型的动漫头像质量与MakeGirlsMoe模型差异不大。可以注意到,本动漫头像生成模型中的背景更加丰富,生成的动漫头像风格也比较多样。但在某些条件下,如条件组合1,MakeGirlsMoe模型的图像生成效果更好一些,产生的坏图更少。

随机生成

Anivatar_Random_Tag

图19 动漫头像生成模型随机效果图

TWDNE_Random_Part

图20 TWDNE模型随机效果图

图19图20中,不指定条件的动漫头像生成模型的生成效果与TWDNE模型对比,可以发现TWDNE模型的动漫头像生成效果更好,生成的动漫头像质量更加稳定。本动漫头像生成模型使用的网络结构与TWDNE模型大致相同,但仍然产生上述差异的一个主要原因是考虑到训练成本的限制,本动漫头像生成模型对网络规模、训练时间、数据集大小等做了削减,所以无法达到TWDNE模型的训练效果。另一方面,将本动漫头像生成模型在随机条件下动漫头像的生成效果与上文中特定条件下的生成效果做对比,能够发现随机条件下动漫头像生成质量更好,也佐证了上文中关于MakeGirlsMoe模型比TWDNE模型的生成效果不理想的猜想。

7.2 网页应用测试

网页应用测试的主要目的是综合测试软件系统中可能存在的各种错误,为软件系统的维护,调试,优化提供依据。对本毕业设计的软件系统,主要使用白盒测试技术。白盒测试能够通过揭露隐藏的错误进行代码优化,消除可能存在的缺陷。从源代码层面测试提供了可追溯性,简化了将来软件改动带来的测试改动。表25展示了使用不同浏览器访问不同模块的测试情况。

表25 网页应用接口测试表
客户端代理 测试接口 请求方法 接口类型 响应代码 响应时间
Postman / GET 非动漫头像相关 200 31.87毫秒
Postman /avatar/generate GET 动漫头像生成 200 44.29秒
Postman /edit/shift POST 动漫头像编辑 302 102.05毫秒
Postman /edit/filters POST 动漫头像编辑 302 5.81秒
Postman /share/download GET 动漫头像下载 200 23.49毫秒
Google Chrome / GET 非动漫头像相关 200 27毫秒
Google Chrome /avatar/generate GET 动漫头像生成 200 42.31秒
Google Chrome /edit/shift POST 动漫头像编辑 302 721毫秒
Google Chrome /edit/filters POST 动漫头像编辑 302 5.46秒
Google Chrome /share/download GET 动漫头像下载 200 374毫秒
Firefox / GET 非动漫头像相关 200 30毫秒
Firefox /avatar/generate GET 动漫头像生成 200 41.79秒
Firefox /edit/shift POST 动漫头像编辑 302 87毫秒
Firefox /edit/filters POST 动漫头像编辑 302 5.44秒
Firefox /share/download GET 动漫头像下载 200 4毫秒
Opera / GET 非动漫头像相关 200 157毫秒
Opera /avatar/generate GET 动漫头像生成 200 63秒
Opera /edit/shift POST 动漫头像编辑 302 616毫秒
Opera /edit/filters POST 动漫头像编辑 302 5.32秒
Opera /share/download GET 动漫头像下载 200 24毫秒

通过分析测试数据,可以了解软件系统的运行情况是否符合预期。总体上,网页响应时间符合软件系统设计预期,但任然存在个别情况下软件系统性能较差,如使用Opera浏览器使用动漫头像生成功能时,响应时间远大于其他浏览器,所有浏览器对动漫头像添加滤镜时响应时间略微超出设计预期。对于同一测试接口,不同浏览器访问的响应时间也存在较大差异。可能的原因包括操作系统调度开销,网络状况波动等不可控因素。在同一浏览器访问的不同测试接口中,响应时间最长的是动漫头像生成接口,其次是添加动漫头像滤镜接口。造成这种现象的主要原因是动漫头像生成模型需要大量时间生成头像,而滤镜效果的添加需要便利动漫头像中的所有像素,增加了时间开销。

结论

本毕业设计达到了任务书中的要求,设计并实现了基于生成对抗网络的动漫头像生成软件,并以网页应用的形式提供给用户使用:

  • 以带条件的基于样式的生成对抗网络作为内核,改进了现有的动漫头像生成模型,提高了动漫头像生成质量,允许用户根据自己的喜好选择条件并随机生成相应的动漫头像。
  • 模型使用高质量,多样化的数据集训练,降低了训练成本,提高了模型质量,提高了模型生成动漫头像的随机性,降低不同用户之间获得雷同动漫头像的可能性。
  • 使用了超分辨率模型,减少了训练模型的时间成本,减少了使用的计算机资源,同时能够产生大分辨率的动漫头像。能够在一般社交平台上使用,视觉效果清晰。
  • 提供了易于交互的人机界面,封装了生成对抗网络模型,然非专业动漫爱好者也能够轻松使用。以生成动漫头像的作为基本功能,集成了编辑、分享、浏览等功能,使得用户体验更好。
  • 软件采用模块化设计,模块间耦合度低,模块中内聚度高,增加了代码可读性和可维护性,便于未来可能的调整修改,有利于模块化测试的进行,确保软件可靠性。

由于时间,个人技术水平,实验设备的局限性,软件中还有大量的优化空间。模型训练过程中,为了缩短训练时间,对原有模型的参数数量做了削减,同时只使用了一部分数据集进行训练。倘若设备存储空间、计算能力允许,可以使用更多的模型参数及更多的数据集进行训练,可能得到效果更好、更稳定的动漫头像生成模型,并且不再需要用于弥补减少的模型参数而使用的超分辨率技术,简化动漫头像生成流程,缩短生成所需的时间。关于软件架构,业务逻辑主要放在服务器后端进行处理。这适用于用户流量小,规模不大的小型系统。随着用户流量的增加,服务器后端的压力会逐渐增大,可能导致系统不稳定甚至崩溃现象的发生。因此,对于一些简单的业务逻辑,如头像编辑模块,将其放在浏览器前端中进行处理更为合适。对于网络带宽大,计算能力强的用户,也可以直接提供模型下载,在其本地生成动漫头像。这种做法能够在一定减少服务器后端的计算压力,也能够允许用户在离线的情况下继续使用本软件。在人机界面方面,软件主要使用简单的模板渲染引擎和层叠样式表来设计实现,页面之间的切换也使用简单粗暴的重定向,增加了不必要的请求数据,增加了浏览器和服务器的压力。要解决这个问题,可以引入如JavaScript、PHP等网页脚本语言,Vue.js、React、Angular等前端框架。这些技术都被广泛应用于现代主流网页。

这次毕业设计对于我来说,是一次难得的机会。通过这些实践,我学习的更加工程化的专业知识,锻炼了动手实践能力,培养了软件设计能力,培养了大局观,统筹协调各个模块间的划分与通信。同时,也暴露出了我在某些方面还存在这不足之处。

致谢

本毕业论文在~~??????老师的悉心指导下完成。从论文的选题,撰写到最后的定稿,??~~老师都给了我热情的帮助和指导。同时,本毕业论文的完成也离不开各位任课老师认真负责的授业,我能够很好地掌握专业知识并活用在毕业设计之中。在四年的本科学习和生活期间,我始终感受着老师们的无私关怀和精心指导。在此,我向全体教师表示由衷的感谢。

另外,也要感谢我身边的每个人带给我的帮助。我的家人给我生活上的鼓励和支持,使我能够全心投入到学习与工作中。我的同学以及浙江~~????~~科技有限公司的同事和领导们给予我技术上的指导,使我能够在工作岗位上的同时顺利完成学业。

最后,衷心感谢在百忙之中抽出时间评阅论文和参加答辩的各位专家、教授。

参考文献

[1] Goodfellow I J, Pouget-Abadie J, Mirza M, et al. Generative adversarial networks[J]. arXiv preprint arXiv:1406.2661, 2014.

[2] Radford A, Metz L, Chintala S. Unsupervised representation learning with deep convolutional generative adversarial networks[J]. arXiv preprint arXiv:1511.06434, 2015.

[3] Arjovsky M, Bottou L. Towards principled methods for training generative adversarial networks[J]. arXiv preprint arXiv:1701.04862, 2017.

[4] Arjovsky M, Chintala S, Bottou L. Wasserstein generative adversarial networks[C]//International conference on machine learning. PMLR, 2017: 214-223.

[5] Gulrajani I, Ahmed F, Arjovsky M, et al. Improved training of wasserstein gans[J]. arXiv preprint arXiv:1704.00028, 2017.

[6] Karras T, Aila T, Laine S, et al. Progressive growing of gans for improved quality, stability, and variation[J]. arXiv preprint arXiv:1710.10196, 2017.

[7] Karras T, Laine S, Aila T. A style-based generator architecture for generative adversarial networks[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 4401-4410.

[8] Karras T, Laine S, Aittala M, et al. Analyzing and improving the image quality of stylegan[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020: 8110-8119.

[9] Karras T, Aittala M, Hellsten J, et al. Training generative adversarial networks with limited data[J]. arXiv preprint arXiv:2006.06676, 2020.

[10] Mirza M, Osindero S. Conditional generative adversarial nets[J]. arXiv preprint arXiv:1411.1784, 2014.

[11] Odena A, Olah C, Shlens J. Conditional image synthesis with auxiliary classifier gans[C]//International conference on machine learning. PMLR, 2017: 2642-2651.

[12] 张扬, 马小虎. 基于改进生成对抗网络的动漫人物头像生成算法[J]. 计算机科学, 48(1): 182-189.

[13] Jin Y, Zhang J, Li M, et al. Towards the automatic anime characters creation with generative adversarial networks[J]. arXiv preprint arXiv:1708.05509, 2017.

[14] Oeldorf C, Spanakis G. LoGANv2: Conditional style-based logo generation with generative adversarial networks[C]//2019 18th IEEE International Conference On Machine Learning And Applications (ICMLA). IEEE, 2019: 462-468.

[15] Isola P, Zhu J Y, Zhou T, et al. Image-to-image translation with conditional adversarial networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 1125-1134.

[16] Zhu J Y, Park T, Isola P, et al. Unpaired image-to-image translation using cycle-consistent adversarial networks[C]//Proceedings of the IEEE international conference on computer vision. 2017: 2223-2232.

[17] Chen Y, Lai Y K, Liu Y J. Cartoongan: Generative adversarial networks for photo cartoonization[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 9465-9474.

[18] Choi Y, Choi M, Kim M, et al. Stargan: Unified generative adversarial networks for multi-domain image-to-image translation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 8789-8797.

[19] Kim J, Kim M, Kang H, et al. U-GAT-IT: unsupervised generative attentional networks with adaptive layer-instance normalization for image-to-image translation[J]. arXiv preprint arXiv:1907.10830, 2019.

[20] Nizan O, Tal A. Breaking the cycle-colleagues are all you need[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020: 7860-7869.

[21] Kodali N, Abernethy J, Hays J, et al. On convergence and stability of gans[J]. arXiv preprint arXiv:1705.07215, 2017.

[22] Karnewar A, Wang O. Msg-gan: Multi-scale gradients for generative adversarial networks[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020: 7799-7808.

[23] Brock A, Donahue J, Simonyan K. Large scale GAN training for high fidelity natural image synthesis[J]. arXiv preprint arXiv:1809.11096, 2018.

[24] Zhang H, Goodfellow I, Metaxas D, et al. Self-attention generative adversarial networks[C]//International conference on machine learning. PMLR, 2019: 7354-7363.

[25] Gan-qp J S. A novel gan framework without gradient vanishing and lipschitz constraint[J]. arXiv preprint arXiv:1811.07296, 2018.

[26] Ahn N, Kang B, Sohn K A. Fast, accurate, and lightweight super-resolution with cascading residual network[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 252-268.

Footnotes

  1. https://www.gwern.net/Faces#appendix

  2. https://www.gwern.net/Danbooru2020

  3. https://www.pixiv.net/

  4. https://fantia.jp/

  5. https://twitter.com/

  6. https://www.thiswaifudoesnotexist.net/

  7. https://www.gwern.net/Danbooru2020#image-booru-description

  8. https://www.kaggle.com/mylesoneill/tagged-anime-illustrations

  9. http://ultraist.hatenablog.com/entry/20110718/1310965532

  10. https://www.gwern.net/TWDNE

  11. https://github.com/yu45020/Waifu2x