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

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Реализация IP-Adapter для переноса стиля
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

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

IP-Adapter (Image Prompt Adapter) переносит стиль, внешний вид или идентичность из reference-изображения в генерацию, не требуя fine-tuning модели. Работает как plug-in: reference-изображение → визуальные эмбеддинги → управление 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 для задач, где нужен стиль-референс без точного воспроизведения деталей. Сроки интеграции в пайплайн — 1–2 дня.