Реалізація IP-Adapter для перенесення стилю

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Реалізація IP-Adapter для перенесення стилю
Середній
~3-5 днів
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

IP-Adapter для переносу стилю зображення

IP-Adapter (Image Prompt Adapter) переносить стиль, зовнішній вигляд або ідентичність з reference-зображення в генерацію без необхідності fine-tuning моделі. Працює як plug-in: reference-зображення → візуальні embedding'и → управління attention.

Встановлення та базове використання

from diffusers import StableDiffusionXLPipeline
from PIL import Image
import torch
import io

pipe = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16
).to("cuda")

# Завантаження IP-Adapter SDXL
pipe.load_ip_adapter(
    "h94/IP-Adapter",
    subfolder="sdxl_models",
    weight_name="ip-adapter_sdxl.bin"
)

def generate_with_style_reference(
    style_image: bytes,
    prompt: str,
    ip_adapter_scale: float = 0.6,  # 0.0=нема впливу, 1.0=максимальний
    steps: int = 30
) -> bytes:
    ref_image = Image.open(io.BytesIO(style_image)).convert("RGB")

    pipe.set_ip_adapter_scale(ip_adapter_scale)

    result = pipe(
        prompt=prompt,
        ip_adapter_image=ref_image,
        num_inference_steps=steps,
        guidance_scale=7.5
    ).images[0]

    buf = io.BytesIO()
    result.save(buf, format="PNG")
    return buf.getvalue()

IP-Adapter Face ID — збереження ідентичності обличчя

from insightface.app import FaceAnalysis
import cv2

# IP-Adapter FaceID зберігає впізнаваність обличчя в різних стилях
pipe.load_ip_adapter(
    "h94/IP-Adapter-FaceID",
    subfolder=None,
    weight_name="ip-adapter-faceid_sdxl.bin",
    image_encoder_folder=None
)

app = FaceAnalysis(name="buffalo_l", providers=["CUDAExecutionProvider"])
app.prepare(ctx_id=0, det_size=(640, 640))

def generate_face_in_style(
    face_photo: bytes,
    prompt: str,
    scale: float = 0.7
) -> bytes:
    img_np = cv2.imdecode(np.frombuffer(face_photo, np.uint8), cv2.IMREAD_COLOR)
    faces = app.get(img_np)

    if not faces:
        raise ValueError("Обличчя не виявлено в reference зображенні")

    face_embedding = torch.from_numpy(faces[0].normed_embedding).unsqueeze(0)

    pipe.set_ip_adapter_scale(scale)
    result = pipe(
        prompt=prompt,
        ip_adapter_image=face_embedding,
        num_inference_steps=30
    ).images[0]

    buf = io.BytesIO()
    result.save(buf, format="PNG")
    return buf.getvalue()

Комбінування IP-Adapter з ControlNet

from diffusers import StableDiffusionXLControlNetPipeline, ControlNetModel

controlnet = ControlNetModel.from_pretrained(
    "diffusers/controlnet-canny-sdxl-1.0",
    torch_dtype=torch.float16
)

pipe = StableDiffusionXLControlNetPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    controlnet=controlnet,
    torch_dtype=torch.float16
).to("cuda")

pipe.load_ip_adapter("h94/IP-Adapter", subfolder="sdxl_models", weight_name="ip-adapter_sdxl.bin")
pipe.set_ip_adapter_scale(0.5)

# Генерація: структура з ControlNet + стиль з IP-Adapter
result = pipe(
    prompt=prompt,
    image=canny_control_image,          # Структура з Canny
    ip_adapter_image=style_reference,   # Стиль з reference
    controlnet_conditioning_scale=0.8,
    num_inference_steps=30
).images[0]

Сценарії використання

Сценарій IP-Adapter scale ControlNet
Перенесення художнього стилю 0.7–0.9 Ні
Генерація аватарів з обличчям 0.6–0.8 (FaceID) Опціонально OpenPose
Продукт у стилі бренду 0.5–0.7 Canny для форми
Персонаж у різних сценах 0.6–0.8 Ні

IP-Adapter в 5–10 разів швидше, ніж навчання LoRA/DreamBooth для завдань, де потрібний style-референс без точного відтворення деталей. Терміни інтеграції в pipeline — 1–2 дні.