Открытые no-reference инструменты качества

Автор: Николай СапуновОбновлено: август 202614 мин чтения
Содержание статьи +

Кратко

No-reference метрика оценивает качество видео без исходного оригинала для сравнения – и это единственный вариант для прямых эфиров и пользовательских загрузок, где в точке измерения мастер-копии попросту нет. Открытый набор инструментов делится на четыре уровня: встроенные фильтры FFmpeg на один артефакт (blockdetect, blurdetect, freezedetect), детектор бандинга CAMBI от Netflix внутри libvmaf, единый набор слепых метрик pyiqa и обученные модели для клипа целиком – FAST-VQA, DOVER и Google UVQ. Сначала берите бесплатные фильтры, которые можно ставить в коммерческий продукт, а обученную модель подключайте, только когда нужна одна перцептивная оценка для сложного видео и есть чем её проверить. Любая no-reference оценка – это интервал, а не точка: перепроверяйте её на своём видео, потому что точность слепой метрики падает, как только ваш контент перестаёт быть похож на её обучающую выборку.

Зачем это нужно

Метрики из остальной части раздела – мера попиксельной ошибки PSNR, структурная мера SSIM, объединённая перцептивная оценка VMAF – все требуют оригинала для сравнения. В момент, когда вы измеряете прямой эфир или загрузку с телефона, оригинала уже нет, и все знакомые полноэталонные инструменты перестают работать. Эта статья – для инженера стриминга, разработчика UGC-платформы, руководителя прямых трансляций или QA-инженера, которому нужно поставить цифру качества на контент, пришедший без эталона. Неверный инструмент даст уверенную оценку, которая ничего не значит; верный, прочитанный честно, скажет, когда поток деградирует и где. Знать, какой открытый инструмент взять и насколько ему доверять, – это разница между сигналом о качестве и цифрой, которая вас обманывает.

Что такое «no-reference», в одном абзаце

Начнём с различия, которое организует всё ниже. Полноэталонной (full-reference) метрике нужны и нетронутый оригинал, и сжатая копия рядом; она измеряет разницу между ними. No-reference метрика – её ещё называют слепой (blind) – смотрит только на видео перед собой и оценивает качество по статистике самой картинки, так же как опытный колорист может взглянуть на кадр и сказать «это пережали», ни разу не увидев исходник. Концептуальный разбор того, почему это сложно и где это ломается, лежит в статье no-reference качество для live и UGC. Эта статья – её инструментальный близнец: что можно установить и запустить сегодня и как читать то, что оно выводит.

Одна рамка на всю статью: полноэталонная метрика проверяет экзамен по ключу с ответами; no-reference метрика оценивает его по почерку, грамматике и форме рассуждения – без ключа вовсе. Она может быть на удивление хороша – и может уверенно ошибаться на контенте, которого никогда не видела.

Четыре уровня открытого набора

Открытые реализации сортируются по четырём уровням – по тому, что они измеряют и во что обходится их запуск. Сначала выберите уровень, потом инструмент.

Рисунок 1. Открытый no-reference набор в четырёх уровнях. Два левых – ручные, бесплатные, их можно ставить в продукт; два правых добавляют обученные перцептивные оценки ценой GPU и лицензии, которую нужно прочитать.

Уровень 1 – встроенные фильтры FFmpeg. Они почти наверняка у вас уже есть. FFmpeg поставляется с несколькими no-reference детекторами, каждый настроен на один артефакт: blockdetect измеряет блочность (узор DCT-сетки от пережатия, разобранный в статье блочность и DCT-сетка), blurdetect измеряет перцептивное размытие, freezedetect находит замершие или продублированные кадры, а signalstats выдаёт покадровую статистику яркости/цветности. blurdetect и blockdetect появились в FFmpeg 5.1 (2022); остальные старше. Они не дают единой откалиброванной «MOS» – Mean Opinion Score, средней оценки 1–5, которую поставила бы панель зрителей, – но они бесплатны, быстры, безопасны для продукта по лицензии FFmpeg и идеальны для отлова одного конкретного дефекта.

Уровень 2 – CAMBI, детектор бандинга. Бандинг – видимые ступени там, где плавный градиент вроде неба должен быть непрерывным, – это артефакт, который большинство метрик пропускают, и единственный открытый инструмент, который ловит его хорошо, – это CAMBI (Contrast Aware Multiscale Banding Index) от Netflix. Это no-reference, покадровый детектор внутри libvmaf, спроектированный вручную на основе человеческой функции контрастной чувствительности, а не обученный на датасете (Netflix, PCS 2021). Его оценка начинается с 0 (бандинга нет) и растёт с видимостью бандинга; собственное эмпирическое правило Netflix ставит примерно 5 на «слегка раздражает» и около 24 на «невозможно смотреть» (документация Netflix CAMBI, 2026). Это редкая слепая метрика, которая одновременно пригодна для продакшена и бесплатна для поставки в продукт.

Уровень 3 – pyiqa, единый набор слепых метрик для изображений. Когда нужна перцептивная оценка, а не флаг артефакта, современный дом для этого – pyiqa (проект IQA-PyTorch): один pip install pyiqa даёт десятки реализаций no-reference метрик для изображений – необучаемую NIQE, обученную BRISQUE и обученные модели вроде MUSIQ, MANIQA, TOPIQ и CLIP-IQA, откалиброванные по оригинальному MATLAB и ускоренные на GPU (IQA-PyTorch, v0.1.15, 2026). Они оценивают один кадр, поэтому для видео вы прогоняете их покадрово и пулируете результат. Подвох – в лицензии, и он серьёзный, см. блок о типичной ошибке ниже.

Уровень 4 – обученные модели для клипа целиком. Для пользовательского контента, где деградации «непредсказуемы, сложны и часто перемешаны» (Tu et al., UGC-VQA, IEEE TIP 2021), лидеры по точности – глубокие модели, которые оценивают весь клип сразу. FAST-VQA (ECCV 2022) использует «фрагментную выборку» – оценивает небольшие пространственно-временные фрагменты вместо полного кадра – чтобы работать достаточно быстро для почти реального времени. DOVER (ICCV 2023) разделяет качество UGC-клипа на техническую и эстетическую оценки и поставляет облегчённый вариант DOVER-Mobile. Google UVQ (CVPR 2021), обученная на загрузках YouTube, имеет разрешительную лицензию Apache-2.0. Всем трём нужен GPU и аккуратная проверка, но это передний край для вопроса «насколько хорошо выглядит эта сложная загрузка?».

Какой инструмент брать

Уровень говорит вам семейство; ваша ситуация – конкретный инструмент. Решение в основном определяется тремя вопросами: есть ли у вас оригинал (если да – эта статья вам не нужна, используйте полноэталонный рабочий процесс FFmpeg и libvmaf), что именно вы пытаетесь поймать и есть ли у вас GPU.

Рисунок 2. Выбор no-reference инструмента. Если есть нетронутый оригинал – используйте полноэталонную метрику. Если нет – ветвитесь по тому, что нужно поймать, и есть ли GPU.

Если вы гонитесь за одним конкретным артефактом, оставайтесь в ручных уровнях: blockdetect для блочности, blurdetect для мягкости, CAMBI для бандинга. Они дёшевы, объяснимы и безопасны для продукта. Если нужна одна перцептивная оценка для готовой загрузки и у вас есть GPU, берите обученную модель – DOVER или FAST-VQA для UGC, UVQ когда важна лицензия Apache. Если вы измеряете live-сессию, а не картинку, то вопрос вообще не про пиксельную метрику, а про качество восприятия сессии (QoE), которое даёт стандартизированная битстрим-модель ITU-T P.1203 (открытая как Python-пакет itu-p1203) и метрики плеера из статьи метрики QoE стриминга.

Скрипт-компаньон этой статьи, советник по открытому no-reference набору, кодирует ровно эту логику: скажите ему сценарий, есть ли GPU и поставляете ли вы коммерческий продукт, и он назовёт инструмент, команду установки и лицензионный подвох.

Как их запустить: три команды

Инструментальная статья должна оставить вас способными что-то измерить. Вот три самые ценные no-reference команды, каждой нужно только то видео, которое вы хотите оценить.

Блочность, покадрово, через FFmpeg:

# Оригинал не нужен — читает блочность прямо с закодированного файла.
ffmpeg -i suspect_clip.mp4 -vf blockdetect,metadata=print:file=block.log -f null -

Бандинг, покадрово, через CAMBI в libvmaf. CAMBI работает без эталона, но использует полноэталонный интерфейс libvmaf, поэтому подайте один и тот же клип на оба входа:

# CAMBI не нужен эталон; подайте один файл на оба входа.
ffmpeg -i suspect_clip.mp4 -i suspect_clip.mp4 \
  -lavfi "libvmaf=feature=name=cambi:log_path=cambi.json:log_fmt=json" -f null -

Обученная покадровая оценка через pyiqa из командной строки:

# У BRISQUE нет эталона; меньше — лучше. (Лицензия: noncommercial — см. ниже.)
pyiqa brisque -t suspect_frame.png

В каждом случае нет ни -r reference.mp4, ни ключа с ответами – в этом весь смысл.

Читайте вывод как интервал, а не как точку

Вот дисциплина, которая отделяет полезную no-reference цифру от обманчивой. Слепая метрика – это модель, подогнанная под оценки людей, и, как любая модель, она несёт ошибку. Честный способ её показать – доверительный интервал, выведенный из RMSE модели – среднеквадратичной ошибки между её предсказаниями и реальными оценками людей на тестовой выборке, в единицах шкалы мнений (процедура стандартизирована в ITU-T P.1401, 2020).

Разберём пример. Допустим, обученная UGC-модель показывает корреляцию около 0,85 с оценками людей и RMSE около 0,42 по шкале 1–5 – цифры в диапазоне, который FAST-VQA и DOVER заявляют «в распределении» на большом датасете LSVQ (Wu et al., 2022, 2023). Клип получает оценку 3,8. 95% интервал – это оценка плюс-минус 1,96 умножить на RMSE:

интервал = 3,8 ± (1,96 × 0,42)
         = 3,8 ± 0,82
         = [2,98, 4,62]

Значит, «3,8» на самом деле означает «где-то от 3,0 до 4,6». Теперь второй клип получает 4,1. Он лучше? Сложите две ошибки в квадратуре, чтобы получить порог шума: 1,96 × 0,42 × √2 ≈ 1,16. Разрыв между клипами всего 4,1 − 3,8 = 0,3, далеко внутри этой полосы шума 1,16, поэтому два клипа неразличимы – объявить клип B победителем означало бы читать шум. Режим --band скрипта-компаньона делает эту арифметику за вас.

Разобранный пример: пулинг оценки бандинга

Тот же урок – «цифра суммирует, но не рассказывает всю историю» – решает, как пулировать покадровый детектор в одно число. Прогоните CAMBI на клипе с небом в бандинге, и вы можете получить среднее 4,8 по всем кадрам и максимум 9,1. Статья пулинг покадровых оценок в одно число объясняет, почему это важно: среднее 4,8 сидит ровно на «слегка раздражает», что уставший проверяющий может пропустить, но максимум 9,1 говорит, что в худших кадрах – на медленных панорамах неба – бандинг явно виден. Бандинг, блочность и замирания все всплесковые: они портят несколько секунд, а не весь клип. Пулируйте их максимумом или высоким перцентилем (скажем, 95-м), но не средним, иначе среднее разбавит реальный дефект до приемлемо выглядящей цифры.

«Типичная ошибка: поставка метрики с research-лицензией в коммерческий продукт. Самая дорогая ошибка с этим набором – юридическая, а не техническая. pyiqa выпущена под лицензией PolyForm Noncommercial плюс лицензией NTU S-Lab, и многие обученные модели (FAST-VQA, DOVER) поставляются как research-код со своими некоммерческими условиями (IQA-PyTorch, 2026). Это нормально для внутреннего бенчмаркинга и исследований, но встраивание их в продукт, который вы продаёте, может нарушить лицензию. Для коммерческой поставки оставайтесь на разрешительных инструментах – фильтрах FFmpeg (LGPL/GPL), CAMBI в libvmaf (BSD-plus-patent) и Google UVQ (Apache-2.0) – или получите коммерческую лицензию. Проверьте файл лицензии до того, как код попадёт в продакшен, а не после.»

Насколько они точны на самом деле

Будьте трезвы насчёт потолка. На контенте, похожем на их обучающую выборку – «в распределении», – лучшие обученные слепые модели достигают корреляции с оценками людей примерно от 0,83 до 0,88 на больших UGC-датасетах, тогда как хорошая полноэталонная метрика вроде VMAF достигает 0,94 и выше (Wu et al., 2022, 2023; LSVQ, Ying et al., 2021). Слепые метрики действительно полезны, но они уступают полноэталонным инструментам, которым позволено видеть ответ.

Бóльшая ловушка – что происходит вне распределения. Ручные классики – NIQE и BRISQUE – были построены и настроены на фотографических искажениях, и их корреляция с человеческим суждением на реальном пользовательском видео падает заметно ниже уровня, которому вы бы доверяли для решения. Бенчмарк UGC-транскодинга 2024 года обнаружил, что каждая из десяти полноэталонных и одиннадцати no-reference метрик набрала меньше 0,6 корреляции на этом контенте (BVI-UGC, Katsenou et al., 2024). Урок не «не используйте слепые метрики»; он в том, чтобы «не верить цифре слепой метрики, пока вы не проверили её по оценкам людей на видео, похожем на ваше».

Рисунок 3. Заявленная корреляция с оценками людей (SROCC) по семействам инструментов. Разрыв между столбцами «в распределении» и «другой датасет» для обученных моделей – это вся суть: слепая метрика хороша ровно настолько, насколько её обучающая выборка совпадает с вашим видео.

Поэтому практика, которой статья завершается, важнее выбора инструмента. Проверяйте любую слепую метрику по небольшому набору оценённых людьми клипов из вашего собственного каталога, прежде чем встраивать её в гейт (метод – в статье валидация метрик по оценкам людей, а эталон истины – стандарт ITU-R BT.500-15, 2023). Затем стройте интервал для каждой оценки, пулируйте перцентилем и относитесь к цифре как к скрининговому сигналу, который помечает клипы для просмотра человеком, – а не как к приговору.

Сравнение, на основе которого можно действовать

Таблица ниже – это статья в одном кадре: что измеряет каждый открытый инструмент, как его получить, безопасен ли он для поставки и – колонка, которая держит вас честными, – где он врёт.

Рисунок 4. Открытые no-reference инструменты рядом. Последняя колонка – где каждый врёт – это та, которую нужно прочитать, прежде чем доверять оценке.
ИнструментЧто измеряетУстановкаЭталонГде врёт (слепое пятно)
FFmpeg blockdetect / blurdetectодин артефакт (блочность, размытие)в FFmpeg ≥ 5.1не нуженне откалиброванная MOS; по одному артефакту
CAMBI (libvmaf)видимость бандинга (0 → ~24)в составе libvmafне нужентолько бандинг; слеп к другим артефактам
pyiqa (NIQE, BRISQUE, MUSIQ…)перцептивное качество кадраpip install pyiqaне нуженпокадрово; лицензия noncommercial; слабее вне распределения
scikit-video (VIIDEO, V-BLIINDS)слепое простр.-временное видеоpip install scikit-videoне нуженфактически не развивается; пин старых NumPy/SciPy
FAST-VQA / DOVERкачество UGC-клипа целикомклон из VQAssessmentне нуженнужен GPU; research-лицензия; только в распределении
Google UVQкачество UGC-клипа целикомклон google/uvqне нуженобучена на YouTube; проверяйте на своём контенте
itu-p1203QoE сессии из метаданныхpip install itu-p1203не нуженбез пикселей; оценка сессии, не точность картинки

Где здесь Фора Софт

Многое из того, что мы строим в Фора Софт, – это ровно тот контент, который приходит без эталона: live-видеоконференции и вебинары, потоки видеонаблюдения, сессии телемедицины и пользовательские загрузки в соцсетях и e-learning-платформах. Для этой работы мы опираемся на слепой набор – CAMBI и фильтры FFmpeg для конкретных артефактов, обученные модели там, где одна перцептивная оценка себя оправдывает, – и держимся одного правила: каждая no-reference оценка снабжается интервалом, пулируется перцентилем и проверяется по оценкам людей на собственном видео клиента, прежде чем что-либо гейтить. Наша методология бенчмарков описывает, как мы прикрепляем эту провенанс-информацию, чтобы цифра оставалась достойной доверия. Возможность, которую мы предлагаем, – не волшебная оценка; это дисциплина знать, когда слепая метрика говорит правду.

Главные выводы

  • No-reference метрики оценивают качество без оригинала – единственный вариант для live и UGC.
  • Сначала берите фильтры FFmpeg и CAMBI: бесплатно, быстро, можно в продукт, по артефакту.
  • Обученные модели (FAST-VQA, DOVER, UVQ) – для одной оценки UGC, с GPU.
  • Читайте любую слепую оценку как интервал (± 1,96 × RMSE), а не как точку.
  • Всплесковые артефакты (бандинг, блочность, замирания) пулируйте максимумом или перцентилем.
  • Проверяйте лицензию: pyiqa и многий research-код – некоммерческие.

Что почитать дальше

Строите такую систему?

Подберём параметры кодирования под ваш контент и посчитаем стоимость доставки до старта разработки.