StyleCLIP项目由以色列的耶路撒冷希伯来大学、特拉维夫大学和Adobe研究所共同完成,它用对比语言—图像预训练(CLIP)模型的力量,为StyleGAN2 图像处理开发一个基于文本的输入界面,利用StyleGAN2的潜在空间来操纵生成的StyleGAN2图像,而不需要人工去操作或修饰图像。简单地说,就是写一段文字,指导StyleGAN2生成具备指定特征的图像。
论文地址:https://arxiv.org/abs/2103.17249
Github项目:https://github.com/orpatashnik/StyleCLI
关于开发环境的准备和配置过程,请参考:
【实战】(以色列·希伯来大学)文本驱动的StyleGAN2图像处理(一):StyleCLIP: Text-Driven Manipulation of StyleGAN Imagery
(一)架构简介
“潜码映射器”是StyleCLIP提供的一个卓有成效的方法,在操作StyleGAN2图像特征方面有十分优异的表现。下面是这个方法的架构(最核心的损失函数部分的介绍请参考论文原文,这里不再展开):
【翻译】图2. 我们的文本引导映射器的体系结构(在本例中使用的文本提示是:“惊讶的”)。源图像(左)首先被反转为潜码w;三个单独的映射函数(译者注:分别是“粗粒度映射”Mapper Coarse、“中粒度映射”Mapper Medium和“细粒度映射”Mapper Fine,每个Mapper函数都是4层全连接网络,通过训练得到稳定的参数)用来生成残差(蓝色),然后,这些残差与w求和,再经由预训练的StyleGAN模型(绿色)生成图像(右侧);最后,通过CLIP损失函数和一致性损失函数对Mapper的效果进行评估。
(二)上手试用
(2.1)下载Mapper模型:
紫色头发(purple hair):https://pan.baidu.com/s/1ZmMn7KTAm32abavSL7lgOg 提取码: piq6
碧昂丝(Beyonce):https://pan.baidu.com/s/1eEKQf2L7bs5nc5TIk_i8Ng 提取码: 438u
德普(Depp):https://pan.baidu.com/s/1gmRQoJ_46onZOrzwGb-t1A 提取码: 6brg
扎克伯格(Zuckerberg):https://pan.baidu.com/s/1ieT_wVHPwICgQU6v5I495A 提取码: tewk
泰勒·斯威夫特(Taylor Swift):https://pan.baidu.com/s/1yvD-UgXDYrJ5I9ljCm-7xQ 提取码: parm
把下载好的Mapper模型文件拷贝到工作目录的子目录下:./pretrainded_models/mapper
其他一些Mapper模型(运行时需要修改一行代码):
蓬蓬头(afro):https://pan.baidu.com/s/1Ui5LZwLdw-40g93FzH7znQ 提取码: ph43
生气(angry):https://pan.baidu.com/s/17_Nkxrqmf9mNCVjBBBfS4g 提取码: c424
波波头(bobcut):https://pan.baidu.com/s/1MhGuoV6jU50IH9uvXyK3PQ 提取码: jstx
锅盖头(bowlcut):https://pan.baidu.com/s/1O6tzKbqD0QJjILvHzjxnFg 提取码: ysei
卷发(curly hair):https://pan.baidu.com/s/1fPIZt-Fz-clgYPwBtO8lFw 提取码: 6jtn
莫霍头(mohawk):https://pan.baidu.com/s/1ZI5ARuUSEWa0VdnywKGAdA 提取码: a6rc
惊讶(surprised):https://pan.baidu.com/s/1Hc2ZcBDOCqZeDKkWU4ivMA 提取码: mh9d
把下载好的Mapper模型文件拷贝到工作目录的子目录下:./pretrainded_models/mapper
同时,需要修改 .\mapper\styleclip_mapper.py 中的一行:
# self.mapper.load_state_dict(get_keys(ckpt, 'mapper'), strict=True)self.mapper.load_state_dict(get_keys(ckpt, 'mapper'), strict=False)
否则,运行时会出现以下错误信息:
RuntimeError: Error(s) in loading state_dict for ......:
Missing key(s) in state_dict: ......
(2.2)下载人脸潜码数据:
https://pan.baidu.com/s/1FzNlgHQOtA1AXBJkuxM2_Q 提取码: rvei
下载好的人脸潜码数据文件拷贝到工作目录的子目录下:./latents_test
下载的人脸潜码数据一共有六个人的数据:希拉里·克林顿、马斯克、鲍里斯·约翰逊、伊恩·格伦、默克尔、泰勒·斯威夫特。
如果需要更多的人脸潜码数据,StyleCLIP官网建议使用 e4e 工具(Designing an Encoder for StyleGAN Image Manipulation):https://github.com/omertov/encoder4editing 。e4e 工具移植到Windows 10上的方法请参考:https://blog.csdn.net/weixin_41943311/article/details/118082017
(2.3)在StyleCLIP工作目录下创建test002.py,内容如下:
import torchvision
import argparse
from argparse import Namespace
from PIL import Imagefrom utils import ensure_checkpoint_exists
from mapper.scripts.inference import runparser = argparse.ArgumentParser()
parser.add_argument('--exp_dir', default="./results",type=str, help='Path to experiment output directory')
parser.add_argument('--checkpoint_path', default="./pretrained_models/mapper/zuckerberg.pt", type=str, help='Path to model checkpoint')
parser.add_argument('--couple_outputs', default=True, action='store_true', help='Whether to also save inputs + outputs side-by-side')
parser.add_argument('--mapper_type', default='LevelsMapper', type=str, help='Which mapper to use')
parser.add_argument('--no_coarse_mapper', default=False, action="store_true")
parser.add_argument('--no_medium_mapper', default=False, action="store_true")
parser.add_argument('--no_fine_mapper', default=False, action="store_true")
parser.add_argument('--stylegan_size', default=1024, type=int)
parser.add_argument('--test_batch_size', default=2, type=int, help='Batch size for testing and inference')
parser.add_argument('--latents_test_path', default="./latents_test/example_celebs.pt", type=str, help="The latents for the validation")
parser.add_argument('--test_workers', default=0, type=int, help='Number of test/inference dataloader workers')
parser.add_argument('--n_images', type=int, default=None, help='Number of images to output. If None, run on all data')args = vars(parser.parse_args())
run(Namespace(**args))
然后,在cmd下进入StyleCLIP工作目录,运行试试看(将代码中的zuckerberg.pt换成其他Mapper模型文件名,即可得到不同的效果):
python test002.py
处理完的结果放在工作目录的子目录下:./results/reference_results
【问题】如果运行时使用参数 --test_workers,在这里只能指定参数为0;若是大于等于0,则会报错:An attempt has been made to start a new process before the current process has finished its bootstrapping phase.
答:这是因为python多进程需要在main函数中运行。
解决方法1:加main函数,在main中运行;
解决方法2:令test_workers=0,单进程运行。
也可以进到./mapper/scripts目录下修改inference.py,运行inference.py时需要参照上面的提示提供相关运行参数。
(三)使用效果
(3.1)官网给出的例子:
希拉里·克林顿 惊讶的希拉里·克林顿
(3.2) 实测效果:
鲍里斯·约翰逊 霉霉(泰勒·斯威夫特)Mapper的约翰逊
“火箭人”马斯克 碧昂丝Mapper的马斯克
德国总理默克尔 扎克伯格Mapper的默克尔
伊恩·格伦 德普(加勒比海盗)Mapper的伊恩·格伦
利用 e4e 工具(具体请参考:https://blog.csdn.net/weixin_41943311/article/details/118082017)将真实原图反演(Inversion)生成潜码(latents.pt)和反演图像,用潜码映射器对潜码进行编辑(这么棒的效果,程序员们有没有心动给自己的女朋友也来一套呢?):
原图 e4e反演图像 e4e+afro e4e+bobcut e4e+bowlcut e4e+curly hair
以上这些例子,个个生动非凡,令人赞叹!
潜码映射器(Editing via Latent Mapper)的工作,极大提升了视觉效果,在潜码向量优化(Editing via Latent Vector Optimization)工作的基础上前进了一大步。
(完)
下一篇:
【实战】文本驱动的StyleGAN2图像处理(三):全局指向(Global Direction)