Пулинг видео: из покадровых оценок в число

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

Кратко

Любая полнореференсная метрика качества – PSNR, SSIM, VMAF – оценивает каждый кадр клипа отдельно, поэтому десятисекундное видео даёт сотни чисел, и шаг, который сжимает их в одну оценку для отчёта, называется пулингом. Везде по умолчанию используется среднее арифметическое: оно взвешивает каждый кадр одинаково и потому прячет короткий плохой отрезок внутри длинного хорошего – та самая плохая секунда, которую зритель и запомнит, растворяется в среднем. Лучшие варианты, наоборот, выводят худшие кадры на поверхность: гармоническое среднее тянет оценку к низким значениям, перцентильный пулинг докладывает оценку худших 5% или 10% кадров, а минимум – оценку единственного худшего кадра. Статья показывает арифметику вручную, объясняет, почему худшие моменты определяют восприятие сильнее среднего, и даёт правило, какой метод пулинга применять для какой задачи.

Почему это важно

Число, которое вы кладёте в отчёт или в quality gate, – не сырой выход метрики, а сводка тысяч покадровых оценок, и метод сведения молча решает, что это число означает. Доложите среднее VMAF 88 – энкод выглядит безопасным; доложите 5-й перцентиль того же энкода – и можете увидеть 30, потому что одна секунда развалилась. Если вы не указываете, как пулили, два инженера, измеряющие один и тот же файл, не сойдутся в числах, а регрессионные ворота пропустят релиз, который заметно дёргается. Статья – для видеоинженера, лида по кодированию или QA-инженера, кто докладывает числа VMAF или SSIM и хочет, чтобы это одно число значило именно то, что он думает. Она предполагает, что с самими метриками вы уже знакомы; глубокие разборы – это PSNR простыми словами, SSIM простыми словами и VMAF простыми словами.

Метрика оценивает каждый кадр; вы докладываете одно число

Начнём с того, что метрика на самом деле выдаёт. Полнореференсная метрика – та, которой нужен исходный эталон для сравнения, схема разобрана в трёх схемах измерения – работает кадр за кадром. Она выравнивает кадр 1 вашего сжатого видео с кадром 1 оригинала, выдаёт оценку, делает то же для кадра 2 и так до конца. Десятисекундный клип при 30 кадрах в секунду – это 300 сравнений и 300 оценок.

Никому не нужны 300 чисел. Отчёту, дашборду или воротам «прошёл/не прошёл» нужно одно. Операция, которая сворачивает покадровые оценки в это одно число, и есть пулинг – думайте о нём как об итоговой оценке за курс, которую преподаватель ставит после проверки всех работ. Подвох в том, что итоговую оценку можно вычислить по-разному: усреднить все работы, отбросить худшую или завалить любого, кто провалил финал. Каждое правило защитимо, и каждое даёт разную оценку из одних и тех же баллов. Пулинг оценок качества видео – ровно этот выбор, и большинство команд даже не замечают, что его сделали.

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

Рисунок 1. Пулинг происходит дважды. Внутри кадра попиксельная карта качества пулится в одну оценку кадра; по клипу покадровые оценки пулятся в одно число.

Пулинг происходит дважды: по пространству, затем по времени

На самом деле в каждой метрике спрятаны два шага пулинга, и назвать оба полезно, чтобы их не путать. Первый происходит внутри одного кадра. SSIM – Structural Similarity, метрика, сравнивающая структуру двух изображений из статьи SSIM простыми словами – не выдаёт одно число на кадр напрямую. Она выдаёт карту качества: оценку для каждого маленького окна картинки. Привычный покадровый SSIM, который вы видели, – это среднее по этой карте, пространственный пулинг арифметическим средним, определённый в оригинальной статье про SSIM как «mean SSIM» (Wang, Bovik, Sheikh, Simoncelli, IEEE TIP, 2004).

Второй шаг происходит по кадрам, и о нём в основном эта статья. Когда у каждого кадра уже есть одна оценка, вы пулите эти покадровые оценки вдоль времени в одно число для клипа. Это временной пулинг.

Оба шага попадают в одну и ту же ловушку: среднее сглаживает плохие места. Кадр может быть безупречен на 95% площади и сильно сломан в маленькой области – кусок смазанного текста, полосатый участок неба – и среднее его карты качества всё равно покажет «отлично», потому что хорошая площадь перевесит плохую. У числа на уровне клипа та же слабость на уровень выше: несколько ужасных кадров исчезают в море хороших. Лекарство одинаково на обоих уровнях, поэтому, поняв временной пулинг, вы понимаете и пространственный – это та же идея, применённая к пикселям, а не к кадрам.

По умолчанию – арифметическое среднее, и оно усредняет правду

Вот факт, который удивляет большинство инженеров: то самое число VMAF или SSIM, которое вы докладывали, почти наверняка арифметическое среднее, потому что среднее – выбор по умолчанию в любом распространённом инструменте. Netflix говорит это прямо: VMAF «докладывает агрегатную оценку как среднее (то есть арифметическое среднее) покадровых оценок в основном ради простоты, а также ради согласованности с другими метриками (например, средним PSNR)» (Netflix VMAF FAQ, 2024). Арифметическое среднее – сложить все покадровые оценки и поделить на число кадров – взвешивает каждый кадр одинаково.

Равное взвешивание и есть проблема. Зритель не взвешивает каждый кадр одинаково. Он замечает момент, когда картинка развалилась, и едва регистрирует тысячи кадров, которые выглядели нормально. Среднее делает обратное человеческому вниманию: оно позволяет длинному хорошему отрезку заглушить короткий плохой.

Представьте десятисекундный клип, где девять секунд чистые, а одна секунда – трудный для кодирования взрыв, быстрая панорама, склейка – рассыпается. При 30 кадрах в секунду это 270 кадров с VMAF 95 и 30 кадров с VMAF 30. Арифметическое среднее:

среднее = (270 × 95 + 30 × 30) / 300
        = (25 650 + 900) / 300
        = 26 550 / 300
        = 88,5

Клип набирает 88,5 – уверенно «хорошая» территория, число, которое проходит quality gate без второго взгляда. Но целая секунда выглядела явно плохо, и именно эту секунду зритель запомнит. Среднее не соврало в арифметике; оно ответило на не тот вопрос. Оно сказало, что средний кадр в порядке, когда вам надо было знать, что худшая секунда – нет.

Рисунок 2. Среднее (88,5) висит над секундным провалом до VMAF 30. Ровная линия среднего и есть то, что прячет провал, который зритель бы заметил.

Почему худшие моменты решают восприятие качества

Это не просто интуиция. Исследования того, как люди пулят качество во времени, указывают в одну сторону: люди взвешивают худшие части гораздо сильнее среднего. Netflix говорит это напрямую в том же FAQ – «есть психовизуальные свидетельства... что мнения людей склонны взвешивать худшие по качеству кадры тяжелее» – и добавляет честную оговорку, что лучший способ пулинга остаётся открытым вопросом и зависит от масштаба времени, «секунды против минут» (Netflix VMAF FAQ, 2024).

Академическая работа резче. Исследование того, как локальные оценки качества распределяются по пространству и времени, показало, что «сильные искажения видео, кратковременные в пространстве и/или во времени, оказывают большое влияние на общее воспринимаемое качество», и построило метод пулинга, который намеренно подчёркивает худшие оценки по обоим измерениям (Park, Seshadrinathan, Lee, Bovik, IEEE Transactions on Image Processing, 2013). Урок: короткий сильный сбой бьёт по человеческому вердикту непропорционально малому числу затронутых кадров – ровно тот сигнал, который арифметическое среднее выбрасывает.

Есть и второй человеческий эффект, который стоит знать, – эффект новизны (recency): зритель тяжелее взвешивает то, что видел недавнее, поэтому затык или провал качества ближе к концу клипа стоят дороже того же провала в середине. Стандартизированная модель качества стриминга ITU-T P.1203 встраивает это взвешивание последнего впечатления в свой шаг временной интеграции (ITU-T P.1203, 2017). Новизна важнее всего для длинного стриминга, где эстафету у метрик картинки принимают метрики QoE стриминга; для короткого клипа ею обычно можно пренебречь, но она объясняет, почему «среднее качество» и «запомненное качество» – не одно и то же число.

Набор инструментов пулинга

Если среднее хоронит худшие кадры, лекарство – пулить так, чтобы их вывести. Консольные инструменты VMAF дают опцию --pool с несколькими методами – mean, harmonic_mean, median, min, perc5, perc10 и perc20 – а фильтр libvmaf в FFmpeg выставляет min, harmonic_mean и mean (Netflix VMAF FAQ, 2024; документация фильтра libvmaf FFmpeg). Вот что каждый делает с нашим клипом со взрывом и для чего он годится.

Гармоническое среднее усредняет обратные величины оценок, что математически тянет результат к низким значениям. Для нашего клипа:

гармоническое = 300 / (270/95 + 30/30)
              = 300 / (2,8421 + 1,0000)
              = 300 / 3,8421
              = 78,1

Гармоническое среднее докладывает 78,1 вместо 88,5 – больше чем на десять пунктов ниже, потому что плохая секунда теперь весит больше. Это мягкая поправка: оценка всё ещё отражает весь клип, но у низких кадров громче голос.

Перцентильный пулинг докладывает оценку с плохого конца распределения. Оценка 5-го перцентиля (perc5) – значение, ниже которого лежат худшие 5% кадров; 10-й перцентиль (perc10) – худшие 10%. В нашем клипе худшие 10% кадров – ровно плохая секунда, поэтому и perc5, и perc10 докладывают 30 – перцентиль говорит правду, которую спрятало среднее. Это ближайшее одно число к «насколько плохо становится на заметном отрезке».

Минимум (min) докладывает единственный худший кадр – здесь 30. Это строжайший возможный пул и самый чувствительный к одному-единственному кадру-выбросу, поэтому он лучше как сигнал тревоги («случилось ли вообще что-то плохое?»), чем как итоговая оценка.

И предупреждение про медиану – среднее значение в отсортированном ряду. Звучит надёжно, но это худший выбор для ловли короткого дефекта. В нашем клипе медиана равна 95, потому что плохая секунда – меньше половины кадров, так что средний кадр хороший. Медиана не просто пропускает взрыв; она сертифицирует клип как безупречный. Используйте медиану только когда ждёте, что плохие кадры будут большинством, а для дефекта качества это почти никогда не так.

Рисунок 3. Одни и те же 300 кадров, пять методов пулинга, пять разных итоговых оценок от 95 до 30 – и между ними не изменился ни один пиксель.

Ещё один метод встречается скорее в исследованиях, чем в дефолтных инструментах, – пулинг Минковского, настраиваемое среднее с показателем степени, который управляет тем, насколько сильно оно кренится к низким оценкам (показатель 1 – обычное среднее; более высокие показатели весят плохие кадры сильнее, около 4 – частый выбор). Исследование, заново пулившее VMAF средним Минковского, нашло, что оно «хорошо приближает субъективно измеренный QoE» и обошло арифметическое среднее по корреляции с оценками людей, подтвердив с другой стороны, что простое среднее переоценивает качество (Batsi, Kondi, IS&T Electronic Imaging, 2020).

Осторожно: гармоническое среднее и нулевые оценки

У гармонического среднего есть острый край, о котором стоит знать прежде, чем ему доверять. Поскольку оно суммирует обратные величины, единственный кадр с оценкой ровно ноль даёт член 1/0, который не определён, и весь пул либо взрывается, либо обращается в ноль. Оценки VMAF могут доходить до нуля (модель обрезает отрицательные предсказания), поэтому реальные реализации тихо сдвигают нулевые и околонулевые оценки к крошечному положительному значению перед пулингом. Это разумный инженерный приём, но он означает, что гармоническое среднее клипа с несколькими околонулевыми кадрами чувствительно к этому сдвигу и читать его надо с осторожностью. Когда бóльшая часть клипа сильно сломана, предпочитайте перцентиль или минимум – у них нет деления, чтобы сломаться.

Пространственный пулинг: та же ловушка на уровень ниже

Всё сказанное выше применимо и внутри одного кадра, и именно там метрика может вас обмануть, даже когда временной пулинг в порядке. Вспомните, что покадровый SSIM, который вы докладываете, – это среднее по карте качества. Допустим, кадр почти идеален на 95% площади – SSIM 0,99 – но маленькая наложенная подпись плохо сжата на SSIM 0,70. Среднее SSIM:

среднее SSIM = 0,95 × 0,99 + 0,05 × 0,70
             = 0,9405 + 0,035
             = 0,976

Эти 0,976 читаются как «отлично», но текст – та часть, куда взгляд зрителя идёт первым делом – заметно изуродован. Те же идеи перцентиля и Минковского лечат пространственный пулинг: взвешивание худших областей карты отслеживает человеческую оценку лучше, чем усреднение, потому что, как формулирует литература по пространственному пулингу, низкокачественные области заметнее для зрителя и в основном определяют воспринимаемое качество (Moorthy, Bovik, SPIE, 2009). Когда вы читаете, что метрика «не видит» локального дефекта вроде бэндинга или артефакта текста, причиной часто бывает среднее пространственное; каталог этих провалов – где объективные метрики врут.

Методы пулинга кратко

Соберём методы временного пулинга в одном месте. Важны два последних столбца: что метод на самом деле говорит и где он вводит в заблуждение, если читать его в одиночку.

Метод пулингаОценка клипаЧто говоритГде врёт / слепое пятно
Арифметическое среднее88,5Среднее качество кадраХоронит короткие плохие отрезки; дефолт и самый обманчивый для дефектов
Гармоническое среднее78,1Среднее с креном к низким кадрамМягкое; ломается на нулевых оценках; всё ещё одна сводка
Медиана95,0Средний кадрИгнорирует дефект короче половины клипа – обычно не тот инструмент
Перцентиль (perc5/10)30,0Насколько плохо у худших 5–10%Требует обосновать порог; игнорирует, как часто это бывает
Минимум30,0Единственный худший кадрПереоценивает один кадр-выброс; сигнал тревоги, не оценка

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

«Частая ошибка: доклад пулённой оценки без указания пулинга. «VMAF 88» – половина фразы. Пулённой как – средним, гармоническим, 5-м перцентилем? Два инженера, измеряющие один файл с pool=mean и pool=harmonic_mean, доложат разные числа и оба будут правы, а сравнение энкода, пулённого средним, с энкодом, пулённым перцентилем, бессмысленно. Лекарство – одно уточнение: «среднее VMAF 88, 5-й перцентиль VMAF 30». Всегда пульте оба клипа одинаково и всегда говорите как – правило «яблоки к яблокам» из как читать отчёт о метриках качества начинается здесь.»

Какой пулинг для какой задачи

Единственно верного пула нет; есть верный пул для каждой задачи. Для сравнения энкодеров или кривой rate-quality арифметическое среднее годится и привычно, потому что вы сравниваете типичное качество и обе стороны несут одно и то же смещение – просто держите пулинг одинаковым для всех энкодов. Для quality gate в CI/CD ставьте ворота на пул худшего случая: низкий перцентиль (perc5 или perc10) или минимум ловит регрессию, которую среднее пропустит, – логика из ворот качества в CI/CD. Для отчёта стейкхолдеру покажите среднее и пул худшего случая рядом, чтобы сводка была честной. Для QoE стриминга на длинной сессии пул метрики картинки – лишь часть истории; доминируют новизна и затыки, и это слой QoE стриминга, а не покадровый пул.

Рисунок 4. Выбирайте пул по задаче. Сравнения могут использовать среднее; воротам нужен пул худшего случая; отчёты показывают оба.

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

Фора Софт делает видеософт с 2005 года – стриминг, WebRTC-конференции, OTT, e-learning, телемедицина и видеонаблюдение – и пулинг мы фиксируем одним из первых, когда настраиваем quality gate для клиентского пайплайна. Контент, который мы измеряем, полон коротких сильных событий: передача между камерами в видеонаблюдении, перерисовка расшаренного экрана в конференции, склейка в OTT – и арифметическое среднее пропустило бы каждое из них. Поэтому наши ворота читают пул худшего случая, а не только среднее, а наши отчёты всегда указывают метод пулинга и перцентиль рядом с итоговым средним. Мы записываем выбор пулинга к каждой цифре в нашей методологии бенчмарков, потому что число качества, которое нельзя воспроизвести – включая то, как его пулили, – это не измерение.

Ключевые выводы

  • Пулинг сворачивает сотни покадровых оценок в одно число, которое вы докладываете.
  • По умолчанию это арифметическое среднее, прячущее короткие плохие отрезки в длинных хороших.
  • Люди взвешивают худшие моменты сильнее среднего; пульте под это.
  • Гармоническое среднее, низкие перцентили и минимум выводят плохие кадры; медиана их хоронит.
  • Пулинг происходит дважды – по пикселям (пространственный) и по кадрам (временной).
  • Всегда указывайте метод пулинга и пульте обе стороны сравнения одинаково.

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

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

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