В комментариях к предыдущему посту @v1docq задал интересный вопрос, решил обсудить эту тему отдельно:
“Интересно было бы послушать про алгоритмы сжатия и их мат постановку и вообще если переносимость идей области сжатия видео в область сжатия сетей”
В кодеках есть много математики, которая не сильно поможет в DL, т.к. нейросети сами учат зависимости. Но есть моменты, которые можно заимствовать. Мысли вслух:
1. Пространственные зависимости. Кодеки ищут схожие паттерны внутри кадра и между кадрами. И тут вроде для ML все понятно, у нас есть свертки. Но если рассматривать кадр как слой, то почему бы не делать поиск схожих кернелов и штрафовать сетку за узкое распределение. Чем шире распределение по кернеллам, тем больше разных фичей собирает слой. Но главное не уплыть высокую сигму.
2. Темпоральные зависимости. Различные DL модели обработки video работают с тензорами NxWxHxC, где N - количество кадров, остальное характеристики одной картинки. Кадры похожи, поэтому чтобы хоть как-то сэкономить снижается framerate, например 15 кадров в секунду. Но фактически не обязательно обрабатывать прям все кадры целиком, достаточно и обучать модель, и запускать ее на так называемых ключевых кадрах, которые видеокодек может сам подобрать. Опять же есть SCD (scene change detection), когда изменения в кадре настолько большие, что лучше его сделать ключевым. Если копнуть глубже, то можно тренировать модель только на основных блоках, векторах движения и остатках, а референсные блоки восстанавливать на выходе. Так мы прогоняем значительно меньше пикселов + минимальное количество данных в виде векторов/остатков, которые можно в целом просто прокидывать до выхода.
3. RGB vs YUV/YCbCr. В видеокодеках в основном работают на color spaces типа YUV, их много. Это делается из-за того, что цвет для человека менее важен по количеству информации на бит. Поэтому RGB преобразуется в Y (яркость) + UV (цвет). А дальше используется разный chroma subsampling - плотность пикселей для хранения соответствующего канала. Самый популярные и достаточный для человеческого взгляда 4:2:0 (аналогичен 4:1:1), дальше идут 4:2:2 и только после этого избыточный 4:4:4. RGB у нас 4:4:4 - т.е. каждый канал записывается равным количеством пикселов. А 4:2:0 для Y оставляет 100% пикселов, для U и V по 25% и это сокращает 50% информации, не теряя визуального качества. Теперь к сути - зачем нам гнать 100% данных через сетку, если 50% для человека не имеют весомой значимости.
4. Квантование макроблоков после DCT (дискретно-косинусное преобразование). Берем кернел, делаем DCT, давим высокие гармоники, делаем обратное iDCT, восстанавливаем кернелл. Так мы можем выкидывать дубликаты кернеллов, которые отличаются мелкими высокочастотными частями. Или же смотреть в сторону чистки спектра в feature maps - это может уменьшить разнообразие, но возможно повысить стабильность обучения.
5. В кодеках в определенных случаях делается выбор лучшего кандидата - по блокам, по векторам, по разбиению и пр. Было бы неплохо в DL тоже иметь такой выбор кандидатов в зависимости от внешних обстоятельств. Например выключение кернеллов нерелевантных текущему контенту, или выбор определенных весов по степени их значимости. Я проводил исследование на тему AutoML в рамка контракта для одной крупной компании. Там делалось ранжирование весов моделей по степени их значимости и автоматический выбор по трешхолду. Сам трешхолд определялся ограничением железа. Если нам нужно взять модель для сервера, то берем все веса, если для ноута, то половину самых значимых, если для телефона, то режем еще сильнее. Кому интересно мы копали Once-for-All статья, репозиторий. Интересная штука для ознакомления.
6. Метрики оценки качества. Вижу, что многие в ML часто неверно делают выбор метрик. Например используют PSNR для сравнение в изображений в задачах Super Resolution. PSNR - это по сути как MSE с попиксельным сравнением. Часто даже в медиа сфере с ним работают аккуратно, т.к. его рост показывает не улучшение качества, а соответствие оригиналу. Можно использовать SSIM, он работает по более структурным фичам, не по пикселям. Но история такая же. На сгенерированном кадре важно не просто попасть в оригинал, а чтобы изображение было "корректное" и красивое. Обе метрики имеют низкую корреляцию с MOS (mean opinion score, человеческая метрика), очень быстрые, их лучше использовать как доп.метрики. VMAF - очень хороша, имеет хорошую корреляцию с MOS, под капотом набор метрик в том числе ML, обычно используется для видео, но картинки тоже можно сравнивать. Она получше, но и потяжелее
Ильдар Идрисов