一、介绍

模型描述

街拍,人像,团建照片…随意上传您心仪的照片,选择对应风格(日漫风,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结果:

MethodFIDIDPref.APref.B
CycleGAN57.080.557.11.4
U-GAT-IT68.400.585.01.5
Toonify55.270.623.74.2
pSp69.380.601.62.5
Ours35.920.7182.690.5
multi-style_portrait_stylization|人像多风格漫画-openAI维基百科
原图

二、部署教程

如果您是初学者,对于命令行不太理解,那么请按下键盘上的Win键+R键后,在弹出的新窗口内输入CMD并按下回车,打开CMD窗口,按顺序执行如下的每一条命令。

首先我们需要确认一个工作目录,用来存放multi-style_portrait_stylization的相关环境依赖文件。本站所选择的目录为D盘的根目录下dataddd文件夹,完整路径为:D:\dataddd\multi-style_portrait_stylization

检测D盘是否在dataddd目录下有没有multi-style_portrait_stylization文件夹,没有则创建该文件夹。

if not exist D:\dataddd\multi-style_portrait_stylization mkdir D:\dataddd\multi-style_portrait_stylization

强制切换工作路径为D盘的dataddd\multi-style_portrait_stylization文件夹。

cd /d D:\dataddd\multi-style_portrait_stylization

为不影响电脑中的现有环境,请一定要安装Conda,如果您不知道什么是Conda,或者未安装过Conda,请参考如下文章,安装部署Conda之后再继续以下步骤。

在CMD中执行下面的命令行,创建Conda虚拟环境至该项目的目录中,方便日后重装系统也能够正常使用,无需重新部署环境。

conda create -p D:\dataddd\multi-style_portrait_stylization\ENV python=3.7

执行完成上面的命令之后,将会在CMD窗口中看到Proceed ([y]/n)?提示,我们直接按下回车即可。

初始化Conda环境,避免后续可能报错。

conda init cmd.exe

激活已创建的Conda环境,这样我们可以将我们后续所需要的所有环境依赖都安装至此环境下。

conda activate D:\dataddd\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:\dataddd\multi-style_portrait_stylization\ENV

素描

本次本站先以素描模型为例,让您先将代码能够正常运行,以下是运行时所需要的代码和输出示例。

该模型官方并未给了示例,本站已经帮您写好了相关的代码,复制粘贴即可使用。

注意:请自行修改相应名称和路径为自己项目结构,然后再执行,否则会报错。

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:\dataddd\multi-style_portrait_stylization'

# 输出图像名称

outputIMGName = 'Beauty_Girl_FX'

# 输出格式 | 尽量不要改

outputFormat = '.png'

# 输出路径

outputIMGPath = 'D:\dataddd\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 ('输出完成')

四、效果展示

可以看到效果还可以,中规中矩吧。

multi-style_portrait_stylization|人像多风格漫画-openAI维基百科
原图

其它效果

代码示例

为方便大家使用,本站已经将所有效果的代码整到了一起,大家只使用这一段代码,就可以生成各种效果啦。只需要修改Fun的参数即可。

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:/dataddd/multi-style_portrait_stylization/Beauty_Girl.png' # 本地文件路径

OUT_File = 'D:/dataddd/multi-style_portrait_stylization/Beauty_Girl_%s.png'%Fun # 文件输出路径

# 以下内容无需修改

DCTNet = DCT_Net(Fun)

DCTNet.file_models()

效果展示

multi-style_portrait_stylization|人像多风格漫画-openAI维基百科
原图

All in one

如果您希望直接一次性通过一张图输出所有效果,可以使用如下代码,将会自动处理输入的图片,将其循环输出所有特效,非常方便。

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:\dataddd\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()
multi-style_portrait_stylization|人像多风格漫画-openAI维基百科
原图