Photomaker使用教程

一、前言

PhotoMaker 是一个由 Tencent ARC Lab 和 Nankai University MCG-NKU 共同主办的开源项目,专注于生成定制化的真实人类照片。

本文只提供本地部署教程,不讨论原理部分。

二、部署过程

1、找到Photomaker的github项目官网,直接打包下载,解压后用pycharm打开。


2、阅读readme说明文件,介绍了Photomaker的一些特点,还有部署需要的环境和一些用法。


3、依赖说明当中指出三点:
使用conda创建名为photomaker的虚拟环境,要求python版本=3.10,我这里是创建好了,并且是最新版的python,是没有问题的。

然后在环境中运行pipinstall -r requirements.txt即可下载所需的依赖。我这里包括torch都提前装好了,如果你已经安装torch,可以把前两行注释掉,再运行文件。

接下来是运行代码下载整个项目,也就是我们刚上来所做的。


4、下载模型,新建py文件运行这两行代码即可。


还需要下载一个加载图像生成的模型,我这里采用的是RealVisXL_V4.0。也是从这个“抱脸网下载”,找到网站,搜索名称,复制下来ID。


这里我要说明一点,下载的路径默认在系统盘C盘的. Cache文件夹下,请提前预留好空间,如果你想指定新的下载路径,去搜索huggingface修改缓存地址,有很多种方法。 如果没有提前下载好这个模型,修改ID后运行代码也会自动帮你下载。如果你下载好了,会自动检测本地目录加载模型。

5、接下来直接将使用方法中的三段代码复制到你新建的一个例如run.py的文件中。 需要你增加或修改的地方编译器应该已经标出来了。我会在文章最后提供完整的run.py代码。

加载图像模型: base_model_path= r"SG161222/RealVisXL_V4.0"
Photomaker: photomaker_path = r"指定到photomaker-v1.bin文件即可"
GPU:device = torch.device('cuda' if torch.cuda.is_available() else'cpu')
num_steps = 20指定生成图片的步长 最后在代码的最后一行指定了生成图像保存路径名称等,我这里原方法是报错的,因此改成了images.save('像保存的路径/图像的名称.png')


6、自定义生成的地方。 可以在examples文件夹中放入素材图,三张即可。


num_steps步长大小会影响生成图片的精度,但消耗的时间也会增加。

我这里3050Ti的GPU 4G的现存跑一张步长为20的图大概需要五分钟。

prompt正向提示词,注意这里必须要求有img字段,可以自定义。

negative_prompt负向提示词。

三、使用效果

四、完整代码

import torch
import os
from diffusers.utils import load_image
from diffusers import EulerDiscreteScheduler
from photomaker import PhotoMakerStableDiffusionXLPipeline

### Load base model
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
base_model_path = r"SG161222/RealVisXL_V4.0"

pipe = PhotoMakerStableDiffusionXLPipeline.from_pretrained(
    base_model_path,  # can change to any base model based on SDXL
    torch_dtype=torch.bfloat16,
    use_safetensors=True,
    variant="fp16"
).to(device)

### Load PhotoMaker checkpoint
photomaker_path = r"D:\Tool\cache\hub\models--TencentARC--PhotoMaker\snapshots\d7ec3fc17290263135825194aeb3bc456da67cc5\photomaker-v1.bin"
pipe.load_photomaker_adapter(
    os.path.dirname(photomaker_path),
    subfolder="",
    weight_name=os.path.basename(photomaker_path),
    trigger_word="img"  # define the trigger word
)

pipe.scheduler = EulerDiscreteScheduler.from_config(pipe.scheduler.config)

### Also can cooperate with other LoRA modules
# pipe.load_lora_weights(os.path.dirname(lora_path), weight_name=lora_model_name, adapter_name="xl_more_art-full")
# pipe.set_adapters(["photomaker", "xl_more_art-full"], adapter_weights=[1.0, 0.5])

pipe.fuse_lora()

### define the input ID images
input_folder_name = './examples'
image_basename_list = os.listdir(input_folder_name)
image_path_list = sorted([os.path.join(input_folder_name, basename) for basename in image_basename_list])

input_id_images = []
for image_path in image_path_list:
    input_id_images.append(load_image(image_path))


# Note that the trigger word `img` must follow the class word for personalization
num_steps = 20
prompt = "a woman img , China style,  , best quality"
negative_prompt = "(asymmetry,orst quality, low quality, illustration, 3d, 2d, painting, cartoons, sketch), open mouth, grayscale"
generator = torch.Generator(device=device).manual_seed(42)
images = pipe(
    prompt=prompt,
    input_id_images=input_id_images,
    negative_prompt=negative_prompt,
    num_images_per_prompt=1,
    num_inference_steps=num_steps,
    start_merge_step=10,
    generator=generator,
).images[0]
images.save('Outphotos/out1.png')

  • 37
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值