机器之心报导
参加:魔王、张倩、Jamin
之前开源的「人脸变卡通」项目往往能够供给许多鬼畜资料,要么嘴歪眼斜,要么脸型歪曲,乃至让你的五官看上去是随意放到脸盘里的,彻底不像阳世该有的画风……但小视科技最近开源的一个项目如同改变了这种形象,不光能够生成逼真的卡通头像,还能运用微信小程序做成动图表情包,普通人也能够零门槛上手。
这个项目名叫「人像卡通化 (Photo to Cartoon)」,已经在 GitHub 上开源。但关于不想着手下载各种软件、数据集、练习模型的普通用户,该公司开放了一个名为「AI 卡通秀」的小程序,能够生成各种风格的卡通相片、gif 表情包,可彻底满意交际需求。
先来看一下小程序的生成作用:
看上去如同还不错。但考虑到明星照或许会被用作练习数据,机器之心小编决议用自己的相片试一下:
作用仍然逼真!并且,除了惯例卡通头像之外,你还能够再一次进行挑选生成图画的滤镜和风格,如怀旧、字云、素描、剪纸、豹纹等。
小姐姐能完美转化,那小哥哥呢?咱们拿象牙山 F4 之一的谢广坤测验了一下(众所周知,广坤叔的颜值仍是很能打的):
因为相片中人物右侧下巴的鸿沟不太显着,生成的卡通头像略有瑕疵,但仍是一眼就能看出人物特征。当然,这还不是最欢喜的。接下来,你还能够做表情包!
话说回来,这种需求上传相片的运用常常引发咱们关于隐私问题的忧虑。有了「Zao」的前车之鉴,「AI 卡通秀」在《用户协议》中表明,「除非为了改进咱们为您供给的服务或另行取得您的再次赞同,不然咱们不会以其他方法或意图运用上述内容(头像相片等)」。
假如你仍是忧虑隐私问题,能够直接去 GitHub 上获取开源数据和代码,练习自己的模型进行测验。
项目地址:https://github.com/minivision-ai/photo2cartoon
接下来,咱们就来看看这一运用背面的技能细节。
这么好玩的作用是怎样做到的呢?
人像卡通风格烘托的方针是,在坚持原图画 ID 信息和纹路细节的一起,将实在相片转化为卡通风格的非实在感图画。
可是图画卡通化使命面临着一些难题:
卡通图画往往有明晰的边际,滑润的色块和经过简化的纹路,与其他艺术风格有很大差异。运用传统图画处理技能生成的卡通图无法自适应地处理杂乱的光照和纹路,作用较差;依据风格搬迁的办法无法对细节进行精确地勾勒。
数据获取难度大。制作风格精巧且一致的卡通画耗时较多、本钱较高,且转化后的卡通画和原相片的脸型及五官形状有差异,因而不构成像素级的成对数据,难以选用依据成对数据的图画翻译(Paired Image Translation)办法。
相片卡通化后简单丢掉身份信息。依据非成对数据的图画翻译(Unpaired Image Translation)办法中的循环一致性丢掉(Cycle Loss)无法对输入输出的 id 进行有用束缚。
那么怎么处理这样一些问题呢?
小视科技的研讨团队提出了一种依据生成对立网络的卡通化模型,只需少数非成对练习数据,就能取得美丽的成果。卡通风格烘托网络是该处理方案的中心,它首要由特征提取、特征交融和特征重建三部分所组成。
全体结构由下图所示,该结构依据近期研讨 U-GAT-IT(论文《U-GAT-IT: Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalization for Image-to-Image Translation》。
模型结构方面,在 U-GAT-IT 的基础上,研讨者在编码器之前和解码器之后各增加了 2 个 hourglass 模块,渐进地提高模型特征笼统和重建才能。
特征提取
特征提取部分包含堆叠的 Hourglass 模块、下采样模块和残差模块。
Hourglass 模块常用于姿势估量,它能够在特征提取的一起坚持语义信息方位不变。该办法选用堆叠的 Hourglass 模块,渐进地将输入图画笼统成易于编码的方法。4 个残差模块则用于编码特征并提取计算信息,用于后续的特征交融。
特征交融
近期论文 U-GAT-IT 提出了一种归一化办法——AdaLIN,能够主动调理 Instance Norm 和 Layer Norm 的比重,再结合注意力机制完成人像日漫风格转化。
研讨人员依据此提出了 Soft-AdaLIN(Soft Adaptive Layer-Instance Normalization)归一化办法。先将输入图画的编码特征计算信息和卡通特征计算信息交融,再以 AdaLIN 的方法反归一化解码特征,使卡通画成果更好地坚持输入图画的语义内容。
不同于原始的 AdaLIN,这儿的「Soft」表现在不直接运用卡通特征计算量来反归一化解码特征,而是经过可学习的权重 w_μ 和 w_σ 来加权均匀卡通特征和编码特征的计算量,并以此对归一化后的解码特征进行反归一化。
编码特征计算量 μ_en 和 σ_en 提取自特征提取阶段中各 Resblock 的输出特征,卡通特征计算量则经过全衔接层提取自 CAM(Class Activation Mapping)模块输出的特征图。加权后的计算量为:
Soft-AdaLIN 操作能够表明为:
特征重建
特征重建部分担任从编码特征生成对应的卡通图画。
这部分选用与特征提取部分对称的结构,经过解码模块、上采样模块和 Hourglass 模块生成卡通画成果。
丢掉函数
如上所述,相片卡通化后简单丢掉身份信息。为了使输出成果表现人物信息,除了惯例的 Cycle Loss 和 GAN Loss,研讨人员还引入了 ID Loss:运用预练习的人脸辨认模型来提取输入真人照和生成卡通画的 id 特征,并用余弦间隔来束缚,使卡通画的 id 信息与输入相片尽或许类似。
怎么完成?
装置依靠库
项目所需的首要依靠库如下:
python 3.6
pytorch 1.4
tensorflow-gpu 1.14
face-alignment
dlib
Clone
git clone https://github.com/minivision-ailab/photo2cartoon.git
cd ./photo2cartoon
下载资源
资源地址:
https://drive.google.com/open?id=1eDNGZT3jszHLXQ9XGIUPtcu72HdBmHuX
https://pan.baidu.com/s/1DxWWBAoaBpsei_rynZUZzw 提取码:z2nm
人像卡通化预练习模型:photo2cartoon_weights.pt,寄存在 models 途径下。
头像切割模型:seg_model_384.pb,寄存在 utils 途径下。
人脸辨认预练习模型:model_mobilefacenet.pth,寄存在 models 途径下。(From: InsightFace_Pytorch)
卡通画开源数据:cartoon_data,包含 trainB 和 testB。
测验
将一张测验相片(亚洲年青女人)转化为卡通风格:
python test.py --photo_path ./images/photo_test.jpg --save_path ./images/cartoon_result.png
练习
1. 数据预备
练习数据包含实在相片和卡通画像,为下降练习杂乱度,团队对两类数据进行了如下预处理:
检测人脸及要害点。
依据要害点旋转校对人脸。
将要害点鸿沟框按固定的比例扩张并裁剪出人脸区域。
运用人像切割模型将布景置白。
团队开源了 204 张处理后的卡通画数据,用户还需预备约 1000 张人像相片(为匹配卡通数据,尽量运用亚洲年青女人相片,人脸巨细最好超越 200x200 像素),运用以下指令进行预处理:
python data_process.py --data_path YourPhotoFolderPath --save_path YourSaveFolderPath
将处理后的数据依照以下层级寄存,trainA、testA 中寄存相片头像数据,trainB、testB 中寄存卡通头像数据。
├── dataset
└── photo2cartoon
├── trainA
├── xxx.jpg
├── yyy.png
└── ...
├── trainB
├── zzz.jpg
├── c.jpg
├── ddd.png
└── ...
2. 练习
从头练习:
python train.py --dataset photo2cartoon
加载预练习参数:
python train.py --dataset photo2cartoon --pretrained_weights models/photo2cartoon_weights.pt
机器之心第二期「AI 开发者生长方案」系列公开课已正式开端,本期主题为《轻松上手开源结构 MindSpore》。该系列课程第一课将于 4 月 23 日 20:00 开讲,欢迎读者报名学习。