WavFlow:Meta 开源原始波形空间音频生成项目

整理 facebookresearch/WavFlow 的定位、方法、安装方式、推理入口、训练流程和使用限制。WavFlow 尝试绕过 latent compression,直接在 raw waveform space 中从视频和文本生成同步高保真音频。

facebookresearch/WavFlow 是 Meta AI 发布的多模态音频生成项目,论文标题是 WavFlow: Audio Generation in Waveform Space

项目地址:https://github.com/facebookresearch/WavFlow

它关注的不是语音合成,也不是单纯的音乐生成,而是从视频和文本条件生成同步、高保真的音频。更特别的是,它不走常见的 latent compression 路线,而是尝试直接在 raw waveform space 里做端到端音频生成。

截至写作时,GitHub 页面显示仓库约有 55 star、3 fork,代码主要是 Python,项目没有发布 release。仓库 README 也明确提醒:由于组织政策限制,目前不能发布 production-trained checkpoints,团队正在训练基于完全开源数据的 foundation checkpoint。在那之前,用户需要自己训练模型。

WavFlow 想解决什么问题

很多多模态音频生成方法会先把音频压缩到 latent 空间,再在 latent 上做生成,最后还原成波形。这条路线效率高,但也会带来一个问题:压缩过程可能损失细节,最终音频的质感、同步性和高频信息会受影响。

WavFlow 的思路是绕开这一步,直接在原始波形空间生成音频。

README 里提到,它通过 waveform patchifying 和 amplitude lifting,让 flow matching 可以稳定地作用在 raw audio 上,并使用直接的 x-prediction。直白一点说,它不是先把声音压成某种中间表示再生成,而是把音频波形本身切成适合模型处理的 patch,并做幅度变换,让模型能在波形层面学习生成。

这也是它最值得关注的地方:如果端到端波形生成能稳定工作,就有机会减少编码器/解码器带来的信息瓶颈。

支持哪些输入模式

从 README 和训练说明看,WavFlow 面向三类输入。

第一类是 VT2A,也就是 video + text to audio。给模型视频和文本描述,让它生成与画面和语义同步的音频,比如森林、青蛙、鼓声、滑板等场景。

第二类是 T2A,也就是 text to audio。只有文本描述,没有视频输入。训练时使用 CLIP text feature,推理时 CSV 里可以把 video_exist 设为 0

第三类是 V2A,也就是 video to audio。只有视频,没有文本。推理时可以把 text_exist 设为 0,模型会使用 learned empty CLIP-text token。

这种设计比较实用。真实数据里不一定每条样本都有完整的视频、文本和音频标注,WavFlow 用 video_existtext_exist 这类字段把缺失模态显式表达出来,训练和推理都能处理不同组合。

评测和效果定位

README 提到,WavFlow 在 VGGSound 的 VT2A 任务和 AudioCaps 的 T2A 任务上进行评测,表现可以和已有 latent-based 方法相当。

这句话的意义不是说它已经全面碾压现有模型,而是证明一件事:端到端 raw waveform generation 并不一定输给传统 latent 框架。至少在 acoustic richness、fidelity 和 synchronization 这些指标上,它可以达到同一档水平。

项目页还提供了 forest、frog、drum、skateboard 等 demo,并在项目主页放了 24 个以上样例和并排 benchmark 对比。对音频生成模型来说,demo 很重要,因为文字指标很难完整描述声音的质感、空间感和同步感。

安装方式

官方提供了自动安装脚本:

1
2
3
4
git clone https://github.com/facebookresearch/WavFlow.git
cd WavFlow
bash scripts/setup.sh
conda activate wavflow

scripts/setup.sh 会创建名为 wavflow 的 conda 环境,并安装所需依赖。

如果想手动安装,可以按 README 里的方式:

1
2
3
4
5
conda create -n wavflow python=3.10 -y
conda activate wavflow
pip install -r requirements.txt
pip install -e . --no-deps
conda install -n wavflow -c conda-forge "ffmpeg<7" -y

这里的 ffmpeg<7 主要是为了 torio 视频解码。README 还说明,CLIP、Synchformer、empty-string CFG embedding 等外部权重会在首次运行时自动下载或计算,并缓存到 ~/.cache/wavflow/

推理怎么跑

由于官方暂时没有发布 production-trained checkpoints,下面的推理入口只适用于你已经有训练好的 checkpoint 的情况。

1
bash scripts/launch/predict.sh [--gpu N] [--config PATH]

默认配置文件是:

1
wavflow/configs/infer.yaml

输入 CSV 由 data.csv_path 指定,支持视频、文本,或者两者同时存在:

1
2
3
4
5
video_path,caption,video_exist,text_exist
/abs/path/sample1.mp4,a whistling rocket explodes,1,1
/abs/path/sample2.mp4,birds chirping in a forest,1,1
,a whistling rocket explodes,0,1
/abs/path/sample3.mp4,,1,0

其中 video_exist=0 表示不解码视频,使用 learned empty CLIP/Sync tokens;text_exist=0 表示忽略 caption,使用 learned empty CLIP-text token。如果有逗号的 caption,需要加引号。

常用启动参数包括:

1
2
3
--gpu N
--config PATH
WAVFLOW_ENV

关键配置项包括 model.namemodel.ckpt_pathmodel.use_emainference.duration_sectarget_sample_rateinference.cfgnum_stepsnoise_scalenoise_shiftprediction_typeseed 和输出目录。

EMA 的一个坑

README 特别提醒了 model.use_ema 的问题。

WavFlow 的 checkpoint 里可能有 model_ema1,它按 ema_decay = 0.9999 更新。如果训练只跑了几百或几千步,EMA 里可能还包含大量随机初始化值,推理时会产生噪声。

所以,如果你只是做短跑、过拟合小样本或 smoke test,采样时应该考虑:

1
model.use_ema: false

或者使用训练足够久之后保存的 ema_epoch_*.pth。这个细节很实用,否则很容易误以为模型坏了,其实只是 EMA 还没稳定。

训练流程

官方的 TRAINING.md 把训练分成两步。

第一步是特征提取。

T2A 只提取 CLIP text feature;VT2A 会提取 CLIP frame feature、Synchformer feature 和 CLIP text feature。示例 CSV 大致是:

1
2
id,audio_path,video_path,caption
sample1,/abs/or/relative/wav/sample1.wav,/abs/or/relative/video/sample1.mp4,a whistling rocket explodes

视频长度需要大于等于 extraction.duration_sec,默认是 8 秒;更短的片段会被跳过。特征提取可以这样运行:

1
2
bash scripts/launch/extract_t2a.sh
bash scripts/launch/extract_vt2a.sh

如果要用更多 GPU 或自定义配置:

1
2
NPROC_PER_NODE=4 bash scripts/launch/extract_vt2a.sh
CONFIG_PATH=path/to/your_extract.yaml bash scripts/launch/extract_t2a.sh

第二步是训练。

单机多卡可以用:

1
bash scripts/launch/train_single_node.sh

多节点训练需要设置 NNODESNODE_RANKMASTER_ADDRMASTER_PORTNPROC_PER_NODE。训练输出包括 checkpoint_latest.pthcheckpoint_epoch_*.pthema_epoch_*.pth、生成音频样本和 training.log

训练可以自动 resume:如果实验目录里存在 checkpoint_latest.pth,训练会从那里继续。

适合谁关注

WavFlow 更适合研究者和工程团队关注,而不是普通用户直接拿来做成品音效。

适合关注它的人包括:

  • 研究 video-to-audio、text-to-audio 或 multimodal audio generation 的人。
  • 想比较 raw waveform generation 和 latent-based audio generation 的团队。
  • 需要训练自有音频生成模型,并能准备数据和 GPU 资源的用户。
  • 对视频画面和声音同步要求高的应用团队。
  • 想研究 flow matching 在原始音频波形上是否可行的人。

如果你只是想找一个网页工具,输入 prompt 直接生成音效,WavFlow 现在不是最省事的选择。它暂时没有公开 production checkpoint,部署路径也更接近研究代码。

使用时要注意什么

第一,不能把它当成“下载即用”的音频生成模型。官方目前没有发布生产训练 checkpoint,真正推理前需要自己训练,或者等待后续开放数据 checkpoint。

第二,许可证不是宽松商用默认选项。README 说明,WavFlow 大部分代码采用 CC-BY-NC 4.0,部分 vendored 组件沿用 MIT、Apache 2.0、CC BY-NC 4.0 和 Stability AI Community License 等原始许可证。商业使用前要仔细读 LICENSENOTICE.txt

第三,训练数据很关键。WavFlow 的优势建立在音频、视频和文本对齐数据之上。如果数据质量差、caption 不准确、音画不同步,模型很难学到稳定的声音生成。

第四,raw waveform generation 虽然减少 latent bottleneck,但也可能带来更高的训练和推理成本。实际项目里仍然要在音质、速度、显存、采样率和输出时长之间取舍。

小结

WavFlow 的价值在于提出了一个清晰问题:多模态音频生成一定要先压缩到 latent 空间吗?

它用 waveform patchifying、amplitude lifting 和 flow matching,尝试直接在 raw waveform space 里生成同步高保真音频。评测结果说明,这条路线至少有机会和成熟的 latent-based 方法站在同一水平线上。

不过,现阶段它更像一套研究和训练框架,而不是开箱即用的产品模型。没有公开生产 checkpoint、许可证偏非商用、训练需要音视频文本对齐数据,这些都决定了它更适合研究、复现和二次训练。如果你关注下一代 video-to-audio 或 text-to-audio 模型,WavFlow 值得认真看一眼。

参考资料

记录并分享
使用 Hugo 构建
主题 StackJimmy 设计