
Framework robusto di watermarking audio che incorpora messaggi binari negli spettrogrammi di magnitudine, con simulazione differenziabile degli attacchi, pooling Q-Former, mascheramento PESQ e codici di correzione degli errori per la resilienza contro attacchi codec e di elaborazione del segnale.
Codice sorgente per CRAW, un metodo robusto di watermarking audio basato sull'embedding nel dominio della magnitudine STFT. Un encoder incorpora un messaggio binario nello spettrogramma di magnitudine di una clip audio (la fase viene preservata dal segnale pulito); un decoder recupera il messaggio sotto un'ampia gamma di attacchi di elaborazione del segnale, codec neurali, denoising e vocoder.
Questo repository è un fork di TimbreWatermarking (NDSS 2024), esteso con:
watermarking_model/ — tutto il codice del modello di watermarking:
architettura (model/), addestramento (train.py), simulazione di
attacco (distortions/, utils/distortions.py), valutazione
(eval/) e script di export/esperimenti (scripts/).Richiede Python 3.8.
Le dipendenze di terze parti incluse di seguito non sono incluse in questo repository. Servono solo per gli attacchi FACodec/denoiser/TiCodec specifici — non per la verifica di base embed/decode (vedi Inferenza sotto). Se vuoi eseguire questi attacchi, clona tu stesso i repository pubblici nei percorsi indicati:
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
Le dipendenze Python per la pipeline principale di addestramento/valutazione sono elencate in
watermarking_model/requirements.txt.
Per il rendering degli attacchi codec (EnCodec, TiCodec), consigliamo un ambiente
conda separato per ogni codec, poiché ciascuno ha le proprie — a volte
conflittuali — dipendenze; vedi le istruzioni di configurazione nella docstring di ogni
script (codecs/encode_*.py).
L'addestramento e la valutazione utilizzano LibriSpeech (split train + test) e, per gli
esperimenti cross-domain zero-shot, LJSpeech. I percorsi dei dataset sono impostati nel
campo path.raw_path della config di addestramento di ogni esperimento
(watermarking_model/config/**/train_*.yaml) e tramite --audio_dir negli
script di eval/export — punta questi ai tuoi copie locali di
LibriSpeech e
LJSpeech.
cd watermarking_model
python3 train.py \
-p config/process.yaml \
-m config/craw/model.yaml \
-t config/craw/train.yaml
Questo addestra il modello completo (livello di distorsione robusto + Q-Former + ECC
a ripetizione) — la configurazione utilizzata per i risultati principali di CRAW. L'addestramento
registra i log su Weights & Biases sotto il progetto craw; imposta
WANDB_ENTITY/accedi tramite wandb login per il tuo account prima.
L'addestramento utilizza un seed casuale fisso (2022, impostato in train.py
per random/numpy/torch/torch.cuda) per la riproducibilità.
Il mascheramento PESQ viene applicato al momento dell'export/inferenza, non durante
l'addestramento — vedi scripts/export_watermarked_dynamic.py --grad_mode spect_ft.
Un checkpoint CRAW pre-addestrato (epoca 20, corrispondente ai risultati principali del
paper) è incluso direttamente in questa submission — nessun download necessario — in
watermarking_model/results/craw/ckpt/pth/ (config/craw/model.yaml's
test.model_path punta qui).
Per incorporare un messaggio in un file WAV e decodificarlo immediatamente (senza attacco applicato) come rapido controllo di sanità:
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
Questo stampa il messaggio incorporato/decodificato e l'accuratezza dei bit. Per la
valutazione completa della suite di attacchi utilizzata nel paper, vedi eval/common_test.py sotto.
eval/common_test.py esegue la suite completa di attacchi (elaborazione classica del
segnale, codec neurali, denoiser, vocoder) contro un checkpoint
addestrato e riporta l'accuratezza di decodifica per attacco e la fedeltà (SI-SNR,
PESQ, STOI).
eval/tpr_eval.py calibra una soglia di rilevamento per modello dai
tassi di falsi positivi su audio pulito e riporta il TPR a un FPR condiviso;
eval/compare_tpr.py aggrega i risultati tra gli esperimenti nelle
tabelle di confronto del paper con test di significatività bootstrap accoppiato.
scripts/plot_ablation_sweep.py, scripts/plot_fidelity_sweep.py,
scripts/visualize_mask.py e scripts/visualize_mask_zoom.py generano
le figure del paper.
Costruito su TimbreWatermarking (NDSS 2024). Utilizza NaturalSpeech3 FACodec, ClearerVoice-Studio, TiCodec e EnCodec per gli attacchi codec/denoiser.