kristian1515/ip-adapter-faceid-plusv2_sdxl.bin

kristian1515
Texto a imagen

Adaptador experimental IP-Adapter-FaceID-PlusV2 para SDXL orientado a generación de imágenes condicionada por identidad facial. Combina embeddings de Face ID para preservar la identidad con embeddings de imagen CLIP controlables para mantener o ajustar la estructura del rostro, permitiendo generar retratos o imágenes estilizadas a partir de una cara y prompts de texto. Está publicado para investigación y uso no comercial.

Como usar

Instalación y uso básico con Diffusers desde la página del modelo:

pip install -U diffusers transformers accelerate

import torch
from diffusers import DiffusionPipeline

# switch to "mps" for apple devices
pipe = DiffusionPipeline.from_pretrained("kristian1515/ip-adapter-faceid-plusv2_sdxl.bin", dtype=torch.bfloat16, device_map="cuda")
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipe(prompt).images[0]

Flujo recomendado para la familia FaceID/SDXL: primero extraer el embedding facial con InsightFace y después usarlo para condicionar la generación. Para la variante SDXL se usa StableDiffusionXLPipeline junto con un checkpoint IP-Adapter FaceID SDXL:

import cv2
from insightface.app import FaceAnalysis
import torch

app = FaceAnalysis(name="buffalo_l", providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
app.prepare(ctx_id=0, det_size=(640, 640))
image = cv2.imread("person.jpg")
faces = app.get(image)
faceid_embeds = torch.from_numpy(faces[0].normed_embedding).unsqueeze(0)
import torch
from diffusers import StableDiffusionXLPipeline, DDIMScheduler
from PIL import Image
from ip_adapter.ip_adapter_faceid import IPAdapterFaceIDXL

base_model_path = "SG161222/RealVisXL_V3.0"
ip_ckpt = "ip-adapter-faceid_sdxl.bin"
device = "cuda"

noise_scheduler = DDIMScheduler(
    num_train_timesteps=1000,
    beta_start=0.00085,
    beta_end=0.012,
    beta_schedule="scaled_linear",
    clip_sample=False,
    set_alpha_to_one=False,
    steps_offset=1,
)
pipe = StableDiffusionXLPipeline.from_pretrained(
    base_model_path,
    torch_dtype=torch.float16,
    scheduler=noise_scheduler,
    add_watermarker=False,
)

# load ip-adapter
ip_model = IPAdapterFaceIDXL(pipe, ip_ckpt, device)

# generate image
prompt = "A closeup shot of a beautiful Asian teenage girl in a white dress wearing small silver earrings in the garden, under the soft morning light"
negative_prompt = "monochrome, lowres, bad anatomy, worst quality, low quality, blurry"

images = ip_model.generate(
    prompt=prompt,
    negative_prompt=negative_prompt,
    faceid_embeds=faceid_embeds,
    num_samples=2,
    width=1024,
    height=1024,
    num_inference_steps=30,
    guidance_scale=7.5,
    seed=2023
)

Para Plus/PlusV2, el flujo añade una imagen facial alineada y un encoder CLIP; shortcut=v2 y s_scale permiten usar la lógica PlusV2 y ajustar la influencia de la estructura facial.

Funcionalidades

Generación texto-a-imagen condicionada por identidad facial.
Versión PlusV2 para SDXL con control del peso de la estructura facial mediante embeddings CLIP.
Usa embeddings de reconocimiento facial extraídos con InsightFace en lugar de depender solo de embeddings visuales CLIP.
Pensado para mejorar la consistencia de identidad frente a variantes anteriores de IP-Adapter-FaceID.
Compatible con Diffusers y pipelines de Stable Diffusion XL.
No está desplegado en proveedores de inferencia de Hugging Face en la página indicada.
Limitaciones declaradas: no logra fotorealismo perfecto ni consistencia de identidad perfecta; la generalización depende de los datos de entrenamiento, el modelo base y el modelo de reconocimiento facial.

Casos de uso

Crear retratos o imágenes estilizadas que conserven la identidad de una persona de referencia.
Generar variaciones de una cara con distintos prompts, estilos, ropa, fondos o composiciones.
Experimentar con control de identidad facial en pipelines SDXL de difusión.
Investigación no comercial sobre adaptadores de imagen para modelos texto-a-imagen y preservación de identidad.