本仓库提供了我们论文的官方实现:音频水印对音频反欺骗对策的影响。 在此处探索交互式演示和可视化内容:https://alphawarheads.github.io/Watermark_spoofing_demo/。
我们从公共语料库中衍生出 WSD,并对照原始数据集对其进行基准测试:
ASVspoof 2019(LA) — 用于模型训练的划分。下载地址:https://datashare.is.ed.ac.uk/handle/10283/3336
ASVspoof 2021(LA 和 DF) — 用于评估。
-LA: https://zenodo.org/record/4837263 -DF: https://zenodo.org/record/4835108
In-the-Wild — 用于评估。下载地址:https://deepfake-total.com/in_the_wild
典型设置: 在 ASVspoof 2019 LA(训练集) 上训练;在 ASVspoof 2021 LA/DF(评估集) 和 In-the-Wild 上评估。
数据生成工具位于 data_generation/ 目录。请按照该文件夹中的 README 来复现 WSD 及其变体(已见/未见水印划分)。
# 1) 克隆
git clone https://github.com/Alphawarheads/Watermark_Spoofing.git
cd Watermark_Spoofing
# 2) (可选)使用附带的 Fairseq 快照
unzip fairseq-a54021305d6b3c4c5959ac9395135f63202db8f1.zip
# 3) Conda 环境
conda create -n kpwl python=3.7 -y
conda activate kpwl
# 4) PyTorch(根据需要调整 CUDA/ROCm wheel)
pip install torch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1
# 5) Fairseq(可编辑模式)
cd fairseq-a54021305d6b3c4c5959ac9395135f63202db8f1
pip install --editable ./
cd ..
# 6) 项目依赖
pip install -r requirements.txt
注意:我们的主要实验是在 4 块 GPU/DCU 上训练的。
从以下地址下载 XLS-R 权重:https://github.com/pytorch/fairseq/tree/main/examples/wav2vec/xlsr
下面的命令会生成三个 score.txt 文件(每个评估集一个)。这些分数随后用于计算 EER(%)。
提示: 请始终使用完整参数
--eval_track和--eval_output(不要缩写为--eval)。
原始(无水印):
TRACK=LA
PROTOCOLS=/public/home/qinxy/.../ASVspoof2021.LA.cm.eval.trl.txt
DATABASE_PATH=/public/home/qinxy/AudioData/Antispoofing/ASVspoof2021/ASVspoof2021_LA_eval/flac/
EVAL_OUTPUT=/public/home/qinxy/.../test2/${COMMENT}_eval_ori_LA21.txt
CUDA_VISIBLE_DEVICES=0,1,2,3 \
torchrun --standalone --nproc_per_node=4 \
main_multinodes.py --track="$TRACK" --is_eval --eval \
--model_path models/model_4dcu_kpwl.pth \
--protocols_path="$PROTOCOLS" \
--database_path="$DATABASE_PATH" \
--eval_output="$EVAL_OUTPUT"
水印欺骗(已见):
TRACK=LA
PROTOCOLS=/public/home/qinxy/zhangzs/watermarking/The-A-Files-master/protocols/tagged/LA21/protocol_wm_75_only.txt
DATABASE_PATH=/public/home/qinxy/AudioData/Antispoofing/LA21_phase1/
EVAL_OUTPUT=/public/home/qinxy/.../test2/${COMMENT}_eval_wm_seen_LA21.txt
水印欺骗(未见):
TRACK=LA
PROTOCOLS=/public/home/qinxy/zhangzs/watermarking/The-A-Files-master/protocols/tagged_phase2/LA21/split/protocol_wm_75_only.txt
DATABASE_PATH=/public/home/qinxy/AudioData/Antispoofing/LA21_phase2/
EVAL_OUTPUT=/public/home/qinxy/.../test2/${COMMENT}_eval_wm_unseen_LA21.txt
完整的评估脚本集请参见
eval.sh。
使用我们的预训练模型进行测试:
_wm_ = 在带水印音频上产生的分数。_ori_ = 在原始(无水印)音频上产生的分数。# 如果 auto_merge_scores 不在同一文件中,请导入它:
# from your_module import auto_merge_scores
TRACK = "ITW" # 从 {"LA21", "DF21", "ITW"} 中选择一个
comment = "ori" # 你的分数文件名中使用的标签
outs = auto_merge_scores(
track=TRACK,
score_wm_path=f"/public/.../test2/{comment}_train_eval_wm_SLS_{TRACK}.txt",
score_ori_path=f"/public/.../test2/{comment}_train_eval_ori_SLS_{TRACK}.txt",
)
print("输出结果:")
for p in outs:
print(" -", p)
有关协议如何构建的详细信息,请参阅 generate_data/ 中的 README。
CUDA_VISIBLE_DEVICES=0,1,2,3 \
torchrun --standalone --nproc_per_node=4 \
main_multinodes.py \
--track=DF --lr=0.000001 --batch_size=5 --loss=WCE \
--num_epochs=50 --comment 4dcu_baseline
CUDA_VISIBLE_DEVICES=0,1,2,3 \
torchrun --standalone --nproc_per_node=4 \
main_kpwl.py \
--eval_track=DF --lr=5e-7 --batch_size=5 --num_epochs=2 \
--model_path best_model.pth \
--comment model_4dcu_kpwl
致谢与第三方代码
本仓库基于以下开源项目构建,并整合了它们的修改后组件:
SLSforASVspoof-2021-DF — https://github.com/QiShanZhang/SLSforASVspoof-2021-DF.git
The-A-Files — https://github.com/pawel-kaczmarek/The-A-Files.git
部分代码改编自这些仓库。所有第三方代码仍归其原始许可证管辖;请参阅上游 LICENSE 文件并保留所有适用的版权声明。如果任何署名或许可信息不完整,请告知我们,我们将及时更正。
联系 / 引用 如果您在研究中使用本仓库或 WSD/KPWL,请引用该论文并链接回本仓库。