![](https://habrastorage.org/webt/ic/mr/nr/icmrnrwrcj5g3kj8t8-zpmbm894.png)
Пока вы запоем просматриваете последний сезон «Очень странных дел» или «Озарка», мы всеми силами стремимся обеспечить для вас максимально высокое качество видео. Для этого мы постоянно расширяем возможности качества потокового видео и используем лучшие видеотехнологии. Например, мы вложили средства в кодеки нового поколения с лицензией royalty-free и изощрённые оптимизации кодирования видео. Недавно мы добавили в свой арсенал ещё один мощный инструмент: нейросети для уменьшения разрешения (даунскейлинга) видео. В этой статье мы расскажем, как повысили качество видео Netflix при помощи нейросетей, о сложностях, с которыми мы столкнулись и которые нам ещё предстоит встретить.
▍ Как использовать нейросети в кодировании видео Netflix?
Если упростить, то в нашем конвейере кодирования видео есть два этапа:
- Предварительная обработка видео, включающая в себя все преобразования, применяемые к исходному видео высокого качества перед кодированием. Самый важный аспект на этом этапе — это даунскейлинг видео, подгоняющий кодирование под размеры экранов различных устройств и оптимизирующий качество картинки под различные состояния сети. При даунскейлинге создаётся множество разрешений исходного видео. Например, оригинал видео в 4K будет уменьшен до 1080p, 720p, 540p и так далее. Обычно этот процесс выполняется при помощи традиционного фильтра ресэмплинга, например, Lanczos.
- Кодирование видео при помощи традиционного видеокодека, например AV1. Благодаря использованию пространственной и временной избыточности, присутствующей в видео, кодирование существенно уменьшает объём видеоданных, которые нужно потоково передать на устройство пользователя.
Мы выяснили, что сможем использовать нейронные сети (neural networks, NN) для улучшения качества видео Netflix, заменив традиционный даунскейлинг видео на даунскейлинг на основе нейронной сети. Эта методика, которую мы называем deep downscaler, имеет несколько ключевых преимуществ:
- Даунскейлинг при помощи обучения может улучшать качество видео и подстраиваться под контент Netflix.
- Он может быть интегрирован как модульное решение, то есть нам не придётся вносить никаких других изменений на стороне кодирования Netflix или на стороне клиентского устройства. Миллионы устройств, поддерживающих потоковое воспроизведение Netflix, автоматически получат выигрыш от этого решения.
- Отдельный блок обработки видео на основе NN может эволюционировать независимо от других элементов, использоваться не только в даунскейлинге видео и комбинироваться с различными кодеками.
Разумеется, мы верим в преобразующий потенциал NN в сферах, связанных с обработкой видео, не ограничивающихся даунскейлингом. Хотя традиционные видеокодеки по-прежнему доминируют, инструменты кодирования видео на основе NN переживают свой расцвет и ликвидируют разрыв с точки зрения эффективности сжатия. Deep downscaler — это наша прагматичная методика по улучшению качества видео при помощи нейросетей.
▍ Наша методика даунскейлинга видео на основе NN
Deep downscaler — это архитектура нейронной сети, предназначенная для сквозного повышения качества видео при помощи обучения высококачественного даунскейлера видео. Она состоит из двух блоков: блока предварительной обработки и блока изменения размеров. Блок предварительной обработки выполняет предварительную фильтрацию видеосигнала до последующей операции изменения размера. Блок изменения размера создаёт видеосигнал низкого разрешения, служащий входными данными для кодировщика. Мы использовали адаптивную архитектуру сети, применимую к широкому спектру разрешений, которые мы используем для кодирования.
![](https://habrastorage.org/webt/de/4n/wy/de4nwy6qkd2uv15wyxoqhfr27zu.png)
Нашей целью во время обучения является генерация наилучшего уменьшенного изображения, чтобы после апскейлинга среднеквадратичная погрешность была минимальной. Так как мы не можем выполнять оптимизацию напрямую под традиционный видеокодек, то исключаем эффект сжатия с потерями в цикле. Мы сосредоточились на создании надёжного даунскейлера, обученного на основе традиционного апскейлера, например bicubic. Наша методика обучения интуитивно понятна, она привела к созданию даунскейлера, который не привязан к конкретному кодировщику или реализации кодировки. Тем не менее, он требует тщательной проверки, чтобы продемонстрировать потенциал для широкого использования в кодировании видео Netflix.
▍ Совершенствование качества видео Netflix при помощи нейросетей
Задача deep downscaler — сквозное повышение качества видео для пользователя Netflix. При помощи экспериментов, в которых задействовались объективные измерения и субъективные визуальные тесты, мы обнаружили, что deep downscaler повышает качество для различных видеокодеков и конфигураций кодирования.
Например, для кодирования VP9 и предполагаемого апскейлера bicubic мы зафиксировали увеличение показателя Bjøntegaard-Delta (BD) VMAF примерно на 5,4% по сравнению с традиционным даунскейлингом Lanczos. Также мы зафиксировали увеличение показателя BD примерно на 4,4% для VMAF-NEG. Ниже показан пример результата для одного из видео с Netflix. Deep downscaler (красный график) обеспечил более высокий показатель VMAF при схожем битрейте или сравнимый показатель VMAF при более низком битрейте.
![](https://habrastorage.org/webt/cu/e3/nc/cue3ncunjg9gejqjqxlszpgifw4.png)
Наряду с объективными измерениями мы провели исследования субъективного восприятия, чтобы оценить визуальные улучшения, вносимые deep downscaler. В наших визуальных тестах на основе предпочтений мы обнаружили, что в условиях широкого ассортимента методик кодирования и алгоритмов апскейлинга deep downscaler предпочло почти 77% испытуемых. Испытуемые сообщали о улучшенном сохранении деталей и более чётком внешнем виде картинки. Ниже показан наглядный пример.
![](https://habrastorage.org/webt/ic/mr/nr/icmrnrwrcj5g3kj8t8-zpmbm894.png)
Также мы выполнили A/B-тестирование, чтобы понять общее влияние deep downscaler на потоковое воспроизведение, и не выявили никаких проблем с воспроизведением на устройствах. Наши A/B-тесты продемонстрировали улучшения в качестве услуг без отрицательного влияния на потоковое воспроизведение. Это показывает преимущество реализации deep downscaler для всех устройств, выполняющих потоковую передачу с Netflix, без риска снижения качества картинки или ухудшения воспроизведения на стороне пользователей.
▍ Как мы эффективно применяем нейронные сети в широком масштабе?
Учитывая масштабы нашего сервиса, применение нейронных сетей может привести к существенному увеличению затрат на кодирование. Чтобы решение было жизнеспособным, мы предприняли множество шагов для повышения эффективности.
- Архитектура нейронной сети была спроектирована так, чтобы быть вычислительно эффективной, избегая при этом любого отрицательного влияния на визуальное качество. Например, мы выяснили, что для наших потребностей достаточно лишь небольшого количества слоёв нейросети. Чтобы ещё сильнее снизить количество каналов ввода, мы применяем скейлинг на основе NN к яркости и насыщенности со стандартным фильтром Lanczos.
- Мы реализовали deep downscaler как фильтр на основе FFmpeg, работающий совместно с другими преобразованиями видео, например, с конверсией пиксельных форматов. Наш фильтр может работать и на CPU, и на GPU. На CPU мы использовали oneDnn, чтобы ещё больше снизить задержки.
▍ Интеграция нейронных сетей в нашу платформу кодирования нового поколения
Отделы технологий кодирования и разработки медиаоблака Netflix совместно разработали Cosmos — нашу платформу кодирования нового поколения. Проект deep downscaler стал превосходной возможностью демонстрации того, как Cosmos сможет стать движущей силой будущих медиаинноваций в Netflix. На диаграмме ниже показано, как deep downscaler был интегрирован в микросервис кодирования Cosmos.
![](https://habrastorage.org/webt/mp/um/iu/mpumiundcx52s3jts56cdcklhuc.png)
Микросервис кодирования Cosmos может обслуживать множество процессов кодировки. Например, сервис может быть вызван для выполнения анализа сложности высококачественного входящего видео или для генерации закодированных данных, предназначенных для потоковой передачи через Netflix. Находящаяся внутри сервиса функция Stratum — это serverless-слой, выделенный для запуска функций без сохранения состояния и вычислительно затратных функций. В вызове функции Stratum перед кодированием применяется наш deep downscaler. Благодаря возможностям Cosmos мы можем использовать внутреннюю инфраструктуру Titus и выполнять deep downscaler во всех наших средах с множественными CPU/GPU в широких масштабах.
▍ Что ждёт нас впереди
Deep downscaler проложил дорогу новым перспективам применения NN для кодирования видео в Netflix. Однако наше путешествие ещё не закончено, и мы стремимся к совершенствованию и инновациям. Мы изучаем некоторые другие сферы использования, например, очистку видео от шумов. Также мы исследуем более эффективные решения для широкомасштабного применения нейронных сетей. Нам интересно, как инструменты на основе NN смогут проявить себя в рамках наших кодеков нового поколения.
▍ Благодарности
Мы хотели бы поблагодарить следующих людей за помощь в проекте deep downscaler: Lishan Zhu, Liwei Guo, Aditya Mavlankar, Kyle Swanson и Anush Moorthy (отдел видеоизображения и кодирования), Mariana Afonso и Lukas Krasula (отдел видеокодеков и качества), Ameya Vasani (отдел разработки медиаоблака), Prudhvi Kumar Chaganti (отдел конвейера потокового кодирования), Chris Pham и Andy Rhines (отдел Data Science и инжиниринга), Amer Ather (отдел производительности Netflix), отдел Netflix Metaflow и профессора Alan Bovik (Техасского университета в Остине).
![](https://habrastorage.org/webt/ym/oc/6_/ymoc6_v0doy8yrm1y4xsrjlxotc.jpeg)