训练你自己的音频水印模型:AudioSeal基于AudioCraft的完整训练与检查点转换教程
【免费下载链接】audiosealLocalized watermarking for AI-generated speech audios, with SOTA on robustness and very fast detector项目地址: https://gitcode.com/gh_mirrors/au/audioseal
AudioSeal 是一个用于 AI 生成语音的高效音频水印方案,具有最先进的鲁棒性和极快的检测速度。本文带你从零开始,学习如何基于 AudioCraft 训练一个属于自己的 AudioSeal 音频水印模型,并完成检查点转换,把训练产物变成可直接调用的水印生成器与检测器。
🎯 为什么需要自己训练音频水印模型?
官方已提供开箱即用的 16 比特水印模型,但如果你想:
- 换用自己的语音数据集(比如特定语种、特定场景的音频)
- 调整水印比特数(嵌入 16 比特之外的秘密消息)
- 复现论文结果或微调鲁棒性超参数
就需要走一遍完整的音频水印训练流程。AudioSeal 的训练流水线构建在 AudioCraft 之上,配合 Dora 实验管理工具,整套流程可以本地单机运行,也能提交到 SLURM 集群。
📌 官方训练文档:docs/TRAINING.md,示例 Notebook:examples/BuildingCustomRecipe_ExampleNotebook.ipynb
🧩 训练流程总览
整个 AudioSeal 水印模型训练分为 5 步:
| 步骤 | 内容 | 关键工具 |
|---|---|---|
| 1️⃣ | 安装 AudioCraft 与 ffmpeg | pip / apt / conda |
| 2️⃣ | 准备数据集与清单文件 | audiocraft.data.audio_dataset |
| 3️⃣ | 用 Dora 启动训练 | dora run |
| 4️⃣ | 评估训练出的检查点 | dora run(evaluate 模式) |
| 5️⃣ | 检查点转换为生成器 + 检测器 | src/scripts/checkpoints.py |
其中第 5 步最容易忽略:训练产出的检查点同时包含生成器和检测器,不能直接喂给 AudioSeal API,必须先用转换脚本拆分。
第一步:安装 AudioCraft 与 ffmpeg(环境准备)
训练要求AudioCraft ≥ 0.1.4(官方建议直接安装源码以便修改数据集配方),并在 PyTorch 2.1.0 / torchaudio 2.1.0 上验证过。
pip install -e .⚠️关键坑位:必须安装版本小于 5.0 的 ffmpeg,因为训练循环中的 AAC 压缩增强步骤依赖它,否则训练会直接失败。
sudo apt-get install ffmpeg # 或使用 Anaconda / Miniconda conda install "ffmpeg<5" -c conda-forge同时先克隆 AudioSeal 源码,安装成可编辑模式:
git clone https://gitcode.com/gh_mirrors/au/audioseal cd audioseal pip install -e .第二步:准备数据集与 AudioCraft 清单文件
训练数据需要按 AudioCraft 的数据格式组织,论文中使用的是 Voxpopuli(400k 子集),但你完全可以换成 Librispeech 等任意语音数据集。
1. 下载并切分音频,得到目录[ROOT]。
2. 用 AudioCraft 的数据工具生成清单文件:
python -m audiocraft.data.audio_dataset [ROOT] egs/my_dataset/data.jsonl.gz3. 在 AudioCraft 的configs/dset/audio/下新建数据源 YAML,指向刚生成的清单:
# @package __global__ datasource: max_sample_rate: 16000 max_channels: 1 train: egs/my_dataset valid: egs/my_dataset evaluate: egs/my_dataset generate: egs/my_dataset这样训练时就可以用dset=audio/my_dataset引用你的数据集。
第三步:用 Dora 启动 AudioSeal 水印训练任务
训练流水线使用 Dora 组织实验并支持网格搜索调参。建议先熟悉dora run、dora grid等概念。
先在本地小规模试跑,确认流水线通畅:
dora run solver=watermark/robustness dset=audio/example默认情况下,检查点和实验文件会存到/tmp/audiocraft_$USER/outputs。要自定义输出目录(或提交到 SLURM 集群),写一份my_config.yaml:
default: dora_dir: [你的DORA路径] partitions: global: your_slurm_partitions team: your_slurm_partitions reference_dir: /tmp然后正式开训(换成你的数据集):
AUDIOCRAFT_CONFIG=my_config.yaml dora run solver=watermark/robustness dset=audio/voxpopuli第四步:评估训练出的检查点
训练成功后,检查点会保存在 Dora 目录下的实验文件夹中,路径形如:
[DORA_PATH]/xps/[HASH-ID]/checkpoint_XXX.thHASH-ID会在dora run的运行日志里打印。你可以用不同的nbits设置评估多个检查点,挑选损失最低的那个:
AUDIOCRAFT_CONFIG=my_config.yaml dora run solver=watermark/robustness \ execute_only=evaluate dset=audio/voxpopuli \ continue_from=[检查点路径] +dummy_watermarker.nbits=16 \ seanet.detector.output_dim=32第五步:检查点转换——拆分成生成器与检测器 🛠️
这是使用自有模型前必不可少的一步。由于训练检查点是生成器 + 检测器联合训练的产物,不能直接用于 AudioSeal API。
运行 AudioSeal 自带的转换脚本src/scripts/checkpoints.py:
python [AudioSeal路径]/src/scripts/checkpoints.py \ --checkpoint=[检查点路径] --outdir=[输出目录] --suffix=[新模型名]脚本内部逻辑很直观(见 checkpoints.py):它会遍历检查点中的权重,把detector.前缀的层拆给检测器、其余层拆给生成器,最后导出两个文件:
generator_[suffix].pthdetector_[suffix].pth
转换完成后,就可以像加载官方模型一样加载你自己的音频水印模型:
model = AudioSeal.load_generator("[输出目录]/generator_[suffix].pth", nbits=16) detector = AudioSeal.load_detector("[输出目录]/detector_[suffix].pth", nbits=16)💡 提示:
AudioSeal.load_generator/AudioSeal.load_detector的加载逻辑定义在 loader.py,支持本地检查点路径和模型卡片名两种方式。官方模型卡片可参考src/audioseal/cards/目录下的 YAML 文件。
📦 想完整复现官方模型?
项目同时提供了训练 HuggingFace 版 AudioSeal 模型的完整超参数网格(即 ICML 论文结果的训练配方),定义在 AudioCraft 的 watermarking grid 中。只需一条命令即可拉起复现实验:
AUDIOCRAFT_CONFIG=my_config.yaml AUDIOCRAFT_DSET=audio/voxpopuli \ dora grid watermarking.1315_kbits_seeds🩹 常见问题排错
| 症状 | 原因与解决办法 |
|---|---|
Linux 上报Unsupported formats | ffmpeg 未正确安装或被其他后端覆盖。显式指定库路径,例如LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH后再运行 dora 命令 |
| AAC 增强步骤报错 | 检查 ffmpeg 版本是否 < 5.0 |
| 本地测试跑不通 | 先用dset=audio/example小规模验证流水线,再换大数据集 |
🏁 总结
用 AudioSeal 训练自己的音频水印模型,本质上就是一条五步流水线:装好 AudioCraft + 老版本 ffmpeg → 准备数据集与清单 → Dora 启动训练 → 评估检查点 → 用转换脚本拆分生成器与检测器。其中检查点转换是新手最容易踩的坑,务必使用src/scripts/checkpoints.py完成拆分,之后就能无缝接入 AudioSeal API 进行水印嵌入与检测了。
跟着 docs/TRAINING.md 和示例 Notebook examples/BuildingCustomRecipe_ExampleNotebook.ipynb 逐步操作,你很快就能拥有第一个训练好的专属音频水印模型!🎶
【免费下载链接】audiosealLocalized watermarking for AI-generated speech audios, with SOTA on robustness and very fast detector项目地址: https://gitcode.com/gh_mirrors/au/audioseal
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考