许可协议:Apache-2.0
支持语言:
- 英语
库名称:diffusers
管道标签:文本生成图像
StoryMaker:实现文本生成图像中角色的一致性


StoryMaker是一种个性化解决方案,不仅保持了多角色场景中面部的一致性,还确保了服装、发型和身体特征的统一,从而能够创作出由一系列图像组成的故事。
由StoryMaker生成的图像可视化效果。前三行讲述了一个“上班族”一天生活的故事,最后两行则展示了电影《爱在黎明破晓前》的故事片段。
演示
双人肖像合成
多样化应用
下载
您可以直接从Huggingface下载模型。
如果无法访问Huggingface,可以使用hf-mirror下载模型。
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download --resume-download RED-AIGC/StoryMaker --local-dir checkpoints --local-dir-use-symlinks False
对于面部编码器,由于默认链接无效,您需要通过此URL手动下载到models/buffalo_l
目录。准备好所有模型后,文件夹结构应如下所示:
.
├── models
├── checkpoints/mask.bin
├── pipeline_sdxl_storymaker.py
└── README.md
使用方法
import diffusers
import cv2
import torch
import numpy as np
from PIL import Image
from insightface.app import FaceAnalysis
from pipeline_sdxl_storymaker import StableDiffusionXLStoryMakerPipeline
app = FaceAnalysis(name='buffalo_l', root='./', providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
app.prepare(ctx_id=0, det_size=(640, 640))
face_adapter = f'./checkpoints/mask.bin'
image_encoder_path = 'laion/CLIP-ViT-H-14-laion2B-s32B-b79K'
base_model = 'huaquan/YamerMIX_v11'
pipe = StableDiffusionXLStoryMakerPipeline.from_pretrained(
base_model,
torch_dtype=torch.float16
)
pipe.cuda()
pipe.load_storymaker_adapter(image_encoder_path, face_adapter, scale=0.8, lora_scale=0.8)
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
然后,您可以自定义生成图像
face_image = Image.open("examples/ldh.png").convert('RGB')
mask_image = Image.open("examples/ldh_mask.png").convert('RGB')
face_info = app.get(cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR))
face_info = sorted(face_info, key=lambda x:(x['bbox'][2]-x['bbox'][0])*(x['bbox'][3]-x['bbox'][1]))[-1]
prompt = "一个人在自拍,这个人戴着红色的帽子,远处有一座火山"
n_prompt = "质量差,NSFW,低质量,丑陋,畸形,变形"
generator = torch.Generator(device='cuda').manual_seed(666)
for i in range(4):
output = pipe(
image=image, mask_image=mask_image, face_info=face_info,
prompt=prompt,
negative_prompt=n_prompt,
ip_adapter_scale=0.8, lora_scale=0.8,
num_inference_steps=25,
guidance_scale=7.5,
height=1280, width=960,
generator=generator,
).images[0]
output.save(f'examples/results/ldh666_new_{i}.jpg')
致谢