
Código de pesquisa e conjunto de dados (WSD) para avaliar o impacto da marca d'água de áudio na anti-spoofing, usando wav2vec2 XLS-R e aprendizado de preservação de conhecimento.
Este repositório fornece a implementação oficial do nosso artigo: THE IMPACT OF AUDIO WATERMARKING ON AUDIO ANTI-SPOOFING COUNTERMEASURES . Explore a demonstração interativa e visualizações aqui.
Derivamos o WSD de corpora públicos e o comparamos com os conjuntos de dados originais:
ASVspoof 2019 (LA) — divisão de treino usada para treino do modelo. Transferir: https://datashare.is.ed.ac.uk/handle/10283/3336
ASVspoof 2021 (LA & DF) — usado para avaliação.
-LA: https://zenodo.org/record/4837263 -DF: https://zenodo.org/record/4835108
In-the-Wild — usado para avaliação. Transferir: https://deepfake-total.com/in_the_wild
Configuração típica: treinar em ASVspoof 2019 LA (treino); avaliar em ASVspoof 2021 LA/DF (eval) e In-the-Wild.
Os utilitários de geração de dados estão em data_generation/. Siga o README dessa pasta para reproduzir o WSD e suas variantes (divisões de marca d'água vistas/não vistas).
# 1) Clone
git clone https://github.com/Alphawarheads/Watermark_Spoofing.git
cd Watermark_Spoofing
# 2) (Opcional) Use o snapshot do Fairseq incluído
unzip fairseq-a54021305d6b3c4c5959ac9395135f63202db8f1.zip
# 3) Ambiente Conda
conda create -n kpwl python=3.7 -y
conda activate kpwl
# 4) PyTorch (ajuste os wheels CUDA/ROCm conforme necessário)
pip install torch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1
# 5) Fairseq (editável)
cd fairseq-a54021305d6b3c4c5959ac9395135f63202db8f1
pip install --editable ./
cd ..
# 6) Requisitos do projeto
pip install -r requirements.txt
Notas: as nossas experiências principais foram treinadas em 4 GPUs/DCUs.
Transfira os pesos do XLS-R de: https://github.com/pytorch/fairseq/tree/main/examples/wav2vec/xlsr
Os comandos abaixo produzem três ficheiros score.txt (um por conjunto de avaliação). Essas pontuações são posteriormente usadas para calcular o EER (%).
Dica: Use sempre as flags completas
--eval_tracke--eval_output(não abrevie para--eval).
Original (sem marca d'água):
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"
Marca d'Água e Falsificação (Vista):
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
Marca d'Água e Falsificação (Não Vista):
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
Veja
eval.shpara o conjunto completo de scripts de avaliação.
Teste com os nossos modelos pré-treinados:
_wm_ num nome de ficheiro = pontuações produzidas em áudio com marca d'água._ori_ num nome de ficheiro = pontuações produzidas em áudio original (sem marca d'água).# Se auto_merge_scores não estiver no mesmo ficheiro, importe-o:
# from your_module import auto_merge_scores
TRACK = "ITW" # um de {"LA21", "DF21", "ITW"}
comment = "ori" # rótulo usado nos nomes dos ficheiros de pontuação
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("Resultados de saída:")
for p in outs:
print(" -", p)
Veja o README em generate_data/ para detalhes sobre como os protocolos são construídos.
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
Agradecimentos e Código de Terceiros
Este repositório baseia-se e incorpora componentes modificados dos seguintes projetos de código aberto:
SLSforASVspoof-2021-DF — https://github.com/QiShanZhang/SLSforASVspoof-2021-DF.git
The-A-Files — https://github.com/pawel-kaczmarek/The-A-Files.git
Partes do código são adaptadas destes repositórios. Todo o código de terceiros permanece sob as suas licenças originais; consulte os ficheiros LICENSE a montante e mantenha todos os avisos de direitos de autor aplicáveis. Se algum detalhe de atribuição ou licenciamento estiver incompleto, informe-nos e corrigiremos prontamente.
Contacto / Citação Se utilizar este repositório ou WSD/KPWL na sua investigação, por favor cite o artigo e coloque uma hiperligação para este repositório.