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

Архівне відео у низькій роздільній здатності виглядає розмитим на сучасних екранах, а стандартні методи апскейлу додають мерехтіння та артефакти. Ми розробляємо AI-рішення для збільшення роздільної здатності відео зі збереженням плавності та деталізації. Наша команда реалізує проєкт під ключ — від підбору архітектури до впровадження та подальшої підтримки.
Часті запитання

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 впишеться у вашу інфраструктуру.

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142