人像卡通化 (Photo to Cartoon)

该项目为小视科技卡通肖像探索项目。您可使用微信扫描下方二维码或搜索“AI卡通秀”小程序体验卡通化效果。

简介

人像卡通风格渲染的目标是,在保持原图像ID信息和纹理细节的同时,将真实照片转换为卡通风格的非真实感图像。我们的思路是,从大量照片/卡通数据中习得照片到卡通画的映射。一般而言,基于成对数据的pix2pix方法能达到较好的图像转换效果,但本任务的输入输出轮廓并非一一对应,例如卡通风格的眼睛更大、下巴更瘦;且成对的数据绘制难度大、成本较高,因此我们采用unpaired image translation方法来实现。

Unpaired image translation流派最经典方法是CycleGAN,但原始CycleGAN的生成结果往往存在较为明显的伪影且不稳定。近期的论文U-GAT-IT提出了一种归一化方法——AdaLIN,能够自动调节Instance Norm和Layer Norm的比重,再结合attention机制能够实现精美的人像日漫风格转换。

与夸张的日漫风不同,我们的卡通风格更偏写实,要求既有卡通画的简洁Q萌,又有明确的身份信息。为此我们增加了Face ID Loss,使用预训练的人脸识别模型提取照片和卡通画的ID特征,通过余弦距离来约束生成的卡通画。

此外,我们提出了一种Soft-AdaLIN(Soft Adaptive Layer-Instance Normalization)归一化方法,在反规范化时将编码器的均值方差(照片特征)与解码器的均值方差(卡通特征)相融合。

模型结构方面,在U-GAT-IT的基础上,我们在编码器之前和解码器之后各增加了2个hourglass模块,渐进地提升模型特征抽象和重建能力。

由于实验数据较为匮乏,为了降低训练难度,我们将数据处理成固定的模式。首先检测图像中的人脸及关键点,根据人脸关键点旋转校正图像,并按统一标准裁剪,再将裁剪后的头像输入人像分割模型去除背景。

Start

安装依赖库

项目所需的主要依赖库如下:

python 3.6

pytorch 1.4

tensorflow-gpu 1.14

face-alignment

dlib

Clone:

git clone https://github.com/minivision-ai/photo2cartoon.git

cd ./photo2cartoon

下载资源

谷歌网盘 | 百度网盘 提取码:y2ch

人像卡通化预训练模型:photo2cartoon_weights.pt(20200504更新),存放在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

├── www.png

└── ...

├── testA

├── aaa.jpg

├── bbb.png

└── ...

└── testB

├── ccc.jpg

├── ddd.png

└── ...

2.训练

重新训练:

python train.py --dataset photo2cartoon

加载预训练参数:

python train.py --dataset photo2cartoon --pretrained_weights models/photo2cartoon_weights.pt

Q&A

Q:为什么开源的卡通化模型与小程序中的效果有差异?

A:开源模型的训练数据收集自互联网,为了得到更加精美的效果,我们在训练小程序中卡通化模型时,采用了定制的卡通画数据(200多张),且增大了输入分辨率。此外,小程序中的人脸特征提取器采用自研的识别模型,效果优于本项目使用的开源识别模型。

Q:如何选取效果最好的模型?

A:首先训练模型200k iterations,然后使用FID指标挑选出最优模型,最终挑选出的模型为迭代90k iterations时的模型。

Q:关于人脸特征提取模型。

A:实验中我们发现,使用自研的识别模型计算Face ID Loss训练效果远好于使用开源识别模型,若训练效果出现鲁棒性问题,可尝试将Face ID Loss权重置零。

Q:人像分割模型是否能用与分割半身像?

A:不能。该模型是针对本项目训练的专用模型,需先裁剪出人脸区域再输入。

Tips

我们开源的模型是基于亚洲年轻女性训练的,对于其他人群覆盖不足,您可根据使用场景自行收集相应人群的数据进行训练。我们的开放平台提供了能够覆盖各类人群的卡通化服务,您可前往体验。

参考

U-GAT-IT: Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalization for Image-to-Image Translation [Paper][Code]

python头像转卡通_将真实照片转换为卡通风格的非真实感图像相关推荐

  1. python头像转卡通_Python实现将照片变成卡通图片的方法【基于opencv】

    本文实例讲述了Python实现将照片变成卡通图片的方法.分享给大家供大家参考,具体如下: 之前的文章介绍了使用Photoshop将照片变成卡通图片,今次介绍用代码来实现这项任务,可以就此探查各种滤镜的 ...

  2. python照片转卡通_Python实现将照片变成卡通图片的方法【基于opencv】

    本文实例讲述了Python实现将照片变成卡通图片的方法.分享给大家供大家参考,具体如下: 之前的文章介绍了使用Photoshop将照片变成卡通图片,今次介绍用代码来实现这项任务,可以就此探查各种滤镜的 ...

  3. python怎么把照片转成卡通_Python实现将照片变成卡通图片的方法【基于opencv】

    Python实现将照片变成卡通图片的方法[基于opencv]

  4. python怎么把照片转成卡通_如何把照片变成手绘动漫化?

    12/10更新送福利 知乎专供,虎课网7天全站通VIP,全站5w+视频教程随意看!(当然也包括回答中的所有视频链接) ============================== 一.用电脑PS做 点 ...

  5. python头像怎么弄_如何用 Python 把朋友头像变表情包?!!

    转自:Python学习与数据挖掘 在日常生活中,我们经常会存取一些朋友们的丑照,在这个项目中,我们以萌萌哒的熊猫头作为背景,然后试着在背景图上加入朋友们的照片,效果如下图所示,完整代码已放在文末. 实 ...

  6. python 绘图英文字体_如何在matplotlib和networkx中显示非英语字体?

    这是这个question的后续问题.因为它解决了一个更一般的问题,所以我把它作为一个新的问题.在 我有一个网络,其中节点的标签是波斯语(阿拉伯语字母表).当我试图使用networkx来显示我的网络时, ...

  7. Python 照片转换为素描风格并保存

    import cv2 img = cv2.imread("E:\\images\\10.jpeg")#自己电脑图片路径加文件名称和格式## 将照片灰度化处理 gray_image ...

  8. python笔记本函数参数_将jupyter笔记本转换为python脚本的最佳实践

    Life saver: as you're writing your notebooks, incrementally refactor your code into functions, writi ...

  9. python 年月日时分秒_如何将年月日转换为年月日时分秒

    2016-05-27 回答 什么语言实现? + ====== 如何在不同编程语言中实现普通时间 → unix时间戳(unix timestamp)? ====== + + java long epoc ...

最新文章

  1. iOS 设置app语言中文,比如 copy中文,拍照按钮cancel 中文
  2. 我司那产品经理丨第三期
  3. winform中关于panel中滚动条和键盘事件几点体会
  4. 帆软按钮控件变查询_帆软报表(多sheet)自定义分页查询
  5. python hashlib_python hashlib模块
  6. Office 2013中mathtype 6.x的安装方法简介
  7. HDU2020 绝对值排序【排序】
  8. android span的用法,android – 如何使用TextAppearanceSpan
  9. 分享]人生忠告——七天改变人生影响世界
  10. mysql 获得年月函数_mysql之日期函数
  11. 【小游戏】AB猜数字
  12. 统计学软件 Stata 16
  13. PTA:设计一个风扇Fan类 (20 分)
  14. 计算机二进制运算符,二进制布尔运算
  15. python七段数码管绘制实验报告_Python绘制七段数码管实例代码
  16. 云计算平台项目团队组织架构与缘起
  17. K8S部署机器学习平台
  18. linux安防监控,Linux平台下的安防监控系统设计与实现
  19. Matlab多项式求值(2)(roots和poly的使用)
  20. SWPUCTF2019web题复现

热门文章

  1. 996:只要能活着就好,不管活得多么糟糕
  2. keil5 MDK 中缺core_cm3.o 报错 解决办法
  3. html animation 属性,CSS3动画属性:动画(animation)
  4. SVM(support vector machine)算法详解中之转化对偶问题
  5. Beautifulsoup script var解析
  6. eyoucms 下载最新版框架后,解压缩到web目录下面,可以看到初始的目录结构如下:
  7. JMeter 进行函数助手MD5加密
  8. 看完这篇 final、finally 和 finalize 和面试官扯皮就没问题了
  9. 牛客:使徒袭来,小白兔分身
  10. 嵌入式开发之工具移植---tcpdump移植和使用