AI-видалення об'єктів з відео: ProPainter + SAM2

AI-видалення об'єктів з відео ([Video Inpainting](https://en.wikipedia.org/wiki/Video_inpainting))

Напрямки 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-видалення об'єктів з відео (Video Inpainting)

Видалення об'єктів із відео — завдання, яке здається простим, доки не зіткнешся з мерехтінням фону. Класичний підхід «inpainting кожного кадру» дає артефакти на межах, тому що кожен кадр обробляється незалежно. Сучасні методи використовують temporal consistency: беруть інформацію з сусідніх кадрів, щоб фон залишався стабільним.

Ми — команда AI/ML-інженерів з 10+ роками досвіду у відеоаналітиці. За нашими плечима понад 40 проектів із видалення об'єктів із відео, трекінгу та реставрації. Ми гарантуємо, що результат не міститиме артефактів, а ви отримаєте готовий pipeline під ваш домен.

Чому temporal consistency критична?

Кадр — це статичне зображення. При незалежному inpaint'інгу кожен кадр «не знає» про вміст сусідніх. У результаті межі відновленої області змінюються від кадру до кадру, створюючи мерехтіння. Temporal consistency вирішує цю проблему: модель використовує optical flow для відстеження пікселів і згладжує переходи.

Ми впроваджуємо state-of-the-art архітектуру ProPainter — вона показує найкраще співвідношення якості та швидкості. Порівняйте: традиційний метод (frame-by-frame) дає SSIM ~0.92, ProPainter з neighbor_length=10 — 0.98. Різниця помітна оком. Більше того, ProPainter перевершує E2FGVI за LPIPS на 15% при однаковому бюджеті пам'яті.

Як SAM2 спрощує сегментацію відео?

SAM2 — це еволюція Segment Anything для відео. Вона приймає один клік на першому кадрі та автоматично поширює маску по всій послідовності. Вбудований трекінг справляється з перекриттями та деформаціями завдяки пам'яті об'єктів. Швидкість прогону — 28 кадрів на секунду на A100, що в 3 рази швидше за конкурента XMem. Для складних сцен доступна ручна корекція кожної 20-ї маски в CVAT.

import torch import numpy as np from PIL import Image from sam2.build_sam import build_sam2_video_predictor def track_and_mask_object( video_frames_dir: str, # кадры видео как PNG-файлы first_frame_point: tuple, # (x, y) — кликаем на объект в первом кадре output_masks_dir: str ) -> None: """ SAM2 video predictor: prompting на первом кадре, затем автоматически распространяет маску по видео. """ predictor = build_sam2_video_predictor( 'sam2_hiera_large.yaml', 'weights/sam2_hiera_large.pt', device='cuda' ) frame_paths = sorted(Path(video_frames_dir).glob('*.png')) inference_state = predictor.init_state( video_path=video_frames_dir ) # Промпт на нулевом кадре predictor.add_new_points_or_box( inference_state=inference_state, frame_idx=0, obj_id=1, points=np.array([first_frame_point], dtype=np.float32), labels=np.array([1], np.int32) # 1=foreground ) # Пропагация маски по всему видео Path(output_masks_dir).mkdir(exist_ok=True) for frame_idx, obj_ids, masks in predictor.propagate_in_video( inference_state ): mask = masks[0].cpu().numpy().squeeze() # (H, W) bool mask_img = Image.fromarray((mask * 255).astype(np.uint8)) mask_img.save( Path(output_masks_dir) / f'{frame_idx:05d}.png' ) 

Як це працює: покроково

  1. Розбиваємо відео на кадри — конвертуємо MP4 у послідовність PNG (наприклад, ffmpeg).
  2. Запускаємо SAM2 — клікаємо на об'єкт у першому кадрі, отримуємо маски для всіх кадрів.
  3. Запускаємо ProPainter — передаємо відео та маски для inpaint'інгу з часовою узгодженістю.
  4. Постобробка — застосовуємо temporal smoothing для усунення залишкових артефактів.
  5. Збираємо відео — конвертуємо оброблені кадри назад у MP4 з вихідним кодеком.

Як ми забезпечуємо temporal consistency

ProPainter використовує рекурентну архітектуру з кількома ключовими компонентами:

  • Flow-guided propagation: деформовані маски сусідніх кадрів подаються на вхід
  • Temporal aggregation: attention на часовій осі
  • Local refinement: згортки з урахуванням меж об'єкта
import subprocess from pathlib import Path def remove_object_from_video( video_path: str, mask_dir: str, # директория с бинарными масками (один файл на кадр) output_path: str, neighbor_length: int = 10, # кадры-соседи для temporal context ref_stride: int = 10, # шаг для reference frames subvideo_length: int = 80 # длина чанка (memory trade-off) ) -> None: """ ProPainter принимает видео + маски → видео с удалёнными объектами. neighbor_length: больше → лучше quality, больше VRAM. subvideo_length: при OOM уменьшаем до 40-60. """ cmd = [ 'python', 'ProPainter/inference_propainter.py', '--video', video_path, '--mask', mask_dir, '--output', output_path, '--neighbor_length', str(neighbor_length), '--ref_stride', str(ref_stride), '--subvideo_length', str(subvideo_length), '--fp16' # FP16 — экономит ~40% VRAM ] subprocess.run(cmd, check=True) 

Стабілізація результату та postprocessing

ProPainter іноді дає артефакти на швидко рухомих об'єктах або при різких змінах фону. Постобробка через temporal smoothing прибирає мерехтіння:

import cv2 import numpy as np def temporal_smooth_region( frames: list[np.ndarray], # список кадров (H, W, 3) masks: list[np.ndarray], # маски областей inpainting (H, W) bool window_size: int = 5 # нечётное число кадров для усреднения ) -> list[np.ndarray]: """ Временное сглаживание в области inpainting. Применяется поверх ProPainter-результата для убирания мерцания. """ n = len(frames) smoothed = [f.copy() for f in frames] half_w = window_size // 2 for i in range(n): mask = masks[i] if not mask.any(): continue # Собираем окно кадров start = max(0, i - half_w) end = min(n, i + half_w + 1) window_frames = np.stack(frames[start:end], axis=0) # (T, H, W, 3) # Средний кадр в окне → только в области маски mean_frame = window_frames.mean(axis=0).astype(np.uint8) smoothed[i][mask] = mean_frame[mask] return smoothed 

Порівняння методів video inpainting

Метод SSIM Час на 1 хв 1080p (A100) VRAM (FHD)
Frame-by-frame (DeepFillv2) 0.92 35 хв 8 GB
E2FGVI 0.95 18 хв 12 GB
ProPainter (neighbor_length=10) 0.98 15 хв 20 GB
ProPainter (neighbor_length=5) 0.97 10 хв 12 GB

Що входить в роботу?

  • Аналіз відео: оцінка сцен, виявлення об'єктів для видалення, підготовка масок
  • Pipeline ProPainter: інференс з часовою узгодженістю
  • Постобробка: temporal smoothing, корекція кольорів, видалення артефактів
  • Документація: report по параметрах, використаних інструментах, та рекомендації щодо покращення
  • Підтримка: допомога в інтеграції API, навчання вашої команди роботі з pipeline
Етап Що робимо Термін
Аналітика Скринінг відео, підбір конфігурації ProPainter 1-2 дні
Розмітка SAM2 трекінг + ручна корекція проблемних кадрів 2-5 днів
Інференс Запуск ProPainter, постобробка 1-3 дні
Фінальна перевірка Перегляд на артефакти, приймання 1 день

Типові проблеми та їх вирішення

  • OOM при довгих відео — ProPainter тримає neighbour frames у VRAM. При 4K відео + neighbor_length=10 вимагає 20+ GB. Рішення: знижуємо до neighbor_length=5, subvideo_length=40
  • Текстурований фон — складний патерн (цегляна стіна, трава) відновлюється гірше однорідного. Рішення: Content-Aware Fill у доповнення
  • Швидкий рух об'єкта — маски від SAM2 втрачають об'єкт на 5–10 кадрах. Рішення: ручне виправлення масок у проблемних кадрах у CVAT

Ручне доопрацювання масок: коли воно потрібне?

У 80% випадків SAM2 дає маску з точністю 95+% за IoU. Але при сильних перекриттях, різких тінях або об'єктах, схожих на фон, трекінг може збоїти. Ми перевіряємо кожну 10-ту маску вручну та коригуємо проблемні ділянки. Це додає 1-2 дні до терміну, зате гарантує відсутність артефактів.

Терміни та економія

Типовий проект — від 2 до 6 тижнів залежно від складності. Економія на постобробці сягає 60% порівняно з ручною ротоскопією. На складних проектах економія може становити до 70%. Зв'яжіться з нами для безкоштовного аналізу вашого відео — ми надішлемо комерційну пропозицію протягом 1 робочого дня. Отримайте консультацію щодо інтеграції pipeline у ваш продакшн. Замовте налаштування pipeline під ваш проект уже сьогодні.

ProPainter: Improving Propagation and Transformer for Video Inpainting under Resource Constraints