Компания NVIDIA представила алгоритм, позволяющий многократно снизить загрузку сети при видеозвонках или улучшить качество видео при такой же загрузке. Вместо того, чтобы посылать все кадры, алгоритм посылает один кадр с человеком, а затем лишь карту ключевых точек его лица, а компьютер на другой стороне анимирует кадр по этим картам с помощью нейросети.
Потоковая передача видео давно занимает большую часть от общего трафика в интернете, а после введения карантинных мер весной 2020 года доля видео, особенно видеозвонков, выросла, как и общий объем передаваемых данных в интернете. Большая часть разработчиков и IT-компаний решают эту проблему классическими путями: наращивают мощности датацентров, в том числе CDN, ограничивают качество видео и улучшают сжатие обычными алгоритмами. К примеру, в июле была выпущена финальная версия стандарта H266, которая должна увеличить степень сжатия еще на несколько десятков процентов по сравнению с прошлой версией, а YouTube весной уменьшил стандартное разрешение роликов. Но эти подходы решают проблему медленно и не дают многократной разгрузки сетей.
NVIDIA представила набор алгоритмов Maxine, предназначенных для улучшения видеозвонков. В него входит несколько алгоритмов, большая часть которых ранее уже была реализована в том или ином виде в исследовательских работах или потребительском программном обеспечении, но один из них довольно примечателен.
В обычных современных видеокодеках кадры передаются не как последовательность изображений в полном разрешении. Вместо этого, как правило, используется опорные кадры и кадры других типов, которые восстанавливаются на основе опорных и друг друга. В новом алгоритме NVIDIA тоже используются опорные кадры, но вместо других кадров применяется карта ключевых точек — это стандартный метод передачи выражения лица, при котором на краях основных его частей (рта, носа, глаз, бровей и овала лица) расставляются точки.
Таким образом, видеопоток состоит из двух типов данных: редких опорных кадров и постоянных карт ключевых точек. На компьютере принимающего пользователя нейросеть «рисует» полноценные кадры, анимируя опорный кадр с человеком, меняя расположение частей лица в соответствии с картой для текущего момента.
Это позволяет многократно снизить битрейт видеопотока. При медленном подключении к интернету это дает меньше задержек и в целом более высокое качество, при этом, судя по демонстрационному ролику, лицо восстанавливается достаточно достоверно, причем на одном из примеров можно увидеть, что алгоритм корректно работает даже если на лице находится медицинская маска.
Недавно Google разработала другой нейросетевой алгоритм для улучшения качества звонков при плохом подключении к интернету, но он предназначен для звукового потока, а не видео. Он анализирует последние фрагменты речи собеседника и при возникновении пауз в сигнале реалистично заполняет их синтезированной записью речи с сохранением звучания голоса конкретного человека.
Григорий Копиев