零门槛人像转漫画,GIF表情包,本项目不仅开源,还做成小程序,甚至可以让你的五官随随便便放在面盘上,完全不像杨戬应该有的画风……不过最近小石科技开源的一个项目似乎改变了这种印象。不仅可以生成逼真的卡通头像,还可以用微信小程序制作动画表情,普通人也可以零门槛上手。这个名为“PhototoCartoon”的项目在GitHub上是开源的。但对于不想下载各种软件、数据集、训练模型的普通用户,公司开放了一款名为“AI卡通秀”的小程序,可以生成各种风格的卡通照片和gif表情,可以充分满足社会需要。先来看看小程序的生成效果:看起来还不错。不过考虑到明星照片可能会作为训练数据,小编还是决定用自己的照片试试:效果还是很逼真!并且,除了常规的卡通头像,你还可以选择滤镜和风格来生成图片,比如怀旧、文字云、素描、剪纸、豹纹等等。小姐姐可以完美变身,那小弟弟呢?我们用象牙山F4之一的谢广坤进行测试(众所周知,广坤大叔的颜值还是很不错的):由于照片中人物右下巴的边框不明显,所以生成的卡通头像是略有瑕疵,但还是一眼就能看出人物的特点。当然,这还不是最开心的。接下来,你还可以制作表情包!话虽如此,这种需要上传照片的应用程序往往会引起人们对隐私问题的担忧。借鉴“Zao”、“AI卡通秀”在《用户协议》中的教训,“除非我们改进为您提供的服务或再次征得您的同意,否则我们不会将上述内容用于其他形式或目的(头像、ETC。)”。如果你还担心隐私问题,可以直接上GitHub获取开源数据和代码,训练自己的模型进行测试。项目地址:https://github.com/minivision-ai/photo2cartoon接下来,我们来看看这个应用背后的技术细节。这么好玩的效果是怎么来的呢?肖像卡通风格渲染的目标是将真实照片转换为卡通风格的非真实感图像,同时保持原始图像ID信息和纹理细节。但图像卡通化的任务面临一些困难:卡通图像往往具有清晰的边缘、光滑的色块和简化的纹理,这与其他艺术风格有很大不同。使用传统图像处理技术生成的卡通图像不能自适应处理复杂的光照和纹理,效果较差;基于风格迁移的方法无法准确勾勒出细节。数据获取困难。画出一幅画风精美统一的漫画需要花费大量的时间和成本,而且转换后的漫画的人脸和五官与原图不同,因此不构成像素级的配对数据,是难以使用成对数据的图像翻译(PairedImageTranslation)方法。照片卡通化后很容易丢失身份信息。基于未配对数据的UnpairedImageTranslation方法中的循环一致性损失(CycleLoss)不能有效约束输入输出的id。那么如何解决这些问题呢?小石科技研究团队提出了一种基于生成对抗网络的卡通模型,仅需少量未配对的训练数据即可获得漂亮的结果。卡通风格渲染网络是解决方案的核心,主要由特征提取、特征融合和特征重构三部分组成。整体框架如下图所示,是基于最近的研究U-GAT-IT(论文《U-GAT-IT: Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalization for Image-to-Image Translation》)。在模型结构方面,研究人员在U-GAT-IT的基础上,增加了两个沙漏模块,逐步提升模型特征抽象和重构能力。特征提取部分包括堆叠式沙漏模块、下采样模块和残差模块。Hourglass模块常用于姿态估计,在特征提取的同时可以保持语义信息的位置不变。该方法使用堆叠的Hourglass模块将输入图像逐渐抽象为易于编码的形式。四个残差模块用于对特征进行编码,并提取统计信息用于后续的特征融合。特征融合最近的论文U-GAT-IT提出了一种归一化方法——AdaLIN,可以自动调整InstanceNorm和LayerNorm的比例,然后结合attention机制实现人像日系风格的转换。基于此,研究人员提出了Soft-AdaLIN(SoftAdaptiveLayer-InstanceNormalization)归一化方法。首先将输入图像的编码特征统计与卡通特征统计进行融合,然后采用AdaLIN的方式对解码特征进行反归一化处理,从而更好的保持卡通效果。输入图像的语义内容。和原来的AdaLIN不同的是,这里的“Soft”并没有直接使用卡通特征统计来反规范化解码特征,而是通过可学习的权重w_μ和w_σ对平均卡通特征和编码特征的统计进行加权,并以此来反规范化归一化解码功能。在特征提取阶段从每个Resblock的输出特征中提取编码特征统计量μ_en和σ_en,通过全连接层从CAM(ClassActivationMapping)模块输出的特征图中提取卡通特征统计量。加权统计为:Soft-AdaLIN操作可以表示为:特征重建特征重建部分负责从编码特征中生成相应的卡通图像。该部分采用与特征提取部分对称的结构,通过解码模块、上采样模块和Hourglass模块生成卡通结果。损失函数如前所述,照片卡通化后身份信息很容易丢失。为了使输出结果能够反映人物信息,除了常规的CycleLoss和GANLoss,研究人员还引入了IDLoss:利用预训练的人脸识别模型提取输入真实照片的id特征,生成cartoons,并使用余弦距离来约束,使得卡通的id信息尽可能与输入的照片相似。如何实现?安装依赖库项目需要的主要依赖库如下:python3.6pytorch1.4tensorflow-gpu1.14face-alignmentdlibClonegitclonehttps://github.com/minivision-ailab/photo2cartoon.gitcd./photo2cartoon下载资源资源地址:https:///drive.google.com/open?id=1eDNGZT3jszHLXQ9XGIUPtcu72HdBmHuXhttps://pan.baidu.com/s/1DxWWBAoaBpsei_rynZUZzw提取码:z2nm人像卡通预训练模型:photo2cartoon_weights.pt,存放在models路径下。头像分割模型:seg_model_384.pb,存放在utils路径下。人脸识别预训练模型:model_mobilefacenet.pth,存放在models路径下。(来自:InsightFace_Pytorch)卡通开源数据:cartoon_data,包括trainB和testB。测试将一张测试照片(亚洲年轻女性)转换成卡通风格:pythontest.py--photo_path./images/photo_test.jpg--save_path./images/cartoon_result.png训练1.数据准备训练数据包括真实照片和对于卡通人像,为了降低训练复杂度,团队对两类数据进行了如下预处理:检测人脸和关键点。根据关键点旋转修正人脸。按固定比例扩展关键点边界框并裁剪面部区域。使用人像分割模型来美白背景。团队开源了204张处理过的卡通数据,用户需要准备约1000张人像照片(为配合卡通数据,尽量使用亚洲年轻女性照片,人脸尺寸最好超过200x200像素),使用预处理命令如下:pythondata_process.py--data_pathYourPhotoFolderPath--save_pathYourSaveFolderPath将处理后的数据按照以下层级进行存储,照片头像数据存储在trainA和testA中,卡通头像数据存储在trainB和testB中。├──数据集└──photo2cartoon├──trainA├──xxx.jpg├──yyy.png└──...├──trainB├──zzz.jpg├──www.png└──...├──testA├──aaa.jpg├──bbb.png└──...└──testB├──ccc.jpg├──ddd.png└──...2。再次训练训练:pythontrain.py--datasetphoto2cartoon加载预训练参数:pythontrain.py--datasetphoto2cartoon--pretrained_weightsmodels/photo2cartoon_weights.pt
