
강력한 오디오 워터마킹 프레임워크로, 이진 메시지를 크기 스펙트로그램에 임베딩하며, 미분 가능한 공격 시뮬레이션, Q-Former 풀링, PESQ 마스킹, 그리고 코덱 및 신호 처리 공격에 대한 복원력을 위한 오류 정정 코드를 갖추고 있습니다.
CRAW의 소스 코드로, STFT 크기 영역 임베딩을 기반으로 구축된 견고한 오디오 워터마킹 기법입니다. 인코더는 오디오 클립의 크기 스펙트로그램에 이진 메시지를 임베딩하며(위상은 깨끗한 신호로부터 보존됨), 디코더는 다양한 신호 처리, 신경 코덱, 잡음 제거, 보코더 공격 하에서 메시지를 복원합니다.
이 저장소는 TimbreWatermarking(NDSS 2024)의 포크로, 다음 기능이 추가로 확장되었습니다:
watermarking_model/ — 모든 워터마킹 모델 코드: 아키텍처(model/), 학습(train.py), 공격 시뮬레이션(distortions/, utils/distortions.py), 평가(eval/), 내보내기/실험 스크립트(scripts/).Python 3.8이 필요합니다.
아래에 포함된 서드파티 의존성은 이 저장소에 번들로 제공되지 않습니다. 이들은 FACodec/디노이저/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의 주요 결과에 사용된 구성입니다. 학습 로그는 craw 프로젝트 아래 Weights & Biases에 기록됩니다. 먼저 자신의 계정으로 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가 이곳을 가리킴).
하나의 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는
논문의 그림을 생성합니다.
이 코드를 사용하는 경우 다음을 인용해 주세요:
@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}
}
TimbreWatermarking (NDSS 2024)을 기반으로 구축되었습니다. 코덱/디노이저 공격에는 NaturalSpeech3 FACodec, ClearerVoice-Studio, TiCodec, 그리고 EnCodec을 사용합니다.