High Fidelity Neural Audio Compression
Alexandre Défossez, Jade Copet, Gabriel Synnaeve, Yossi Adi
eess.AS, cs.AI, cs.SD, stat.ML
2022-10-25
Meta用残差向量量化和单一多尺度STFT判别器做流式神经音频编码。24 kHz上3 kbps的MUSHRA主观分超过Lyra-v2的6 kbps和Opus的12 kbps;48 kHz立体声6 kbps接近64 kbps的MP3。
传统编解码器 Opus、EVS 在极低码率上听感掉得很快。神经编解码器能压得更狠,但训练常堆多套波形判别器,损失尺度互相打架,流式推理还要处理归一化和填充。SoundStream / Lyra 已经证明 RVQ 能用一套模型覆盖多个码率,工程上仍重。
EnCodec 要的是可实时、可流式、从语音到音乐都过得去的神经 codec:24 kHz 单声道 1.5 到 24 kbps,48 kHz 立体声音乐再加一档。目标是同一套权重支持多码率,并且在 CPU 单核上快过实时。
结构是卷积编码器、残差向量量化、镜像解码器。编码器 32 通道起步、四段下采样,步幅 (2,4,5,8),中间残差块,末尾两层 LSTM。24 kHz 每秒 75 帧隐向量,48 kHz 每秒 150 帧。流式版把全部 padding 放在左侧,来 320 个采样(约 13 ms)就能出 320 个采样,用 weight norm 替换按时间统计的 layer norm。
量化是 RVQ:最多 32 本码书(48 kHz 用 16 本),每本 1024 项、10 bit。训练时随机保留 4 的倍数本数,一套模型覆盖 1.5、3、6、12、24 kbps。码书用 EMA 更新,死码从当前 batch 重采样,外加 commitment 损失。
训练损失有时域 L1、多尺度 mel 谱 L1+L2,加上单一的多尺度 STFT 判别器(五个窗口,复数谱实部虚部拼接)。相对特征匹配损失按判别器层能量归一。关键的稳定器是 loss balancer:权重表示「这块损失该占生成器总梯度的多少」,跟损失的自然量级脱钩。判别器按码率分头,每个 batch 只更新对应那一个。
另外训了一个 5 层小 Transformer 对离散码做算术编码,再省 25% 到 40% 带宽,代价是多等一帧、延迟再加约 13 ms。
24 kHz 流式 MUSHRA(越高越好):
| 模型 | 码率 | 干净语音 | 带噪语音 | 音乐集 1 |
| EnCodec | 3 kbps(熵编码后 1.9) | 67.0 | 62.5 | 89.6 |
| EnCodec | 6 kbps(4.1) | 83.1 | 69.4 | 92.9 |
| Lyra-v2 | 6 kbps | 66.2 | 59.9 | 75.7 |
| Opus | 12 kbps | 76.5 | 61.9 | 77.8 |
| EVS | 9.6 kbps | 84.4 | 80.0 | 89.9 |
同等标称码率下 EnCodec 全面高于对照。3 kbps 平均已经超过 Lyra-v2 的 6 kbps 和 Opus 的 12 kbps。音乐上 3 kbps 就接近 EVS 的 9.6 kbps。
48 kHz 立体声音乐:6 kbps 的 MUSHRA 82.9,对上 MP3 64 kbps 的 82.7 和 Opus 24 kbps 的 82.9;12 kbps 升到 88.0。熵编码再省约 20% 到 30%。
消融:单用 MS-STFT 判别器,MUSHRA 77.5,SI-SNR 6.67,ViSQOL 4.35;再加 MPD 只多 1.5 分 MUSHRA,训练更重。流式相对非流式,6 kbps 上 SI-SNR 从 7.46 降到 6.67,ViSQOL 4.39 到 4.35。MacBook Pro 2019 单线程、6 kbps:24 kHz 编码 RTF 9.8、解码 10.4;加上熵编码仍约 1.6。48 kHz 非流式初始延迟 1 秒,加熵编码后 RTF 低于 1。
这是后来开源音频 tokenizer 的一条主线。Mimi、许多语音语言模型,量化思路都能接到这篇的 RVQ 流式 codec。对要落地的人,三个能直接抄的选择是:判别器可以只留多尺度 STFT;用 balancer 按梯度份额调损失,别跟损失绝对值死磕;小语言模型加算术编码能再挤带宽,适合非强实时场景。
3 kbps 打过 6 到 12 kbps 的传统和神经基线,这是听感上的跨越,不是表格上的一分两分。
主观分来自众包 MUSHRA,滤了乱标,仍是 50 条 5 秒片段、每条至少 10 个有效标注,短片段不能代表长音频稳定性。48 kHz 只在音乐上训和测。流式有可测的客观掉点。熵编码在不同硬件上的浮点一致性,作者自己说只做了 1e-6 量化,部署还要再验。对比 Lyra-v2 时对方跑在 32 kHz 上采样音频上,采样率不完全对齐。小 Transformer 在高码率上压缩比下降,作者归因为模型太小、难以联合建模多本码书。