Компания Facebook (запрещена в РФ) представила новый звуковой кодек EnCodec, использующий методы машинного обучения для повышения степени сжатия без потери качества. Кодек может применять как для потоковой передачи звука в режиме реального времени, так и для кодирования для последующего сохранения в файлах. Эталонная реализация EnCodec написана на языке Python с использованием фреймворка PyTorch и распространяется под лицензией CC BY-NC 4.0 (Creative Commons Attribution-NonCommercial), допускающей использование только в некоммерческих целях.
Для загрузки предложены две готовые модели:
- Казуальная модель, использующая частоту дискретизации 24 kHz, поддерживающая только монофонический звук и натренированная на разноплановых звуковых данных (подходит для кодирования речи). Модель может использоваться для упаковки звуковых данных для передачи с битрейтами 1.5, 3, 6, 12 и 24 kbps.
- Некаузальная модель, работающая на частоте 48 kHz, поддерживающая стереозвук и натренированная только на музыке. Моделью поддерживаются битрейты 3, 6, 12 и 24 kbps.
Для каждой модели подготовлена дополнительная языковая модель, позволяющая добиться увеличения степени сжатия (до 40%) без потери качества. В отличие от ранее развиваемых проектов по применению методов машинного обучения для сжатия звука, EnCodec может применяться не только для упаковки речи, но и для сжатия музыки с частотой дискретизации 48 kHz, соответствующей уровню звуковых CD.
По заявлению разработчиков нового кодека при передаче с битрейтом 64 kbps по сравнению с форматом MP3 им удалось примерно в десять раз увеличить степень сжатия звука с сохранением того же уровня качества (при использовании MP3 требуется полоса пропускания в 64 kbps, а для передачи с тем же качеством в EnCodec – 6 kbps).
Архитектура кодека построена на базе нейронной сети с архитектурой “трансформер” и основывается на четырёх звеньях: кодировщика, квантователя, декодировщика и дискриминатора. Кодировщик извлекает параметры голосовых данных и преобразует их упакованный поток с более низкой частотой кадров. Квантователь (RVQ, Residual Vector Quantizer) преобразует выдаваемый кодировщиком поток в наборы пакетов, сжимая информацию в привязке к выбранному битрейту.
На выходе квантователя образуется сжатое представление данных, пригодное для передачи по сети или сохранения на диск. Декодировщик раскодирует сжатое представление данных и восстанавливает исходную звуковую волну. Дискриминатор улучшает качество генерируемых образцов (sample) с учётом модели человеческого слухового восприятия. Независимо от уровня качества и битрейта применяемые для кодирования и декодирования модели отличаются достаточно скромными требованиями к ресурсам (вычисления, необходимые для работы в режиме реального времени, производятся на одном ядре CPU).