kristian1515/ip-adapter-faceid-plusv2_sdxl.bin
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.