AI-апскейл відео: супер-роздільність із temporal consistency

AI-апскейл відео: super resolution із збереженням temporal consistency

Напрямки 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-апскейл відео: super resolution із збереженням temporal consistency

Архівне відео в 720p не тягне сучасні 4K-екрани — просте інтерполювання кадрів дає розмитість, а per-frame AI-моделі — мерехтіння через розрив temporal consistency. Ми вирішуємо цю проблему за допомогою відеоспецифічних архітектур: Real-BasicVSR і BasicVSR++. З практики: клієнт з OTT-платформою перевів 180 хвилин 720p в 4K. BasicVSR++ на двох RTX A6000 обробив відео за 14 годин, VMAF зріс з 72 до 89 — платформа прийняла контент без ручного ретушування. Економія часу склала 40% порівняно з per-frame методами, а один з клієнтів заощадив до $12 000 на ручній обробці, перейшовши на наш pipeline. Ми займаємося AI-збільшенням роздільної здатності відео (super resolution) за допомогою нейромереж, переводимо SD, 720p, 1080p в 4K.

Обмеження per-frame моделей для відео

Застосування Real-ESRGAN до кожного кадру окремо порушує temporal consistency: шум на однорідних поверхнях змінюється від кадру до кадру, з'являється мерехтіння. В результаті навіть при високому PSNR відео виглядає неприродно. Відеомоделі, такі як BasicVSR++, використовують bidirectional propagation — інформацію з минулих і майбутніх кадрів, що забезпечує плавні переходи.

Temporal consistency: визначення та метрики

Temporal consistency — плавність переходу між сусідніми кадрами. Вимірюється через метрики, такі як ST-RRED або різниця в оптичному потоці. Для апскейлу відео критично зберігати однаковий шум і текстуру на одних і тих же об'єктах протягом всього ролика. BasicVSR++ оптимізований саме на цю метрику.

Як ми це робимо: стек та реалізація

Основний інструмент — BasicVSR++ на PyTorch. Для довгих відео використовуємо чанковану обробку з overlap-кадрами, щоб безшовно зшивати шматки. Нижче — приклад коду для завантаження моделі та апскейлу одного чанка:

import torch import numpy as np import cv2 from basicsr.archs.basicvsrpp_arch import BasicVSRPlusPlus def upscale_video_basicvsr( frames: list[np.ndarray], # список кадрів (H, W, 3) BGR scale: int = 4, num_feat: int = 64, num_propagation_blocks: int = 7, cpu_cache_length: int = 100 # кадри в пам'яті GPU одночасно ) -> list[np.ndarray]: """ BasicVSR++ використовує bidirectional propagation: інформацію з минулих І майбутніх кадрів. cpu_cache_length: при довгих відео частину кадрів вивантажуємо на CPU. """ model = BasicVSRPlusPlus( mid_channels=num_feat, num_blocks=num_propagation_blocks, is_low_res_input=True, spynet_path='weights/spynet_20210409-c6c1bd09.pth' ) state_dict = torch.load( f'weights/BasicVSR++_reds4_vimeo90k.pth' )['params'] model.load_state_dict(state_dict, strict=True) model.eval().cuda() # Нормалізація і конвертація BGR→RGB tensor_frames = [] for frame in frames: f_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) t = torch.from_numpy(f_rgb).float() / 255.0 t = t.permute(2, 0, 1).unsqueeze(0) # (1, C, H, W) tensor_frames.append(t) # Batch всіх кадрів → (1, T, C, H, W) video_tensor = torch.stack( [f.squeeze(0) for f in tensor_frames], dim=0 ).unsqueeze(0).cuda() with torch.no_grad(), torch.cuda.amp.autocast(): output = model(video_tensor) # (1, T, C, 4H, 4W) result = [] for i in range(output.shape[1]): frame_t = output[0, i].float().cpu() frame_np = (frame_t.permute(1,2,0).numpy() * 255).clip(0,255) result.append( cv2.cvtColor(frame_np.astype(np.uint8), cv2.COLOR_RGB2BGR) ) return result 

Для довгих відео реалізуємо чанковану обробку з перекриттям (overlap), щоб зшивати шматки без видимих меж. Кожен чанк розміром 50 кадрів, перекриття 5 кадрів. Це дозволяє обробляти відео будь-якої довжини, обмежені лише часом.

Яку модель обрати: BasicVSR++ чи Real-BasicVSR?

Модель PSNR Vid4 4x Temporal consistency Швидкість 1080p→4K VRAM
Real-ESRGAN (per-frame) 27.4 Низька (мерехтіння) ~8fps RTX3080 6GB
BasicVSR 31.4 Хороша ~2fps RTX3080 12GB
BasicVSR++ 32.4 Відмінна ~1.5fps RTX3080 16GB
RVRT 32.8 Відмінна ~0.8fps RTX3080 20GB
Real-BasicVSR 31.0 Хороша ~3fps RTX3080 10GB

Відзначимо: як видно з таблиці, BasicVSR++ краще Real-ESRGAN на 5 пунктів PSNR і дає відмінну temporal consistency. Якщо пріоритет — швидкість, обираємо Real-BasicVSR. Модель BasicVSR++ представлена в роботі BasicVSR++: Improving Video Super-Resolution with Enhanced Propagation and Alignment (https://github.com/ckkelvinchan/BasicVSR_PlusPlus).

Боротьба з компресійними артефактами

Компресія H.264 з QP > 28 підсилюється SR-моделлю — блочність стає помітною на 4K-виході. У кожному проекті ми додаємо передобробку: deblock-фільтр FFmpeg (параметр -deblock). У складних випадках — додатковий AI-denoiser. Це входить у стандартний pipeline.

Процес роботи над проектом

  1. Аналітика — вивчаємо вихідне відео, визначаємо цільовий формат, обираємо модель (BasicVSR++ / Real-BasicVSR / RVRT). Оцінюємо час обробки на доступному GPU. Аналізуємо необхідність fine-tuning під специфічний тип контенту (аніме, спорт, відео з камер спостереження).
  2. Проектування pipeline — налаштовуємо препроцесинг, чанкування, постпроцесинг. Оптимізуємо batch size і використовуємо mixed precision.
  3. Реалізація — розгортаємо скрипти, інтеграція з вашою інфраструктурою (S3, API). При необхідності навчаємо модель на вашому датасеті (термін від 8 до 14 тижнів).
  4. Тестування — прогоняємо на репрезентативному відрізку, заміряємо VMAF, перевіряємо відсутність мерехтіння та temporal consistency.
  5. Деплой — переносимо в production, налаштовуємо моніторинг, передаємо документацію.

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

  • Документація: опис архітектури, інструкції по запуску, рекомендації по GPU.
  • Вихідний код: репозиторій з pipeline, Docker-образ, скрипти деплою.
  • Навчання вашої команди: сесія з використання та адаптації.
  • Гарантія: технічна підтримка 1 місяць після здачі.

Орієнтовні терміни

Завдання Термін
Сервіс апскейлу відео (Real-BasicVSR) 2–3 тижні
Pipeline з препроцесингом + BasicVSR++ 4–6 тижнів
Fine-tuning під специфічний тип контенту 8–14 тижнів
Технічні деталі пайплайну

Для оптимізації пам'яті використовуємо gradient checkpointing і CPU offloading. Mixed precision (FP16) пришвидшує інференс на ~30%. При роботі з кількома GPU — DataParallel або DistributedDataParallel.

Чому обирають нас?

Ми — команда AI-інженерів з багаторічним досвідом у computer vision. Виконали 15+ проектів з апскейлу відео для OTT-платформ, архівів, спортивних трансляцій. Використовуємо ліцензійне ПЗ, гарантуємо результат за метриками VMAF/PSNR. Ми пропонуємо відеоапскейл під ключ — від аналізу до деплою. Зв'яжіться з нами для оцінки вашого проекту — ми підберемо оптимальне рішення та розрахуємо терміни. Замовте безкоштовну консультацію, щоб дізнатися, як наш pipeline впишеться у вашу інфраструктуру.