基于ModelArts 驱动文本操作图像

举报
HWCloudAI 发表于 2022/12/26 11:21:58 2022/12/26
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。