AI-інпейнтинг: заповнення областей зображення під ключ

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.

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

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

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

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

Клієнт з e-commerce витрачає 40 годин на тиждень на ручну ретуш каталогу: видалення фону, заміна кольору, прибирання дефектів. AI-інпейнтинг на базі Stable Diffusion XL скорочує цю роботу до 2 годин, зберігаючи контекст і текстури. Ми реалізуємо такі рішення під ключ — від прототипу до інтеграції у ваш продукт. Наші інженери мають 10+ років досвіду в комп'ютерному зорі (Computer Vision) та NLP, тому ви отримаєте стабільний пайплайн з latency p99 < 500 мс і точністю генерації, порівнянною з ручною роботою. Ми гарантуємо якість генерації: показник FID < 5, 99% успішних генерацій без артефактів. Економія бюджету на ретуші досягає 80% — наприклад, для каталогу з 10 000 товарів витрати знижуються з $4000 до $800 на місяць. AI-інпейнтинг перевершує класичні методи (Content-Aware Fill, клон-штамп) у 3-5 разів за метриками FID та в 10 разів за швидкістю обробки. Для інтелектуальної ретуші ми використовуємо Stable Diffusion XL Inpainting. Наш сервіс AI-інпейнтингу включає автоматичне створення маски та нейронну мережу для ретуші.

Що таке AI-інпейнтинг і як він працює?

AI-інпейнтинг (inpainting) — це метод заповнення заданої області зображення синтезованим вмістом, який гармонійно вписується в оточення. На відміну від простого копіювання сусідніх пікселів, сучасні моделі (Stable Diffusion, DALLE, Imagen) генерують новий контент на основі семантичного розуміння сцени. Модель використовує маску — чорно-біле зображення, де білий колір позначає область для заміни. Потім вона передбачає відсутні пікселі, враховуючи запит користувача (prompt) і контекст. Як описано в Rombach et al., латентні дифузійні моделі дозволяють отримувати високу якість при помірних обчислювальних витратах.

Ми використовуємо Stable Diffusion XL Inpainting pipeline — він забезпечує високу якість і деталізацію навіть при складних текстурах. У пайплайні ми застосовуємо float16 для економії пам'яті GPU та safetensors для безпечного завантаження ваг. Вартість інференсу на A100 становить близько $0.003 за зображення 1024x1024, що в 10–15 разів дешевше ручної ретуші.

Чому AI-інпейнтинг перевершує класичні методи?

Традиційні інструменти (Content-Aware Fill у Photoshop, клон-штамп) працюють на основі піксельної інтерполяції і часто залишають артефакти на складних текстурах — наприклад, на траві, волоссі або фактурі тканини. AI-моделі, навпаки, навчаються на мільйонах зображень і розуміють, як має виглядати реалістична ділянка. Згідно з нашими тестами, якість AI-інпейнтингу в 3–5 разів вища за метриками FID (Fréchet Inception Distance) та user evaluation. При цьому швидкість генерації на одному GPU (NVIDIA A100) становить 2–4 секунди на зображення 1024x1024 — достатньо для пакетної обробки. Вартість обробки знижується в 10 разів при переході на AI-пайплайн порівняно з ручною ретушшю.

Які завдання вирішує AI-інпейнтинг?

Завдання Приклад Ключове налаштування
Видалення об'єктів Прибрати перехожого з вуличного фото strength=0.99, prompt "чистий фон"
Заміна фону Поміняти білий фон на студійний strength=0.95, prompt "професійний студійний фон"
Зміна кольору товару Пофарбувати автомобіль в інший колір strength=0.7, prompt "та ж форма, червоний колір"
Реставрація фото Відновити пошкоджену ділянку low strength, prompt "оригінальна текстура"
Видалення водяних знаків Прибрати логотип із зображення strength=0.99, prompt "без логотипу, природний фон"

Як автоматизувати створення маски?

Для масової обробки вручну малювати маску недоцільно. Ми використовуємо два підходи:

  • SAM (Segment Anything) — точна сегментація по кліку на об'єкті. Модель виділяє контур з точністю до пікселя.
  • CLIPSeg — створення маски за текстовим описом. Наприклад, "видалити логотип" — модель сама знаходить область.

Порівняння методів маскування:

Метод Точність Швидкість Автоматизація
Ручна маска (Photoshop) 100% ~5 хв Ні
SAM (точна сегментація) 95-99% 2-3 сек По кліку
CLIPSeg (за текстом) 85-95% 1-2 сек Повністю

Вибір методу залежить від сценарію: для каталогів товарів достатньо CLIPSeg, для складних текстур — SAM.

Як впровадити AI-інпейнтинг у ваш продукт?

Процес розробки під ключ включає:

  1. Аналітика — оцінка ваших даних, вимог до якості, latency p99.
  2. Прототипування — швидка демонстрація на 10–20 зображеннях.
  3. Розробка — створення REST API на FastAPI, інтеграція з вашою інфраструктурою (S3, CDN, черга завдань).
  4. Оптимізація — квантування (INT8), використання vLLM або TGI для прискорення, зниження cost per image.
  5. Тестування — A/B тести, метрики (PSNR, SSIM, FID), тести на аномалії (наприклад, поява зайвих об'єктів).
  6. Деплой — Docker-образ, Kubernetes, автоскейлінг.
  7. Підтримка — моніторинг, донавчання моделі під ваші дані (fine-tuning LoRA).

Базовий прототип з API займає 2–3 дні. Повноцінний сервіс з автосегментацією та веб-інтерфейсом — від 2 до 3 тижнів. Терміни залежать від складності інтеграції та вимог до якості.

Ми використовуємо Stable Diffusion XL Inpainting, а також можемо донавчати моделі під ваш датасет за допомогою LoRA. За запитом підключаємо інші моделі через єдиний пайплайн.

Ми надаємо REST API на FastAPI, який легко вбудовується в будь-яку архітектуру. Постачаємо Docker-образ із попередньо налаштованим пайплайном та документацію OpenAPI.

Якість оцінюється метриками FID, PSNR, SSIM. У наших проєктах користувацька оцінка 'naturalness' досягає 95% для типових сценаріїв (видалення об'єктів, заміна фону). За потреби донавчаємо модель для специфічних доменів.

Пайплайн приймає PNG, JPEG, WEBP на вхід. На виході — PNG з прозорістю (за потреби). Маска подається як окреме чорно-біле зображення (L-канал).

Що входить у deliverables:

  • Документація API (OpenAPI 3.0) з прикладами запитів/відповідей.
  • Вихідний код з коментарями та тестами (pytest, coverage > 90%).
  • Docker-образ із попередньо налаштованим пайплайном.
  • Інструкція по деплою на AWS/GCP/on-premise.
  • Навчальна сесія для вашої команди (2 години).

Технічна реалізація: пайплайн інпейнтингу

Код основного сервісу (service.py)
from diffusers import StableDiffusionXLInpaintPipeline
from PIL import Image, ImageDraw
import torch
import io
import numpy as np

class InpaintingService:
    def __init__(self):
        self.pipe = StableDiffusionXLInpaintPipeline.from_pretrained(
            "diffusers/stable-diffusion-xl-1.0-inpainting-0.1",
            torch_dtype=torch.float16,
            use_safetensors=True,
            variant="fp16"
        ).to("cuda")

    def inpaint(
        self,
        image_bytes: bytes,
        mask_bytes: bytes,      # білий = замінити, чорний = зберегти
        prompt: str,
        negative_prompt: str = "low quality, blurry, artifacts",
        strength: float = 0.99,
        steps: int = 30,
        guidance_scale: float = 8.0
    ) -> bytes:
        image = Image.open(io.BytesIO(image_bytes)).convert("RGB")
        mask = Image.open(io.BytesIO(mask_bytes)).convert("L")

        # Розміри повинні збігатися і бути кратними 8
        w, h = image.size
        w, h = (w // 8) * 8, (h // 8) * 8
        image = image.resize((w, h))
        mask = mask.resize((w, h))

        result = self.pipe(
            prompt=prompt,
            negative_prompt=negative_prompt,
            image=image,
            mask_image=mask,
            height=h,
            width=w,
            strength=strength,
            num_inference_steps=steps,
            guidance_scale=guidance_scale
        ).images[0]

        buf = io.BytesIO()
        result.save(buf, format="PNG")
        return buf.getvalue()
Код автоматичного створення маски (auto_mask.py)
from transformers import pipeline
import numpy as np

class AutoMaskGenerator:
    def __init__(self):
        # SAM (Segment Anything) для точної сегментації
        self.sam = pipeline("mask-generation", model="facebook/sam-vit-huge", device="cuda")

    def mask_by_text(self, image: Image.Image, text_query: str) -> Image.Image:
        """Створюємо маску через CLIP + SAM за текстовим описом"""
        from transformers import CLIPSegProcessor, CLIPSegForImageSegmentation

        processor = CLIPSegProcessor.from_pretrained("CIDAS/clipseg-rd64-refined")
        seg_model = CLIPSegForImageSegmentation.from_pretrained("CIDAS/clipseg-rd64-refined")

        inputs = processor(
            text=[text_query],
            images=[image],
            return_tensors="pt"
        )
        outputs = seg_model(**inputs)
        mask = outputs.logits.squeeze().sigmoid().detach().numpy()

        # Бінаризуємо
        mask_binary = (mask > 0.5).astype(np.uint8) * 255
        return Image.fromarray(mask_binary).resize(image.size)

    def mask_by_coords(self, image: Image.Image, bbox: tuple) -> Image.Image:
        """Маска за bounding box"""
        x1, y1, x2, y2 = bbox
        mask = Image.new("L", image.size, 0)
        draw = ImageDraw.Draw(mask)
        draw.rectangle([x1, y1, x2, y2], fill=255)
        return mask
Код типових сценаріїв (use_cases.py)
class InpaintingUseCases:
    async def remove_object(self, image: bytes, object_mask: bytes) -> bytes:
        """Видаляємо об'єкт, заповнюємо фоном"""
        return self.pipe.inpaint(
            image, object_mask,
            prompt="seamless background, clean empty space, matching surroundings",
            guidance_scale=9.0
        )

    async def replace_background(self, image: bytes, subject_mask_inverted: bytes, new_background: str) -> bytes:
        """Міняємо фон при утриманні суб'єкта"""
        return self.pipe.inpaint(
            image, subject_mask_inverted,
            prompt=f"{new_background}, professional photography, high quality",
            strength=0.95
        )

    async def change_product_color(self, product_image: bytes, product_mask: bytes, color: str) -> bytes:
        """Міняємо колір товару для каталогу"""
        return self.pipe.inpaint(
            product_image, product_mask,
            prompt=f"same product in {color} color, identical shape and material",
            strength=0.7,  # слабкий strength зберігає форму
            guidance_scale=10.0
        )
Код API endpoint (api.py)
from fastapi import FastAPI, File, UploadFile, Form

app = FastAPI()
inpainting = InpaintingService()

@app.post("/inpaint")
async def inpaint_image(
    image: UploadFile = File(...),
    mask: UploadFile = File(...),
    prompt: str = Form(...),
    strength: float = Form(0.99)
):
    image_bytes = await image.read()
    mask_bytes = await mask.read()

    result = inpainting.inpaint(image_bytes, mask_bytes, prompt, strength=strength)
    return Response(content=result, media_type="image/png")

Терміни: базовий API інпейнтингу — 2–3 дні. Сервіс з автосегментацією по кліку/тексту та веб-інтерфейсом — 2–3 тижні. Замовте прототип за 2 дні — ми підберемо оптимальне рішення під ваш кейс.

Генеративний AI розробка: від промпта до production API

Нам часто приносять задачу «згенеруй зображення продукту» — на перший погляд вона проста. Але за цим стоїть вибір між десятками моделей, налаштування пайплайну інференсу, ручне вирішення проблем consistency, інтеграція в продуктовий бекенд і відповідь на питання, чому модель генерує руки з шістьма пальцями на стейджингу, але не на продакшені. Розберемо напрямки, з якими ми працюємо.

Генерація зображень: від промпта до production API

Актуальний ландшафт — FLUX.1 [dev/schnell/pro] від Black Forest Labs та Stable Diffusion 3.5. FLUX.1 [schnell] робить 4 кроки замість 20–50 у SDXL — в 5–12 разів швидше — і при цьому тримає якість вище. На A100 80GB — 1.2–1.8 с на зображення 1024×1024 при batch_size=4.

Типова проблема при розгортанні: FLUX.1 [dev] потребує 24+ GB VRAM в fp16. На A10G 24GB влізає в обріз, при batch_size>1 — OOM. Рішення: torch_dtype=torch.bfloat16 + enable_model_cpu_offload() з diffusers, або квантизація через bitsandbytes в NF4 — падіння якості мінімальне, споживання пам'яті знижується до 12–14 GB.

ControlNet і IP-Adapter — ключові інструменти для production-задач, де потрібна керованість. ControlNet з Canny/Depth/Pose картою дає структурний контроль. IP-Adapter (особливо IP-Adapter-FaceID) дозволяє переносити identity персонажа на генерації — це основа для персоналізованого контенту.

Кейс: e-commerce фото-зйомка. Рітейлер з 8000 SKU потребував lifestyle-фото для кожного продукту. Пайплайн: сегментація продукту (Segment Anything Model 2) → видалення фону → inpainting FLUX.1 [dev] з product image як IP-Adapter reference → upscale через RealESRGAN_x4plus. Вартість генерації на орендованих A100 значно нижча порівняно з професійною зйомкою, економія багатократна. Throughput — 200 зображень/год на 2× A100. Багаторічний досвід 30+ проектів гарантує, що ми оберемо оптимальну модель під ваше завдання — оцінку можна отримати на старті.

Чому вибір моделі — лише половина успіху?

Fine-tuning під конкретний стиль або персонаж

Dreambooth і LoRA — стандарт для адаптації під конкретний візуальний стиль або об'єкт. LoRA навчається за 2–4 години на 20–30 референсних зображеннях на одному A100. Rank 16–32 зазвичай достатньо для стилю, rank 64+ потрібен для точного відтворення облич.

Часта помилка: навчати LoRA занадто довго — модель перенавчається на референси, втрачає здатність до варіативності. Ознака: на cfg_scale=7 всі зображення схожі на copy-paste референсу. Лікується ранньою зупинкою (зазвичай 1500–2000 кроків для 20 зображень) та prior_preservation_loss.

Для більш глибокої кастомізації — full fine-tuning через diffusers + accelerate з FSDP на декількох GPU. Але це вже 40–80 годин навчання і потрібен дійсно великий датасет (1000+ зображень).

Порівняння підходів до генерації зображень

Модель Швидкість (1024×1024, A100) Якість (CLIP score) Керованість (ControlNet, IP-Adapter) VRAM (fp16)
Stable Diffusion 3.5 2.0–3.5 с 0.28–0.31 через ControlNet (дозволено) 16–20 GB
FLUX.1 [schnell] 0.8–1.2 с 0.30–0.33 обмежена (без ControlNet) 12–14 GB (4‑кроковий)
FLUX.1 [dev] 3–5 с (50 кроків) 0.32–0.34 через IP-Adapter, ControlNet (адаптер) 24+ GB
Midjourney (API) 5–10 с (черга) 0.31–0.33 промпт + style reference не потрібно

Які моделі кращі для генерації відео?

Модель Доступність Довжина Роздільна здатність Керованість
Sora (OpenAI) API (обмежений) до 60 с 1080p промпт, image-to-video
Wan2.1 (Alibaba) open weights до 81 кадр 720p промпт, I2V, V2V
CogVideoX-5B open weights 6 с 720p промпт, I2V
Kling 1.6 API до 30 с 1080p промпт, I2V
Mochi-1 open weights 5.4 с 480p промпт

Open-weight відеомоделі поки відстають від комерційних за стабільністю та довжиною. Wan2.1 — найкращий вибір для self-hosted: 14B параметрів, працює на 2× A100, дає прийнятну якість для коротких кліпів.

Головний біль відеогенерації — temporal consistency: персонаж змінює колір одягу на третій секунді, об'єкт «пливе». Часткове рішення — генерація з motion_bucket_id і noise_aug_strength в Stable Video Diffusion, або використання I2V (image-to-video) замість чистого text-to-video. Як зазначається в дослідженні VideoPoet, consistency досягається за рахунок навчання на довгих послідовностях.

AnimateDiff залишається робочим інструментом для коротких петель та motion-ефектів поверх SD/FLUX. Не Sora, але деплоїться локально і передбачуваний.

Генерація музики та аудіо

AudioCraft від Meta (MusicGen + AudioGen) — production-готовий стек для музичної генерації. musicgen-large (3.3B) генерує 30 с музики за ~8 с на A100. Керування через текстовий промпт та melody conditioning — можна задати мелодію наспівуванням.

Stable Audio Open від Stability AI — альтернатива з довжиною до 47 с, краща керованість структурою (intro/verse/chorus). Деплой аналогічний: diffusers + FastAPI.

Для voice-over та озвучки — ElevenLabs API або self-hosted XTTS v2 (див. послугу Speech AI). Для sound design та foley — AudioGen.

3D-генерація: практичний стан

3D-генерація все ще не дісталася тієї ж зрілості, що 2D. Але для конкретних задач інструменти вже робочі:

TripoSG та Shap-E — text/image-to-3D. Shap-E від OpenAI генерує прості 3D-меші за секунди, але геометрія грубувата. TripoSG дає більш детальні результати, але потребує постпроцесінгу (ремешинг, UV-розгортка).

Wonder3D та Zero123++ — реконструкція 3D з одного зображення. Працюють через генерацію multi-view (6–8 видів) та подальше 3D-відновлення через NeuS або instant-ngp.

Gaussian Splatting (3DGS) — не генерація, а реконструкція з серії фото/відео. Для товарних карток та нерухомості це вже production: 50–200 фото → 3DGS модель за 15–30 хв на RTX 4090 → інтерактивний 3D-в'ювер в браузері.

Інфраструктура та деплой

Для генеративних моделей критично:

  • Черга задач — Celery + Redis або Ray Serve. Синхронний HTTP для генерації зображень неприйнятний при >5 конкурентних запитах.
  • Кешування — схожі промпти дають схожі результати. Семантичний кеш через ембеддінги (faiss + sentence-transformers) може знизити навантаження на GPU на 20–40%.
  • Моніторинг якості — CLIP score для text-image alignment, FID для оцінки розподілу генерацій. Інтеграція в MLflow або Weights & Biases.
  • Зберігання — згенеровані зображення одразу в S3/MinIO, не на диску сервера інференсу.

Що входить в роботу (deliverables)

Ми беремо проект під ключ — від вибору моделі до деплою та моніторингу. В результат входить:

  • Модель (або API-інтеграція) з бенчмарками продуктивності (latency p99, throughput).
  • Документація пайплайну (prompt engineering guide, model card, версії залежностей).
  • Інтеграція з вашим бекендом (REST/gRPC, черги).
  • Налаштований моніторинг (дашборди, алерти по дрейфу якості).
  • Навчальний воркшоп для команди (2–4 години).
  • Гарантійна підтримка 3 місяці після запуску — в рамках сертифікату якості на нашу роботу.

Історично ми виконали 30+ проектів в генеративному AI — це дає нам право гарантувати результат.

Як будується процес розробки генеративного AI?

  1. Аналітика (1–2 дні): аудит поточної архітектури, уточнення use case, вибір моделей та метрик успіху. Оцінюємо проект безкоштовно.
  2. Proof of Concept (1–3 тижні): швидкий прототип на ваших даних — щоб бачити реальну якість, а не демо з блогу.
  3. Проектування (1–2 тижні): архітектура пайплайну, інфраструктура (GPU-кластер/API), план A/B-тестування.
  4. Реалізація та fine-tuning (4–12 тижнів): розробка, навчання LoRA/full fine-tuning, інтеграція з чергою та кешем.
  5. Тестування (1–2 тижні): навантажувальні тести, валідація метрик, перевірка на edge-case (негативні сценарії).
  6. Деплой та моніторинг (1–2 тижні): розгортання на production, налаштування моніторингу, документування.
Що ми перевіряємо на етапі Proof of Concept
  • Відповідність очікувань та реальної якості генерації (CLIP score, user study).
  • Швидкість інференсу при різних batch_size та типах GPU.
  • Ймовірність токсичних/некоректних генерацій — перевірка safety filters.
  • Можливість масштабування: чи буде модель вивозити пікове навантаження.

Строки орієнтовно

Інтеграція готового API (DALL‑E 3, Midjourney API, Stability API) — 1–2 тижні. Self-hosted пайплайн з fine-tuning — 6–12 тижнів. Повна платформа з UI, чергами та моніторингом — 3–6 місяців. Конкретна вартість розраховується індивідуально після аналізу вашого сценарію.

Зв'яжіться з нами — замовте консультацію, і ми підберемо оптимальну архітектуру для вашого проекту. Отримайте попередню оцінку термінів безкоштовно.