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 під ключ.
Що входить у нашу роботу: покроковий процес
- Аналіз даних: розмітка 20–50 прикладів для донавчання (якщо потрібно).
- Вибір моделі: RVM для швидкості, SAM2 + matting для якості.
- Розробка API: REST/gRPC ендпоінти для інтеграції.
- Контейнеризація: Docker + Triton Inference Server для деплою.
- Моніторинг: метрики latency, throughput, кількість помилок сегментації.
- Документація: опис пайплайну, інструкція для операторів.
- Навчання: передаємо модель і скрипти, допомагаємо налагодити роботу.
Строки та вартість
| Етап |
Строк |
| API-сервіс на REMBG |
1–2 тижні |
| Система з SAM2 + fine-tuning |
3–5 тижнів |
| Повний pipeline з matting і QA |
5–8 тижнів |
Вартість розраховується індивідуально — залежить від обсягу даних, потрібної швидкості та якості. Оцінюємо проект за 1–2 дні після знайомства з вашими зображеннями — пишіть нам для консультації, підберемо оптимальну архітектуру під ваш бюджет. Замовте AI-пайплайн під ключ за 1–2 тижні вже сьогодні.
Як distribution shift вбиває метрики CV-моделі в промисловості
На виробництві ставлять камеру, контролюють якість продукції. Модель навчена на 10 000 розмічених зображень — точність на тесті mAP 0.84. Запускають у продакшен — і в перший же тиждень пропускають 30% дефектів. Освітлення на лінії змінюється по змінах, distribution shift обнуляє метрики. Це класична історія з Computer Vision у промисловості, де розпізнавання образів дає збій без правильної обробки дрейфу.
Наші інженери з досвідом 60+ проектів з комп'ютерного зору знають, як виключити такі сценарії. Гарантуємо стабільну роботу моделі в реальних умовах.
Які архітектури детекції об'єктів обрати: YOLO, RT‑DETR чи інші?
YOLO — стандарт для real‑time детекції. YOLOv8 та YOLOv11 від Ultralytics — найбільш використовувані версії у виробництві: простий API, активна спільнота, вбудована валідація та експорт в ONNX/TensorRT. Для задач з високими вимогами до точності та коли latency менш критична — RT‑DETR, transformer‑based архітектура без NMS, дає кращий mAP на COCO при порівнянній швидкості з YOLOv8l.
| Архітектура |
mAP на COCO (val2017) |
FPS (A10G, FP16) |
Складність деплою |
| YOLOv8n |
37.3 |
700+ |
Низька (ONNX/TensorRT) |
| YOLOv8m |
50.2 |
250 |
Низька |
| RT‑DETR-L |
53.0 |
140 |
Середня (вимагає PyTorch) |
| Mask R‑CNN |
38.2 (bbox) |
30 |
Висока |
Типова помилка при навчанні детектора: датасет 8000 зображень, 3 класи, fine‑tune YOLOv8m — F1 0.73 на валідації. Дивимося confusion matrix — один клас майже ніколи не детектується. Причина: дисбаланс 1:23. Рішення: oversampling рідкісного класу, focal loss для objectness, аугментації (Mosaic, MixUp вимкнути для рідкісного класу — вони його «розмивають»). Transfer learning обов'язковий: передтреновані на COCO ваги скорочують потребу в даних у 10 разів. Fine‑tune на 500–2000 доменних зображеннях дає робочу модель за 1–2 дні на одній GPU.
Для edge deployment: експорт в ONNX → TensorRT engine. YOLOv8n в TensorRT FP16 на Jetson AGX Orin дає 150+ FPS при P99 latency < 8 ms — це в 3 рази швидше, ніж ONNX Runtime без TensorRT. На сервері A10G: 700+ FPS для YOLOv8n в TensorRT INT8.
Як fine‑tuning YOLO допомагає в розпізнаванні образів?
Припустимо, потрібно знаходити мікродефекти на поверхні металу — задача з високою роздільною здатністю та перекосом класів. Використовуємо YOLOv8m, передтренований на COCO (документація Ultralytics), і донавчаємо на 2000 власних зображень. Застосовуємо аугментації Mosaic, MixUp, random perspective. Після 200 епох mAP 0.5 досягає 0.93. Ключові прийоми:
-
focal loss для objectness голови — зменшує внесок легко класифікованих прикладів.
-
class‑balanced sampling — вирівнює представництво рідкісних класів.
-
Test Time Augmentation (TTA) — підвищує recall на 5–7% за рахунок усереднення по фліпах та масштабах.
Отримайте консультацію з підбору архітектури для вашого завдання — зв'яжіться з нами.
Які архітектури сегментації обрати: SAM, Mask R‑CNN чи інші?
SAM (Segment Anything Model) від Meta змінив підхід до сегментації. SAM 2 працює з відео, підтримує трекінг об'єктів через кадри — для інтерактивного виділення об'єкта по точці або bbox це найкращий вибір з коробки. Для production instance segmentation без інтерактивного промпту — Mask R‑CNN або YOLOv8‑seg. YOLOv8‑seg навчається як звичайний детектор з додатковими масками, зручний у тих же пайплайнах. Семантична сегментація (кожен піксель — клас) — SegFormer, DeepLabV3+. SegFormer‑B5 дає хороший баланс точності та швидкості для аналізу супутникових знімків або медичної сегментації.
Кейс: сегментація клітин на мікроскопічних зображеннях. Датасет 400 зображень з ручною розміткою. Навчання Mask R‑CNN на ResNet‑50 backbone дало IoU 0.61 — погано. Проблема: об'єкти (клітини) перекриваються, стандартний NMS вбиває перекриваючі передбачення. Рішення: перехід на cellpose (спеціалізована архітектура для біомедичних задач) + soft‑NMS. IoU зріс до 0.79.
Коли Tesseract не справляється з OCR?
Tesseract — відправна точка для простих задач: друкований текст, хороше освітлення, рівне розташування. Як тільки з'являються рукописні елементи, нестандартні шрифти, перспективні спотворення або багатоколоночний макет — Tesseract деградує швидко.
PaddleOCR — production‑grade рішення: виявлення текстових блоків + розпізнавання + структурний аналіз. Працює з коробки для 80+ мов, включаючи українську. Підтримує таблиці та документи зі складною структурою. Wikipedia: Оптичне розпізнавання символів. TrOCR (Microsoft) — трансформерний OCR з сильними результатами на рукописному тексті. Для українського рукописного тексту потрібен fine‑tuning: базова модель навчена переважно на латиниці.
Що робити, якщо Tesseract не справляється з розпізнаванням образів на документах?
Для задач «витягни дані з рахунку / договору / паспорта» використовуємо LayoutLMv3 або Donut — ці моделі розуміють layout документа, а не тільки текст. Інтеграція через Hugging Face Transformers, fine‑tuning на 200–500 розмічених документах. Типовий pipeline:
- Preprocessing: deskew, denoising, binarization через OpenCV.
- Виявлення текстових блоків: PaddleOCR detection або CRAFT.
- Розпізнавання: PaddleOCR recognition або TrOCR.
- Post‑processing: нормалізація, валідація через regex або LLM для структурованих полів.
Для документів з фіксованою структурою template matching + OCR точково по координатах часто надійніше за end‑to‑end рішення.
Face Recognition: ідентифікація та верифікація
Face recognition = detection + alignment + embedding + matching. Кожен етап важливий.
Detection: RetinaFace або InsightFace для точної локалізації обличчя та ключових точок. MTCNN — старіше, але надійне рішення. Embedding: ArcFace (InsightFace) — state‑of‑the‑art для face recognition embeddings. Моделі iresnet50/iresnet100 передтреновані на MS1MV3 (5M ідентичностей). Ембеддинг‑вектор 512 float32, порівняння за cosine similarity. Threshold tuning: поріг рішення — критичний параметр. При threshold 0.6 типовий FPR на LFW benchmark — 0.001, TPR — 0.985. У production threshold потрібно калібрувати під реальний distribution: люди в масках, зі зміненою зовнішністю, в різних умовах освітлення. Liveness detection обов'язковий: MiniFASNet — lightweight модель на CPU, FaceX‑Zoo містить кілька передтренованих liveness‑детекторів.
Відеоаналітика
Відео — послідовність кадрів плюс часовий вимір. Наївний підхід — детектувати на кожному кадрі — дорого.
Трекінг: ByteTrack та BoT‑SORT — стандарт для multi‑object tracking. Працюють поверх будь-якого детектора, додають persistent ID об'єктам між кадрами — це дає підрахунок об'єктів, трекі руху, velocity.
Оптимізація: не потрібно обробляти кожен кадр. Для статичних сцен детекція на кожному 5–10 кадрі, між ними — трекер. Для детекції подій (людина увійшла в зону) background subtraction (OpenCV MOG2) як lightweight pre‑filter перед нейромережевою детекцією. Action Recognition: SlowFast, VideoMAE для класифікації дій. Важкі моделі — для production використовуємо ONNX export + TensorRT або офлайн обробку.
Як виміряти якість моделі розпізнавання образів у продакшені?
Моніторинг якості — ключовий елемент MLOps. Відстежуємо:
- розподіл prediction confidence;
- частку low‑confidence передбачень (індикатор OOD‑даних);
- дрейф вхідних зображень через feature distribution (embeddings з backbone).
Падіння середньої confidence з 0.87 до 0.71 за тиждень — ранній сигнал про distribution shift. NVIDIA Triton Inference Server рекомендує відстежувати ці метрики через Prometheus. Наші сертифіковані інженери налаштовують моніторинг і гарантують SLA по якості інференсу.
Деплой CV‑моделей
Для онлайн інференсу використовуємо Triton Inference Server (NVIDIA) — production‑стандарт для serving CV‑моделей. Підтримує TensorRT, ONNX, PyTorch, dynamic batching, multiple instances. REST та gRPC API. Гарантуємо стабільну роботу під навантаженням.
Edge deployment: ONNX Runtime на ARM/x86 CPU. TensorFlow Lite для мобільних пристроїв. OpenVINO для Intel CPU/GPU/VPU — дає 2–3× приріст швидкості на Intel залізі порівняно з ONNX Runtime. Після деплою передаємо модель з документацією та навчаємо персонал.
Що входить в роботу
| Етап |
Зміст |
Орієнтовний термін |
| Аналіз |
Технічне завдання, підбір архітектури, оцінка даних |
3–5 днів |
| Розмітка |
Збір зображень, анотування (до 5000 об'єктів) |
1–3 тижні |
| Навчання |
Fine‑tuning моделі, валідація на тестовій вибірці |
1–2 тижні |
| Оптимізація |
Експорт в ONNX/TensorRT/OpenVINO, тестування на цільовому залізі |
1–2 тижні |
| Інтеграція |
REST/gRPC API, інтеграція з існуючою інфраструктурою |
1–2 тижні |
| Деплой |
Розгортання на сервері або edge‑пристрої, навантажувальне тестування |
1 тиждень |
| Документація та навчання |
Інструкції, навчання персоналу, передача коду та моделі |
3–5 днів |
| Підтримка |
Технічна підтримка на 3 місяці після запуску |
— |
Терміни та вартість
Прототип детектора на існуючих даних — 1–2 тижні. Production‑система з оптимізацією під цільове залізо — 4–8 тижнів. Повний цикл включаючи розмітку даних (1000–5000 зображень) — 2–4 місяці. Вартість розраховується індивідуально під кожну задачу. Ми на ринку більше 5 років, реалізували 60+ проектів з комп'ютерного зору. Оцінимо ваш проект під ключ — замовте консультацію, щоб отримати розрахунок та технічну пропозицію.