赞
踩
PhotoMaker GitHub 地址:https://github.com/TencentARC/PhotoMaker
温馨提示:PhotoMaker 官网github 版本为通用版本,如果是Windows系统安装PhotoMarker 需要使用截图下的版本:
第一步:Windows 虚拟环境创建和安装,执行如下指令:
- conda create --name photomaker python=3.10 #创建虚拟环境名称photomaker,并指定Python 版本3.10
- conda activate photomaker #激活虚拟环境photomaker
- pip install -U pip # 包管理工具pip 更新
-
- # Install requirements
- pip install -r requirements.txt #安装Photomaker 所需依赖包
第二步:Windows 安装Pytorch 环境
打开pytorch 官网:PyTorch
拷贝运行指令在虚拟环境pytorch 中执行:
pip3 install torch torchvision torchaudio
第一种:自己编写Python 脚本调用Photomaker。
加载模型
- import torch
- import os
- from diffusers.utils import load_image
- from diffusers import EulerDiscreteScheduler
- from photomaker.pipeline import PhotoMakerStableDiffusionXLPipeline
-
- ### Load base model
- 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
- 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()
主要用于:负责加载图像生成模型,这里我们使用 RealVisXL_V3.0,接着为模型挂在 Adapter 也就是论问题提到的 PhotoMaker 的 bin 文件,同时注意修改 device 变量,相当于要修改:
bass_model_path、photomaker_path 以及 device
录入图像
- ### define the input ID images
- input_folder_name = './examples/newton_man'
- 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))
使用 Photomaker提供的 newton_man 的示例图像,可以看到其基于 list 读取,根据 README 的介绍,一个角色的图像越多,生成的会越精准或者和你的图像越像.
执行
- # Note that the trigger word `img` must follow the class word for personalization
- prompt = "a half-body portrait of a man img wearing the sunglasses in Iron man suit, best quality"
- negative_prompt = "(asymmetry, worst 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]
- gen_images.save('out_photomaker.png')
# 请注意,触发器单词 "img" 必须跟在类别单词后面才能进行个性化设置:
含义:一个男人的半身像 img 戴着钢铁侠套装的太阳镜,质量最好
这里 Class Word 类别单词就是 a half-body portrait of a man 即一个男人半身像,img trigger 会基于这个类别 + img 后的个性化描述,结合你的 Input Image 的人脸。
将上面三部分的代码粘贴至 run.py 中,并 activate 激活我们的环境。
device - 指定到对应设备,需自己添加该参数。
base_model_path - 下载的生成模型地址
photomaker_path - photomaker bin 文件地址
num_steps - 生成步数
第二种:运行Photomaker 携带gradio demo
运行网页版请执行如下命令:
python gradio_demo/app.py
问题一:
- File "D:\anaconda3\envs\photemaker\lib\multiprocessing\context.py", line 193, in get_context
- raise ValueError('cannot find context for %r' % method) from None
- ValueError: cannot find context for 'fork'
解决办法:使用spawn 替换fork
pip install spawn
代码:PhotoMaker\gradio_demo\app.py
问题二:
- File "D:\anaconda3\envs\photemaker\lib\site-packages\luigi\parameter.py", line 29, in <module>
- from collections import OrderedDict, Mapping
- ImportError: cannot import name 'Mapping' from 'collections' (D:\anaconda3\envs\photemaker\lib\collections\__init__.py)
解决办法:
- 将
- from collections import Mapping, OrderedDict
- 修改为
- from collections.abc import Mapping
- from collections import OrderedDict
问题原因:Python3.10 版本调整相关基础包的存放位置造成。
问题三:
- File "D:\anaconda3\envs\photemaker\lib\site-packages\luigi\scheduler.py", line 207, in <module>
- class OrderedSet(collections.MutableSet):
- AttributeError: module 'collections' has no attribute 'MutableSet'
解决办法:
将collections.MutableSet 修改为collections.abc.MutableMapping
问题原因:Python3.10 版本调整相关基础包的存放位置造成。
问题四:
- Traceback (most recent call last):
- File "E:\python_ai\PhotoMaker\gradio_demo\app.py", line 14, in <module>
- from photomaker import PhotoMakerStableDiffusionXLPipeline
- ModuleNotFoundError: No module named 'photomaker'
解决办法:
- import sys
- sys.path.append('../photomaker')
1、修改系统环境变量
XDG_CACHE_HOME
和变量值为新缓存路径的根路径 (例如 D:\cache
)。这样,以后的缓存结构将会是:
模型缓存:D:\cache\huggingface\transformers或D:\cache\huggingface\hub(一般是这里)
数据集缓存:D:\cache\huggingface\datasets
此外metrics和modules也分别是在D:\cache\huggingface\metrics和D:\cache\huggingface\modules之下。
现状:国内无法正常访问脸蛋网:https://huggingface.co/,原由自己Google 或百度一下。现在国内出现了脸蛋网国内镜像地址:https://hf-mirror.com/
第一种方式:使用命令行下载。
(1) 安装依赖
pip install -U huggingface_hub
(2) 基本命令示例:
- export HF_ENDPOINT=https://hf-mirror.com
- huggingface-cli download --resume-download --local-dir-use-symlinks False bigscience/bloom-560m --local-dir bloom-560m
第二种方式: 直接URL下载
检索相关模型: PhotoMaker
完成相关模型下载。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。