AI-видалення фону із зображень: пайплайн і точне матування

AI-видалення фону із зображень

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

Часті запитання

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

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

AI-видалення фону із зображень

Вручну вирізати товарні фото — повільно і дорого. Обробка каталогу з 10 000 товарів займає тижні, а помилки операторів призводять до браку. Ми автоматизуємо це завдання за допомогою сучасних нейромереж: від швидкого batch-видалення фону до точного альфа-матування волосся і хутра. Наш досвід — 5+ років, понад 50+ впроваджених рішень, оброблено понад 1 млн зображень. Гарантія якості — кожен проект тестується на контрольній вибірці. У цій статті розберемо, які моделі працюють найкраще, як побудувати пайплайн і які підводні камені зустрічаються на практиці.

Які моделі працюють найкраще?

Видалення фону ділиться на два класи: грубе (для прямокутних об'єктів без напівпрозорості) і точне альфа-матування (для волосся, хутра, скла). Перше вирішується детекцією та бінарною маскою, друге — передбаченням alpha-каналу (0–1) на кожному пікселі. Ми підбираємо інструмент під задачу: для e-commerce достатньо REMBG, для портретів — SAM2 з подальшим матуванням.

Коли потрібен fine-tuning?

Попередньо навчені моделі добре справляються зі стандартними об'єктами: люди, товари на білому фоні. Але якщо у вашому каталозі специфічні предмети (ювелірка, скляний посуд, хутряні вироби), якість падає. Fine-tuning на 20–50 розмічених фото підвищує точність матування на 15–20% за метрикою MSE. Ми включаємо цей етап у проект, якщо тести показують недостатню якість.

Як працює SAM2 для видалення фону?

SAM2 (Segment Anything Model 2 від Meta) дає state-of-the-art якість сегментації за текстовим запитом або bbox. Зв'язка Grounding DINO + SAM2 — стандарт останніх років. Нижче — приклад реалізації на Python:

import torch import numpy as np from PIL import Image from sam2.build_sam import build_sam2 from sam2.sam2_image_predictor import SAM2ImagePredictor from groundingdino.util.inference import load_model, predict def remove_background_grounded_sam2( image_path: str, text_prompt: str = 'product', box_threshold: float = 0.3, text_threshold: float = 0.25, output_path: str = None ) -> Image.Image: image = Image.open(image_path).convert('RGB') image_np = np.array(image) gdino_model = load_model( 'groundingdino/config/GroundingDINO_SwinT_OGC.py', 'weights/groundingdino_swint_ogc.pth' ) boxes, _, _ = predict( model=gdino_model, image=image_np, caption=text_prompt, box_threshold=box_threshold, text_threshold=text_threshold ) if len(boxes) == 0: raise ValueError(f'Object "{text_prompt}" not found') sam2 = build_sam2( 'sam2_hiera_large.yaml', 'weights/sam2_hiera_large.pt', device='cuda' ) predictor = SAM2ImagePredictor(sam2) predictor.set_image(image_np) best_box = boxes[0].numpy() * np.array([ image_np.shape[1], image_np.shape[0], image_np.shape[1], image_np.shape[0] ]) masks, scores, _ = predictor.predict( box=best_box, multimask_output=True ) best_mask = masks[np.argmax(scores)] result_rgba = np.dstack([image_np, best_mask.astype(np.uint8) * 255]) result = Image.fromarray(result_rgba, 'RGBA') if output_path: result.save(output_path, 'PNG') return result 

Чому SAM2 + matting — оптимальний вибір для складних країв?

Порівняємо з U2-Net і RVM. RVM швидкий (0.05 сек на фото), але краї грубі — волосся перетворюється на кашу. SAM2 з донавчанням дає alpha-карту з тонкими напівпрозорими краями. Для волосся і хутра ми комбінуємо SAM2 з closed-form matting (Wikipedia на alpha matting) — підсумкова якість у 2–3 рази вища за метрикою MSE, ніж у чистого RVM. У таблиці нижче — об'єктивне порівняння.

Інструмент Швидкість Якість країв Волосся/хутро Застосування
REMBG (U2-Net) 0.3–0.8s/img Середня Погано Швидкий batch
REMBG (IS-Net) 0.5–1.2s/img Добра Задовільно Товари
SAM2 0.8–2s/img Дуже добра Добре Точна сегментація
SAM2 + matting 2–5s/img Відмінна Відмінно Портрети, хутро
BiMatting 1–3s/img Відмінна Відмінно Професійний

Alpha matting для складних країв

Волосся, хутро, тонкі гілки — SAM2 дає грубу маску по bbox, краї виходять піксельними. Для цих випадків поверх SAM-маски застосовується alpha matting — метод, що відновлює напівпрозорість на межах. Ми використовуємо closed-form matting як найкращий компроміс швидкості та якості. Приклад реалізації:

from pymatting import estimate_alpha_cf, estimate_foreground_ml import cv2 def refine_mask_with_matting( image: np.ndarray, rough_mask: np.ndarray, erosion_px: int = 10, dilation_px: int = 10 ) -> np.ndarray: kernel = np.ones((erosion_px, erosion_px), np.uint8) fg_mask = cv2.erode( rough_mask.astype(np.uint8) * 255, kernel ) bg_mask = cv2.dilate( rough_mask.astype(np.uint8) * 255, kernel ) trimap = np.full(rough_mask.shape, 128, dtype=np.uint8) trimap[fg_mask > 0] = 255 trimap[bg_mask == 0] = 0 image_float = image.astype(np.float64) / 255.0 trimap_float = trimap.astype(np.float64) / 255.0 alpha = estimate_alpha_cf(image_float, trimap_float) return (alpha * 255).astype(np.uint8) 

Batch-обробка для e-commerce

from rembg import remove, new_session from PIL import Image from pathlib import Path import concurrent.futures def batch_remove_background( input_dir: str, output_dir: str, model_name: str = 'isnet-general-use', max_workers: int = 4 ) -> dict: session = new_session(model_name) input_paths = list(Path(input_dir).glob('*.{jpg,jpeg,png,webp}')) results = {'success': 0, 'failed': 0, 'errors': []} def process_one(img_path: Path) -> bool: try: with open(img_path, 'rb') as f: input_data = f.read() output_data = remove(input_data, session=session) out_path = Path(output_dir) / (img_path.stem + '.png') with open(out_path, 'wb') as f: f.write(output_data) return True except Exception as e: results['errors'].append(str(e)) return False with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as ex: futures = {ex.submit(process_one, p): p for p in input_paths} for fut in concurrent.futures.as_completed(futures): if fut.result(): results['success'] += 1 else: results['failed'] += 1 return results 

Для масового застосування ми будуємо пайплайн на GPU (NVIDIA T4 або A100). Черга задач через Redis + Celery, результат — PNG з прозорістю. Час обробки 10 000 фото — 1–2 години, залежно від роздільної здатності та обраної моделі. Наприклад, проект для e-commerce з 10 000 фото коштує від $5000 під ключ.

Що входить у нашу роботу: покроковий процес

  1. Аналіз даних: розмітка 20–50 прикладів для донавчання (якщо потрібно).
  2. Вибір моделі: RVM для швидкості, SAM2 + matting для якості.
  3. Розробка API: REST/gRPC ендпоінти для інтеграції.
  4. Контейнеризація: Docker + Triton Inference Server для деплою.
  5. Моніторинг: метрики latency, throughput, кількість помилок сегментації.
  6. Документація: опис пайплайну, інструкція для операторів.
  7. Навчання: передаємо модель і скрипти, допомагаємо налагодити роботу.

Строки та вартість

Етап Строк
API-сервіс на REMBG 1–2 тижні
Система з SAM2 + fine-tuning 3–5 тижнів
Повний pipeline з matting і QA 5–8 тижнів

Вартість розраховується індивідуально — залежить від обсягу даних, потрібної швидкості та якості. Оцінюємо проект за 1–2 дні після знайомства з вашими зображеннями — пишіть нам для консультації, підберемо оптимальну архітектуру під ваш бюджет. Замовте AI-пайплайн під ключ за 1–2 тижні вже сьогодні.