multi-style_portrait_stylization|人像多风格漫画
模型描述
街拍,人像,团建照片…随意上传您心仪的照片,选择对应风格(日漫风,3D风,手绘风等等),一键即可转换为不同风格的卡通化图片!多风格的人像模型已经内置好,点点鼠标就可以抢占朋友圈的C位。
期望模型使用方式以及适用范围
该任务采用一种全新的域校准图像翻译模型DCT-Net(Domain-Calibrated Translation),利用小样本的风格数据,即可得到高保真、强鲁棒、易拓展的人像风格转换模型,并通过端到端推理快速得到风格转换结果。
使用方式和范围
使用方式:
- 支持GPU/CPU推理,在任意真实人物图像上进行直接推理;
使用范围:
- 包含人脸的人像照片(3通道RGB图像,支持PNG、JPG、JPEG格式),人脸分辨率大于100×100,总体图像分辨率小于3000×3000,低质人脸图像建议预先人脸增强处理。
目标场景:
- 艺术创作、社交娱乐、隐私保护场景,自动化生成卡通肖像。
模型局限性以及可能的偏差
- 低质/低分辨率人脸图像由于本身内容信息丢失严重,无法得到理想转换效果,可预先采用人脸增强模型预处理图像解决;
- 小样本数据涵盖场景有限,人脸暗光、阴影干扰可能会影响生成效果。
模型推理流程
预处理
- 人脸关键点检测
- 人脸提取&对齐,得到256×256大小的对齐人脸
推理
- 为控制推理效率,人脸及背景resize到指定大小分别推理,再背景融合得到最终效果;
- 亦可将整图依据人脸尺度整体缩放到合适尺寸,直接单次推理
数据评估
使用CelebA公开人脸数据集进行评测,在FID/ID/用户偏好等指标上均达SOTA结果:
Method | FID | ID | Pref.A | Pref.B |
---|---|---|---|---|
CycleGAN | 57.08 | 0.55 | 7.1 | 1.4 |
U-GAT-IT | 68.40 | 0.58 | 5.0 | 1.5 |
Toonify | 55.27 | 0.62 | 3.7 | 4.2 |
pSp | 69.38 | 0.60 | 1.6 | 2.5 |
Ours | 35.92 | 0.71 | 82.6 | 90.5 |
部署教程
如果您是初学者,对于命令行不太理解,那么请按下键盘上的Win键+R键
后,在弹出的新窗口内输入CMD并按下回车,打开CMD窗口,按顺序执行如下的每一条命令。
首先我们需要确认一个工作目录,用来存放multi-style_portrait_stylization的相关环境依赖文件。本站所选择的目录为D盘的根目录下openai.wiki
文件夹,完整路径为:D:\openai.wiki\multi-style_portrait_stylization
。
检测D盘是否在openai.wiki目录下有没有multi-style_portrait_stylization
文件夹,没有则创建该文件夹。
if not exist D:\openai.wiki\multi-style_portrait_stylization mkdir D:\openai.wiki\multi-style_portrait_stylization
强制切换工作路径为D盘的openai.wiki\multi-style_portrait_stylization
文件夹。
cd /d D:\openai.wiki\multi-style_portrait_stylization
为不影响电脑中的现有环境,请一定要安装Conda,如果您不知道什么是Conda,或者未安装过Conda,请参考如下文章,安装部署Conda之后再继续以下步骤。
在CMD中执行下面的命令行,创建Conda虚拟环境至该项目的目录中,方便日后重装系统也能够正常使用,无需重新部署环境。
conda create -p D:\openai.wiki\multi-style_portrait_stylization\ENV python=3.7
执行完成上面的命令之后,将会在CMD窗口中看到Proceed ([y]/n)?
提示,我们直接按下回车即可。
初始化Conda环境,避免后续可能报错。
conda init cmd.exe
激活已创建的Conda环境,这样我们可以将我们后续所需要的所有环境依赖都安装至此环境下。
conda activate D:\openai.wiki\multi-style_portrait_stylization\ENV
执行如下命令,安装阿里达摩院相关依赖。
pip install modelscope
执行如下命令,安装torch
依赖。
pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
执行如下命令,安装CV2依赖库。
pip install opencv-python
关于tensorflow的安装,支持CPU和GPU双版本,以下两行代码选择其中一个执行安装即可。
- 如果你想用CPU来计算,请复制第一行内容执行。
- 如果你想用GPU来计算,请复制第二行内容执行。
pip install --upgrade tensorflow==1.15
pip install --upgrade tensorflow-gpu==1.15
执行如下命令,卸载较新的protobuf版本依赖库。
pip uninstall protobuf
执行如下命令,安装3.20.0版本的protobuf依赖库。
pip install --force-reinstall protobuf==3.20.0
执行如下命令,安装easydict依赖库。
pip install easydict
使用教程
⚠️注意:您所使用的图片必须为PNG格式,如果使用其它格式基本必会报错!
推荐下载VS Code代码编辑器,然后在代码编辑器器内新建一个Python文件,粘贴如下代码,在代码编辑器的右下角选择Python环境为D:\openai.wiki\multi-style_portrait_stylization\ENV
。
素描
本次本站先以素描模型为例,让您先将代码能够正常运行,以下是运行时所需要的代码和输出示例。
该模型官方并未给了示例,本站已经帮您写好了相关的代码,复制粘贴即可使用。
注意:请自行修改相应名称和路径为自己项目结构,然后再执行,否则会报错。
# 此脚本由openai.wiki提供,转载请注明出处,谢谢配合。 import cv2 from modelscope.outputs import OutputKeys from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-sketch_compound-models') # 图片路径 resultIMGName = 'Beauty_Girl' # 原图格式 | 尽量不要改 resultIMGFormat = '.png' # 原图路径 resultIMGPath = 'D:\openai.wiki\multi-style_portrait_stylization' # 输出图像名称 outputIMGName = 'Beauty_Girl_FX' # 输出格式 | 尽量不要改 outputFormat = '.png' # 输出路径 outputIMGPath = 'D:\openai.wiki\multi-style_portrait_stylization' result = img_cartoon(('%s/%s%s'%(resultIMGPath,resultIMGName,resultIMGFormat)).replace('\\', '/')) cv2.imwrite((('%s/%s%s'%(outputIMGPath,outputIMGName,outputFormat)).replace('\\', '/')), result[OutputKeys.OUTPUT_IMG]) print ('输出完成')
效果展示
可以看到效果还可以,中规中矩吧。
其它效果
代码示例
为方便大家使用,本站已经将所有效果的代码整到了一起,大家只使用这一段代码,就可以生成各种效果啦。只需要修改Fun
的参数即可。
# 此脚本由openai.wiki提供,转载请注明出处,谢谢配合。 from modelscope.outputs import OutputKeys from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks import cv2 # 文本识别 class DCT_Net(): def __init__(self, Fun): if Fun == 'SuMiao': # 素描模型 self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-sketch_compound-models') elif Fun == 'YiShu': # 艺术模型 self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-artstyle_compound-models') elif Fun == '3D': # 3D模型 self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-3d_compound-models') elif Fun == 'ShouHui': # 手绘模型 self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-handdrawn_compound-models') elif Fun == 'KaTong': # 卡通模型 self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon_compound-models') # 读取本地文件 def file_models(self): result = self.img_cartoon(IMG_File) cv2.imwrite(OUT_File, result[OutputKeys.OUTPUT_IMG]) # 自定义配置 Fun = '3D' # 素描=SuMiao;艺术=YiShu;3D;手绘=ShouHui;卡通=KaTong。 IMG_File = 'D:/openai.wiki/multi-style_portrait_stylization/Beauty_Girl.png' # 本地文件路径 OUT_File = 'D:/openai.wiki/multi-style_portrait_stylization/Beauty_Girl_%s.png'%Fun # 文件输出路径 # 以下内容无需修改 DCTNet = DCT_Net(Fun) DCTNet.file_models()
效果展示
All in one
如果您希望直接一次性通过一张图输出所有效果,可以使用如下代码,将会自动处理输入的图片,将其循环输出所有特效,非常方便。
# 此脚本由openai.wiki提供,转载请注明出处,谢谢配合。 from modelscope.outputs import OutputKeys from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks import cv2 # 文本识别 class DCT_Net(): def __init__(self, Fun): if Fun == 'SuMiao': # 素描模型 self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-sketch_compound-models') elif Fun == 'YiShu': # 艺术模型 self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-artstyle_compound-models') elif Fun == '3D': # 3D模型 self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-3d_compound-models') elif Fun == 'ShouHui': # 手绘模型 self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-handdrawn_compound-models') elif Fun == 'KaTong': # 卡通模型 self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon_compound-models') # 读取本地文件 def file_models(self): result = self.img_cartoon(IMG_File) cv2.imwrite(OUT_File, result[OutputKeys.OUTPUT_IMG]) # 自定义配置 resultIMGName = 'Beauty_Girl' # 图片名称 resultIMGFormat = '.png' # 原图格式 | 尽量不要改 resultIMGPath = 'D:\openai.wiki\multi-style_portrait_stylization' # 原图路径 # 以下内容无需修改 IMG_File = ('%s/%s%s'%(resultIMGPath,resultIMGName,resultIMGFormat)).replace('\\', '/') FX = ['SuMiao','YiShu','3D','ShouHui','KaTong'] for i in range(len(FX)): OUT_File = ('%s/%s_%s%s'%(resultIMGPath,resultIMGName,FX[i],resultIMGFormat)).replace('\\', '/') # 文件输出路径 DCTNet = DCT_Net(FX[i]) DCTNet.file_models()
colab快速部署:需修改为自己的路径
https://colab.research.google.com/drive/1wnQ42VuXg1q2Olt30WsNDodlzhyGk_dt?usp=drive_link