CRAWのソースコードです。STFTマグニチュード領域への埋め込みに基づく堅牢な音声透かし手法です。エンコーダはバイナリメッセージを音声クリップのマグニチュードスペクトログラムに埋め込み(位相はクリーン信号から保持)、デコーダは幅広い信号処理、ニューラルコーデック、ノイズ除去、ボコーダ攻撃下でメッセージを復元します。
このリポジトリは TimbreWatermarking (NDSS 2024) のフォークであり、以下の機能が拡張されています:
watermarking_model/ — すべての透かしモデルコード:
アーキテクチャ (model/)、トレーニング (train.py)、攻撃
シミュレーション (distortions/, utils/distortions.py)、評価
(eval/)、およびエクスポート/実験スクリプト (scripts/)。Python 3.8が必要です。
以下の同梱されていないサードパーティ依存関係はこのリポジトリには含まれていません。 これらは特にFACodec/denoiser/TiCodec攻撃にのみ必要です — 基本的な埋め込み/デコード検証には不要です(下記の推論を参照)。それらの攻撃を実行したい場合は、公開リポジトリを自分で以下のパスにクローンしてください:
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依存関係は
watermarking_model/requirements.txt に記載されています。
コーデック攻撃レンダリング (EnCodec、TiCodec) には、各コーデックに個別の
conda環境を推奨します。各コーデックには独自の(場合によっては競合する)
依存関係があるためです。各スクリプトのdocstring (codecs/encode_*.py) のセットアップ手順を参照してください。
トレーニングと評価にはLibriSpeech (train + test分割) と、ゼロショット
クロスドメイン実験にはLJSpeechを使用します。データセットパスは各実験の
トレーニング設定 (watermarking_model/config/**/train_*.yaml) の
path.raw_path フィールドと、eval/exportスクリプトの --audio_dir で設定されます —
これらを自分のローカルコピーの
LibriSpeech と
LJSpeech に指定してください。
cd watermarking_model
python3 train.py \
-p config/process.yaml \
-m config/craw/model.yaml \
-t config/craw/train.yaml
これにより完全なモデル(堅牢な歪み層 + Q-Former + 繰り返し
ECC)がトレーニングされます — CRAWの主要な結果に使用される設定です。トレーニングは
Weights & Biasesの craw プロジェクトにログが記録されます。事前に
WANDB_ENTITY を設定するか、wandb login で自分のアカウントにログインしてください。
トレーニングは再現性のために固定のランダムシード (2022、train.py で
random/numpy/torch/torch.cuda に設定) を使用します。
PESQマスキングはトレーニング中ではなくエクスポート/推論時に適用されます —
scripts/export_watermarked_dynamic.py --grad_mode spect_ft を参照してください。
事前トレーニング済みのCRAWチェックポイント(エポック20、論文の主要結果に一致)は
この提出物に直接バンドルされており、ダウンロードは不要です —
watermarking_model/results/craw/ckpt/pth/ にあります (config/craw/model.yaml の
test.model_path がここを指しています)。
1つのWAVファイルにメッセージを埋め込み、すぐにデコードして戻す(攻撃なし) 簡単な動作確認は以下の通りです:
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
これにより埋め込まれた/デコードされたメッセージとビット精度が出力されます。論文で使用された完全な攻撃スイート評価については、下記の eval/common_test.py を参照してください。
eval/common_test.py はトレーニング済みチェックポイントに対して完全な攻撃スイート(古典的な信号処理、ニューラルコーデック、ノイズ除去器、ボコーダ)を実行し、攻撃ごとのデコード精度と忠実度 (SI-SNR、PESQ、STOI) を報告します。
eval/tpr_eval.py はクリーン音声の偽陽性率からモデルごとの検出しきい値を較正し、共通のFPRでのTPRを報告します。eval/compare_tpr.py はペアブートストラップ有意性検定を用いて、実験間の結果を論文の比較表に集約します。
scripts/plot_ablation_sweep.py、scripts/plot_fidelity_sweep.py、
scripts/visualize_mask.py、および scripts/visualize_mask_zoom.py は
論文の図を生成します。
TimbreWatermarking (NDSS 2024) に基づいています。コーデック/ノイズ除去攻撃には NaturalSpeech3 FACodec、 ClearerVoice-Studio、 TiCodec、および EnCodec を使用しています。