InstantID

InstantID:几秒内零次身份保存生成

InstantID 是一种新的最先进的免调整方法,只需单个图像即可实现 ID 保留生成,支持各种下游任务。

InstantID轻松换风格支持CN控制电脑独立版N卡整合包

发布

  • [2024/1/23] 🔥 我们的管道已合并为扩散器!
  • [2024/1/22] 🔥 我们发布了预训练的检查点、推理代码和渐变演示!
  • [2024/1/15] 🔥 我们发布技术报告。
  • [2023/12/11] 🔥 我们启动了项目页面。

程式化合成

InstantID轻松换风格支持CN控制电脑独立版N卡整合包

与之前作品的比较

InstantID轻松换风格支持CN控制电脑独立版N卡整合包

与现有的免调优最先进技术的比较。InstantID 实现了更好的保真度并保留了良好的文本可编辑性(面孔和样式更好地融合)。

InstantID轻松换风格支持CN控制电脑独立版N卡整合包

与预先训练的角色 LoRA 的比较。我们不需要多个图像,并且仍然可以在没有任何训练的情况下获得与 LoRA 一样的有竞争力的结果。

InstantID轻松换风格支持CN控制电脑独立版N卡整合包

与 InsightFace Swapper(也称为 ROOP 或 Refactor)的比较。然而,在非写实风格中,我们的作品在面部和背景的融合上更加灵活。

下载

您可以直接从Huggingface下载模型。您还可以使用 python 脚本下载模型:

from huggingface_hub import hf_hub_download
hf_hub_download(repo_id="InstantX/InstantID", filename="ControlNetModel/config.json", local_dir="./checkpoints")
hf_hub_download(repo_id="InstantX/InstantID", filename="ControlNetModel/diffusion_pytorch_model.safetensors", local_dir="./checkpoints")
hf_hub_download(repo_id="InstantX/InstantID", filename="ip-adapter.bin", local_dir="./checkpoints")

如果无法访问Huggingface,可以使用hf-mirror下载模型。

export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download --resume-download InstantX/InstantID --local-dir checkpoints

对于人脸编码器,您需要通过此URL手动下载,因为models/antelopev2默认链接无效。准备好所有模型后,文件夹树应如下所示:

  .
  ├── models
  ├── checkpoints
  ├── ip_adapter
  ├── pipeline_stable_diffusion_xl_instantid.py
  └── README.md

用法

# !pip install opencv-python transformers accelerate insightface
import diffusers
from diffusers.utils import load_image
from diffusers.models import ControlNetModel

import cv2
import torch
import numpy as np
from PIL import Image

from insightface.app import FaceAnalysis
from pipeline_stable_diffusion_xl_instantid import StableDiffusionXLInstantIDPipeline, draw_kps

# prepare 'antelopev2' under ./models
app = FaceAnalysis(name='antelopev2', root='./', providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
app.prepare(ctx_id=0, det_size=(640, 640))

# prepare models under ./checkpoints
face_adapter = f'./checkpoints/ip-adapter.bin'
controlnet_path = f'./checkpoints/ControlNetModel'

# load IdentityNet
controlnet = ControlNetModel.from_pretrained(controlnet_path, torch_dtype=torch.float16)

base_model = 'wangqixun/YamerMIX_v8'  # from https://civitai.com/models/84040?modelVersionId=196039
pipe = StableDiffusionXLInstantIDPipeline.from_pretrained(
    base_model,
    controlnet=controlnet,
    torch_dtype=torch.float16
)
pipe.cuda()

# load adapter
pipe.load_ip_adapter_instantid(face_adapter)

然后,您可以定制自己的脸部图像

# load an image
face_image = load_image("./examples/yann-lecun_resize.jpg")

# prepare face emb
face_info = app.get(cv2.cvtColor(np.array(face_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]  # only use the maximum face
face_emb = face_info['embedding']
face_kps = draw_kps(face_image, face_info['kps'])

# prompt
prompt = "film noir style, ink sketch|vector, male man, highly detailed, sharp focus, ultra sharpness, monochrome, high contrast, dramatic shadows, 1940s style, mysterious, cinematic"
negative_prompt = "ugly, deformed, noisy, blurry, low contrast, realism, photorealistic, vibrant, colorful"

# generate image
image = pipe(
    prompt,
    image_embeds=face_emb,
    image=face_kps,
    controlnet_conditioning_scale=0.8,
    ip_adapter_scale=0.8,
).images[0]

使用 LCM-LoRA 加速

我们的工作与LCM-LoRA兼容。首先,下载模型。

from huggingface_hub import hf_hub_download
hf_hub_download(repo_id="latent-consistency/lcm-lora-sdxl", filename="pytorch_lora_weights.safetensors", local_dir="./checkpoints")

要使用它,您只需加载它并用一个小的 num_inference_steps 进行推断。注意,建议将guiding_scale设置在[0, 1]之间。

from diffusers import LCMScheduler

lcm_lora_path = "./checkpoints/pytorch_lora_weights.safetensors"

pipe.load_lora_weights(lcm_lora_path)
pipe.fuse_lora()
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

num_inference_steps = 10
guidance_scale = 0

启动本地渐变演示

运行以下命令:

python gradio_demo/app.py

使用技巧

  • 为了获得更高的相似度,请增加controlnet_conditioning_scale(IdentityNet)和ip_adapter_scale(Adapter)的权重。
  • 对于过饱和,请减小 ip_adapter_scale。如果不起作用,请减少 controlnet_conditioning_scale。
  • 为了获得更高的文本控制能力,请减小 ip_adapter_scale。
  • 针对具体款式,选择相应的底座型号会有差异。
  • 我们还没有支持多人,只会使用最大的人脸作为参考姿势。
  • 我们提供样式模板供参考。

社区资源

复制演示

  • zsxkib/即时 ID

舒适用户界面

  • ZHO-ZHO-ZHO/ComfyUI-InstantID
  • huxiuhan/ComfyUI-InstantID

视窗

  • sdbds/Windows 的 InstantID

致谢

  • 我们的工作深受IP-Adapter和ControlNet的启发。感谢他们的精彩作品!
  • 感谢ZHO-ZHO-ZHO、huxiuhan、sdbds、zsxkib的慷慨贡献。
  • 感谢HuggingFace gradio 团队提供的免费 G​​PU 支持!
  • 感谢ModelScope团队提供的免费 G​​PU 支持!

免责声明

InstantID 的代码在Apache 许可证下发布,可供学术和商业用途。然而,从insightface手动下载和自动下载人脸模型仅根据许可用于非商业研究目的。用户可以自由地使用此工具创建图像,但他们有义务遵守当地法律并负责任地使用它。开发者对用户潜在的误用不承担任何责任。