CRAW 的源代码,一种基于 STFT 幅度域嵌入的鲁棒音频水印方法。编码器将二进制消息嵌入音频片段的幅度频谱图(相位从干净信号中保留);解码器在广泛的信号处理、神经编解码器、去噪和声码器攻击下恢复消息。
本仓库是 TimbreWatermarking(NDSS 2024)的一个分支,扩展了以下功能:
watermarking_model/ — 所有水印模型代码:架构(model/)、训练(train.py)、攻击模拟(distortions/、utils/distortions.py)、评估(eval/)以及导出/实验脚本(scripts/)。需要 Python 3.8。
以下第三方依赖未捆绑在本仓库中。它们仅用于 FACodec/去噪器/TiCodec 攻击——不用于基本的嵌入/解码验证(见下方推理部分)。如果你想运行这些攻击,请自行将公共仓库克隆到所示路径:
git clone https://github.com/lifeiteng/naturalspeech3_facodec.git watermarking_model/naturalspeech3_facodec
git clone https://github.com/modelscope/ClearerVoice-Studio.git watermarking_model/ClearerVoice-Studio
git clone https://github.com/y-ren16/TiCodec.git watermarking_model/codecs/ticodec_repo
主训练/评估流程的 Python 依赖列于 watermarking_model/requirements.txt。对于编解码器攻击渲染(EnCodec、TiCodec),我们建议为每个编解码器使用单独的 conda 环境,因为每个编解码器都有自己——有时相互冲突——的依赖;请参阅每个脚本的 docstring(codecs/encode_*.py)中的设置说明。
训练和评估使用 LibriSpeech(训练 + 测试划分),以及用于零样本跨域实验的 LJSpeech。数据集路径在每个实验的训练配置(watermarking_model/config/**/train_*.yaml)的 path.raw_path 字段中设置,并通过评估/导出脚本上的 --audio_dir 设置——请将这些指向你自己的 LibriSpeech 和 LJSpeech 本地副本。
cd watermarking_model
python3 train.py \
-p config/process.yaml \
-m config/craw/model.yaml \
-t config/craw/train.yaml
这将训练完整模型(鲁棒失真层 + Q-Former + 重复 ECC)——用于 CRAW 主要结果的配置。训练日志记录到 Weights & Biases 的 craw 项目下;请先通过 wandb login 为你的账户设置 WANDB_ENTITY/登录。
训练使用固定的随机种子(2022,在 train.py 中为 random/numpy/torch/torch.cuda 设置)以保证可复现性。
PESQ 掩码在导出/推理时应用,而非训练期间——请参阅 scripts/export_watermarked_dynamic.py --grad_mode spect_ft。
预训练的 CRAW 检查点(第 20 轮,与论文主要结果一致)直接捆绑在本提交中——无需下载——位于 watermarking_model/results/craw/ckpt/pth/(config/craw/model.yaml 的 test.model_path 指向此处)。
要将消息嵌入一个 WAV 文件并立即解码回来(不应用攻击)作为快速健全性检查:
cd watermarking_model
python3 -m scripts.infer \
-p config/process.yaml \
-m config/craw/model.yaml \
-t config/craw/train.yaml \
--input /path/to/clean.wav \
--output /path/to/watermarked.wav \
--ckpt 20
这将打印嵌入/解码的消息和比特准确率。论文中使用的完整攻击套件评估,请参阅下面的 eval/common_test.py。
eval/common_test.py 针对训练好的检查点运行完整攻击套件(经典信号处理、神经编解码器、去噪器、声码器),并报告每种攻击的解码准确率和保真度(SI-SNR、PESQ、STOI)。
eval/tpr_eval.py 根据干净音频的假阳性率校准每个模型的检测阈值,并在共享 FPR 下报告 TPR;eval/compare_tpr.py 将跨实验的结果聚合到论文的比较表中,并进行配对自助显著性检验。scripts/plot_ablation_sweep.py、scripts/plot_fidelity_sweep.py、scripts/visualize_mask.py 和 scripts/visualize_mask_zoom.py 生成论文中的图表。
基于 TimbreWatermarking(NDSS 2024)。使用 NaturalSpeech3 FACodec、ClearerVoice-Studio、TiCodec 和 EnCodec 进行编解码器/去噪器攻击。