基于ModelArts 驱动文本操作图像
【摘要】 StyleCLIPStyleCLIP: Text-Driven Manipulation of StyleGAN Imagery (ICCV 2021 Oral)StyleCLIP 的论文复现,一种使用驱动文本操作图像的方法。我们的方法使用预训练 StyleGAN 生成器的生成能力和 CLIP 的视觉语言能力。有两种方式:一:你可以输入一段文本表述,得到和文字匹配的人脸编辑图片二:你可以控...
StyleCLIP
StyleCLIP: Text-Driven Manipulation of StyleGAN Imagery (ICCV 2021 Oral)
StyleCLIP 的论文复现,一种使用驱动文本操作图像的方法。
我们的方法使用预训练 StyleGAN 生成器的生成能力和 CLIP 的视觉语言能力。
有两种方式:
一:你可以输入一段文本表述,得到和文字匹配的人脸编辑图片
二:你可以控制图片向文本定义的方向 (一些人脸特征,甚至于一些名人) 发生改变。
获取代码
import os
!wget https://obs-aigallery-zc.obs.cn-north-4.myhuaweicloud.com/clf/code/StyleClip.zip
os.system('unzip StyleClip.zip')
第一种结合StyleGAN与CLIP的方式
基于优化的方法
主要介绍了基于迭代优化来做人脸编辑的内容,你可以输入一段文本表述,得到和文字匹配的人脸编辑图片。
import os
os.chdir(f'./StyleCLIP')
# ! pip install nvidia-pyindex
! pip install tensorflow==1.15.2
! pip install nvidia-tensorboard
! pip install torch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2
! pip install git+https://github.com/openai/CLIP.git # forces pytorch 1.7.1 install
! pip install pandas requests
! pip install ftfy regex tqdm
第二步 参数设置
experiment_type = 'edit' # 可选: ['edit', 'free_generation']
description = 'A person with blue hair' # 编辑的描述,需要是字符串
latent_path = None # 优化的起点 (一般不需修改)
optimization_steps = 100 # 优化的步数
l2_lambda = 0.008 # 优化时候L2 loss的权重
create_video = True # 是否将中间过程存储为视频
args = {
"description": description,
"ckpt": "model/stylegan2-ffhq-config-f.pt",
"stylegan_size": 1024,
"lr_rampup": 0.05,
"lr": 0.1,
"step": optimization_steps,
"mode": experiment_type,
"l2_lambda": l2_lambda,
"latent_path": latent_path,
"truncation": 0.7,
"save_intermediate_image_every": 1 if create_video else 20,
"results_dir": "results"
}
第三步 运行模型
from optimization.run_optimization import main
from argparse import Namespace
result = main(Namespace(**args))
loss: 0.7510;: 100%|██████████| 100/100 [01:35<00:00, 1.05it/s]
第四步 可视化处理前后的图片
# 可视化图片
from torchvision.utils import make_grid
from torchvision.transforms import ToPILImage
result_image = ToPILImage()(make_grid(result.detach().cpu(), normalize=True, scale_each=True, range=(-1, 1), padding=0))
h, w = result_image.size
result_image.resize((h // 2, w // 2))
第五步 将优化过程存储为视频输出
#@title Create and Download Video
!ffmpeg -y -r 15 -i results/%05d.png -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4
第二种结合StyleGAN与CLIP的方式
Mapper根据文本表述推理如何修改图片,然后对图片进行修改
介绍了映射器根据文本表述推理如何修改图片的内容,你可以控制图片向文本定义的方向 (一些人脸特征,甚至于一些名人) 发生改变。
第一步 准备代码环境
from utils import ensure_checkpoint_exists
from mapper.scripts.inference import run
第二步 设置参数
- 以下提供了几个预训练的映射器,以及6个名人的隐空间样本。
- 修改 edit_type 变量以确定编辑的方向
edit_type = 'Beyonce' # 可选: ['afro', 'angry', 'Beyonce', 'bobcut', 'bowlcut', 'curly hair', 'Hilary Clinton', 'Jhonny Depp', 'mohawk', 'purple hair', 'surprised', 'Taylor Swift', 'trump', 'Mark Zuckerberg']
meta_data = {
'afro': ['afro', False, False, True],
'angry': ['angry', False, False, True],
'Beyonce': ['beyonce', False, False, False],
'bobcut': ['bobcut', False, False, True],
'bowlcut': ['bowlcut', False, False, True],
'curly hair': ['curly_hair', False, False, True],
'Hilary Clinton': ['hilary_clinton', False, False, False],
'Jhonny Depp': ['depp', False, False, False],
'mohawk': ['mohawk', False, False, True],
'purple hair': ['purple_hair', False, False, False],
'surprised': ['surprised', False, False, True],
'Taylor Swift': ['taylor_swift', False, False, False],
'trump': ['trump', False, False, False],
'Mark Zuckerberg': ['zuckerberg', False, False, False]
}
edit_id = meta_data[edit_type][0]
ensure_checkpoint_exists(f"model/{edit_id}.pt")
latent_path = "example_celebs.pt" #@param {type:"string"}
if latent_path == "example_celebs.pt":
ensure_checkpoint_exists("example_celebs.pt")
n_images = 1#@param
args = {
"exp_dir": "results/",
"checkpoint_path": f"model/{edit_id}.pt",
"couple_outputs": True,
"mapper_type": "LevelsMapper",
"no_coarse_mapper": meta_data[edit_type][1],
"no_medium_mapper": meta_data[edit_type][2],
"no_fine_mapper": meta_data[edit_type][3],
"stylegan_size": 1024,
"test_batch_size": 1,
"latents_test_path": latent_path,
"test_workers": 1,
"n_images": n_images
}
第三步 运行模型
from argparse import Namespace
run(Namespace(**args))
Loading from checkpoint: model/beyonce.pt
17%|█▋ | 1/6 [00:00<00:01, 3.28it/s]
Runtime 0.1070+-0.0000
第四步 可视化处理前后的图片
from PIL import Image
result = Image.open(f"results/inference_results/00000.jpg")
result = result.resize((int(result.width * 0.5), int(result.height * 0.5)))
grid = Image.new("RGB", (result.width, result.height * n_images))
grid.paste(result, (0, 0))
for i in range(1, n_images):
result = Image.open(f"results/inference_results/{str(i).zfill(5)}.jpg")
result = result.resize((int(result.width * 0.5), int(result.height * 0.5)))
grid.paste(result, (0, int(result.height * i)))
grid
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)