
강력한 오디오 워터마킹 프레임워크로, 이진 메시지를 크기 스펙트로그램에 임베딩하며, 미분 가능한 공격 시뮬레이션, Q-Former 풀링, PESQ 마스킹, 그리고 코덱 및 신호 처리 공격에 대한 복원력을 위한 오류 정정 코드를 갖추고 있습니다.
CRAW의 소스 코드로, STFT-크기-영역 임베딩을 기반으로 한 강건한 오디오 워터마킹 방법입니다. 인코더는 이진 메시지를 오디오 클립의 크기 스펙트로그램에 임베딩하며(위상은 클린 신호에서 보존됨), 디코더는 다양한 신호 처리, 신경 코덱, 노이즈 제거 및 보코더 공격 하에서 메시지를 복구합니다.
이 저장소는 TimbreWatermarking (NDSS 2024)의 포크로, 다음과 같은 기능이 확장되었습니다:
watermarking_model/ — 모든 워터마킹 모델 코드:
아키텍처(model/), 학습(train.py), 공격
시뮬레이션(distortions/, utils/distortions.py), 평가
(eval/), 및 내보내기/실험 스크립트(scripts/).Python 3.8이 필요합니다.
아래의 번들된 타사 종속성은 이 저장소에 포함되어 있지 않습니다. 이는 특히 FACodec/denoiser/TiCodec 공격에만 필요하며 — 기본 임베드/디코드 검증에는 필요하지 않습니다(아래 Inference 참조). 해당 공격을 실행하려면 공개 저장소를 직접 아래 경로에 클론하세요:
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 체크포인트(epoch 20, 논문의 주요 결과와 일치)는 이 제출물에 직접 번들되어 있어 다운로드가 필요 없으며, watermarking_model/results/craw/ckpt/pth/에 있습니다(config/craw/model.yaml의 test.model_path가 이 경로를 가리킵니다).
하나의 WAV 파일에 메시지를 임베드하고 즉시 디코드하여(공격 없이) 빠른 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
이 명령은 임베드/디코드된 메시지와 비트 정확도를 출력합니다. 논문에 사용된 전체 공격 스위트 평가는 아래 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을 사용합니다.