
Robustes Audio-Wasserzeichen-Framework, das binäre Nachrichten in Magnitudenspektrogramme einbettet, mit differenzierbarer Angriffssimulation, Q-Former-Pooling, PESQ-Maskierung und fehlerkorrigierenden Codes für Widerstandsfähigkeit gegen Codec- und Signalverarbeitungsangriffe.
Quellcode für CRAW, eine robuste Audio-Watermarking-Methode, die auf STFT-Magnituden-Domänen-Einbettung basiert. Ein Encoder bettet eine binäre Nachricht in das Magnitudenspektrogramm eines Audio-Clips ein (die Phase bleibt vom sauberen Signal erhalten); ein Decoder stellt die Nachricht unter einer Vielzahl von Signalverarbeitungs-, Neural-Codec-, Denoising- und Vocoder-Angriffen wieder her.
Dieses Repository ist ein Fork von TimbreWatermarking (NDSS 2024), erweitert um:
watermarking_model/ — der gesamte Watermarking-Modellcode:
Architektur (model/), Training (train.py), Angriffs-
simulation (distortions/, utils/distortions.py), Evaluierung
(eval/) sowie Export-/Exp-Skripte (scripts/).Erfordert Python 3.8.
Die unten aufgeführten, mitgelieferten Drittanbieter-Abhängigkeiten sind nicht in diesem Repo gebündelt. Sie werden nur für die FACodec-/Denoiser-/TiCodec-Angriffe benötigt — nicht für die grundlegende Einbettungs-/Decodierungs-Verifizierung (siehe Inferenz unten). Wenn Sie diese Angriffe ausführen möchten, klonen Sie die öffentlichen Repos selbst in die angegebenen Pfade:
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-Abhängigkeiten für die Haupt-Trainings-/Evaluierungspipeline sind in
watermarking_model/requirements.txt aufgelistet.
Für die Codec-Angriffsdarstellung (EnCodec, TiCodec) empfehlen wir eine separate
Conda-Umgebung pro Codec, da jeder seine eigenen — manchmal
widersprüchlichen — Abhängigkeiten hat; siehe die Einrichtungsanweisungen im
Docstring jedes Skripts (codecs/encode_*.py).
Training und Evaluierung verwenden LibriSpeech (Train- + Test-Splits) und, für die
Zero-Shot-Cross-Domain-Experimente, LJSpeech. Dataset-Pfade werden im
path.raw_path-Feld der Trainingskonfiguration jedes Experiments festgelegt
(watermarking_model/config/**/train_*.yaml) und über --audio_dir in den
Eval-/Export-Skripten — weisen Sie diese auf Ihre eigenen lokalen Kopien von
LibriSpeech und
LJSpeech hin.
cd watermarking_model
python3 train.py \
-p config/process.yaml \
-m config/craw/model.yaml \
-t config/craw/train.yaml
Dies trainiert das vollständige Modell (robuste Verzerrungsschicht + Q-Former + Wiederholungs-
ECC) — die Konfiguration, die für CRAWs Hauptergebnisse verwendet wird. Das Training protokolliert in
Weights & Biases unter dem craw-Projekt; setzen Sie
WANDB_ENTITY/loggen Sie sich zuerst über wandb login für Ihr eigenes Konto ein.
Das Training verwendet einen festen Zufalls-Seed (2022, in train.py gesetzt
für random/numpy/torch/torch.cuda) für Reproduzierbarkeit.
PESQ-Maskierung wird zur Export-/Inferenzzeit angewendet, nicht während des
Trainings — siehe scripts/export_watermarked_dynamic.py --grad_mode spect_ft.
Ein vortrainierter CRAW-Checkpoint (Epoche 20, passend zu den Hauptergebnissen des Papers) ist
direkt in dieser Einreichung gebündelt — kein Download erforderlich — unter
watermarking_model/results/craw/ckpt/pth/ (config/craw/model.yaml's
test.model_path zeigt hierhin).
Um eine Nachricht in eine WAV-Datei einzubetten und sie sofort wieder zu decodieren (kein Angriff angewendet) als schnellen Sanity-Check:
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
Dies gibt die eingebettete/decodierte Nachricht und die Bit-Genauigkeit aus. Für die vollständige
Angriffs-Suite-Evaluierung, die im Paper verwendet wird, siehe eval/common_test.py unten.
eval/common_test.py führt die vollständige Angriffs-Suite (klassische Signal-
verarbeitung, Neural-Codecs, Denoiser, Vocoder) gegen einen trainierten
Checkpoint aus und berichtet die Decodier-Genauigkeit und Wiedergabetreue pro Angriff (SI-SNR,
PESQ, STOI).
eval/tpr_eval.py kalibriert eine modellspezifische Detektionsschwelle aus
False-Positive-Raten von sauberem Audio und berichtet TPR bei einem gemeinsamen FPR;
eval/compare_tpr.py aggregiert Ergebnisse über Experimente hinweg in die
Vergleichstabellen des Papers mit gepaartem Bootstrap-Signifikanztest.
scripts/plot_ablation_sweep.py, scripts/plot_fidelity_sweep.py,
scripts/visualize_mask.py und scripts/visualize_mask_zoom.py erzeugen
die Abbildungen des Papers.
Basiert auf TimbreWatermarking (NDSS 2024). Verwendet NaturalSpeech3 FACodec, ClearerVoice-Studio, TiCodec und EnCodec für Codec-/Denoiser- Angriffe.