
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 Einbettung im STFT-Magnitudenbereich basiert. Ein Encoder bettet eine binäre Nachricht in das Magnitudenspektrogramm eines Audioclips ein (die Phase wird aus dem sauberen Signal übernommen); ein Decoder rekonstruiert die Nachricht unter einer Vielzahl von Angriffen aus den Bereichen Signalverarbeitung, neuronale Codecs, Denoising und Vocoder.
Dieses Repository ist ein Fork von TimbreWatermarking (NDSS 2024), erweitert um:
watermarking_model/ — der gesamte Code des Watermarking-Modells:
Architektur (model/), Training (train.py), Angriffssimulation
(distortions/, utils/distortions.py), Evaluierung
(eval/) und Export-/Experiment-Skripte (scripts/).Erfordert Python 3.8.
Die unten mitgelieferten Drittanbieter-Abhängigkeiten sind in diesem Repository nicht enthalten. Sie werden nur für die FACodec-/Denoiser-/TiCodec-Angriffe speziell benötigt — nicht für die grundlegende Überprüfung von Einbetten/Dekodieren (siehe Inferenz unten). Wenn Sie diese Angriffe ausführen möchten, klonen Sie die öffentlichen Repositories 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
Die Python-Abhängigkeiten für die Haupt-Trainings-/Evaluierungspipeline sind in
watermarking_model/requirements.txt aufgeführt.
Für das Rendering von Codec-Angriffen (EnCodec, TiCodec) empfehlen wir eine separate
conda-Umgebung pro Codec, da jeder seine eigenen – manchmal
konfliktären – Abhängigkeiten hat; siehe die Einrichtungsanweisungen im
Docstring jedes Skripts (codecs/encode_*.py).
Für Training und Evaluierung werden LibriSpeech (Train- + Test-Splits) und, für die
Zero-Shot-Cross-Domain-Experimente, LJSpeech verwendet. Die Datensatzpfade werden im
Feld path.raw_path der Trainingskonfiguration jedes Experiments
(watermarking_model/config/**/train_*.yaml) und über --audio_dir in den
Eval-/Export-Skripten festgelegt – richten Sie diese auf Ihre eigenen lokalen Kopien von
LibriSpeech und
LJSpeech aus.
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 die Hauptergebnisse von CRAW verwendet wurde. Das Training wird in Weights & Biases unter dem Projekt craw protokolliert; setze WANDB_ENTITY/melde dich zuerst über wandb login für dein eigenes Konto an.
Das Training verwendet einen festen Zufallsseed (2022, gesetzt in train.py für random/numpy/torch/torch.cuda) für die Reproduzierbarkeit.
PESQ-Masking 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 enthalten — kein Download erforderlich — unter watermarking_model/results/craw/ckpt/pth/ (config/craw/model.yamls test.model_path verweist hierauf).
Um eine Nachricht in eine WAV-Datei einzubetten und sie sofort wieder zu dekodieren (ohne angewendeten Angriff) als schnelle Plausibilitätsprüfung:
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/dekodierte Nachricht und die Bitgenauigkeit aus. Für die vollständige
Auswertung der Angriffssuite, die im Paper verwendet wird, siehe eval/common_test.py unten.
eval/common_test.py führt die vollständige Angriffssuite (klassische Signalverarbeitung, neuronale Codecs, Denoiser, Vocoder) gegen einen trainierten
Checkpoint aus und meldet die Dekodierungsgenauigkeit und -treue pro Angriff (SI-SNR,
PESQ, STOI).
eval/tpr_eval.py kalibriert einen modellspezifischen Erkennungsschwellenwert anhand
der Falsch-Positiv-Raten bei sauberem Audio und meldet die TPR bei einer gemeinsamen FPR;
eval/compare_tpr.py aggregiert die Ergebnisse über Experimente hinweg in die
Vergleichstabellen des Papers mit paarweiser Bootstrap-Signifikanztestung.
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.
Wenn Sie diesen Code verwenden, zitieren Sie bitte:
@article{chernin2026craw,
title={CRAW: Codec Robust Audio Watermarking},
author={Chernin, David and Fetaya, Ethan},
journal={arXiv preprint arXiv:2609.03107},
year={2026},
url={https://arxiv.org/abs/2609.03107}
}
Basiert auf TimbreWatermarking (NDSS 2024). Verwendet NaturalSpeech3 FACodec, ClearerVoice-Studio, TiCodec und EnCodec für Codec-/Denoiser- Angriffe.