
Marco robusto de marcas de agua de audio que incrusta mensajes binarios en espectrogramas de magnitud, con simulación diferenciable de ataques, agrupación Q-Former, enmascaramiento PESQ y códigos de corrección de errores para resistir ataques de códec y procesamiento de señales.
Código fuente de CRAW, un método robusto de marcado de agua de audio basado en incrustación en el dominio de magnitud STFT. Un codificador incrusta un mensaje binario en el espectrograma de magnitud de un clip de audio (la fase se preserva de la señal limpia); un decodificador recupera el mensaje bajo una amplia gama de ataques de procesamiento de señal, códec neuronal, eliminación de ruido y vocoder.
Este repositorio es una bifurcación de TimbreWatermarking (NDSS 2024), ampliado con:
watermarking_model/ — todo el código del modelo de marcado de agua:
arquitectura (model/), entrenamiento (train.py), simulación de
ataques (distortions/, utils/distortions.py), evaluación
(eval/) y scripts de exportación/experimentos (scripts/).Requiere Python 3.8.
Las dependencias de terceros incluidas a continuación no están empaquetadas en este repositorio. Solo se necesitan para los ataques específicos de FACodec/denoiser/TiCodec — no para la verificación básica de incrustación/decodificación (ver Inferencia más abajo). Si deseas ejecutar esos ataques, clona los repositorios públicos tú mismo en las rutas indicadas:
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
Las dependencias de Python para el pipeline principal de entrenamiento/evaluación se enumeran en
watermarking_model/requirements.txt.
Para la representación de ataques de códec (EnCodec, TiCodec), recomendamos un entorno
conda separado por códec, ya que cada uno tiene sus propias — a veces
conflictivas — dependencias; consulta las instrucciones de configuración en el
docstring de cada script (codecs/encode_*.py).
El entrenamiento y la evaluación utilizan LibriSpeech (divisiones de entrenamiento + prueba) y, para los
experimentos de dominio cruzado de cero disparos, LJSpeech. Las rutas de los conjuntos de datos se establecen en el
campo path.raw_path de la configuración de entrenamiento de cada experimento
(watermarking_model/config/**/train_*.yaml) y mediante --audio_dir en los
scripts de evaluación/exportación — apunta estos a tus propias copias locales de
LibriSpeech y
LJSpeech.
cd watermarking_model
python3 train.py \
-p config/process.yaml \
-m config/craw/model.yaml \
-t config/craw/train.yaml
Esto entrena el modelo completo (capa de distorsión robusta + Q-Former + ECC de repetición) —
la configuración utilizada para los resultados principales de CRAW. El entrenamiento registra en
Weights & Biases bajo el proyecto craw; establece
WANDB_ENTITY/inicia sesión mediante wandb login con tu propia cuenta primero.
El entrenamiento utiliza una semilla aleatoria fija (2022, establecida en train.py
para random/numpy/torch/torch.cuda) para la reproducibilidad.
El enmascaramiento PESQ se aplica en tiempo de exportación/inferencia, no durante el
entrenamiento — consulta scripts/export_watermarked_dynamic.py --grad_mode spect_ft.
Un punto de control CRAW preentrenado (época 20, que coincide con los resultados principales del artículo) está
incluido directamente en esta entrega — no se necesita descarga — en
watermarking_model/results/craw/ckpt/pth/ (el test.model_path de config/craw/model.yaml
apunta aquí).
Para incrustar un mensaje en un archivo WAV y decodificarlo inmediatamente (sin ataque aplicado) como una verificación rápida de cordura:
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
Esto imprime el mensaje incrustado/decodificado y la precisión de bits. Para la evaluación
completa del conjunto de ataques utilizada en el artículo, consulta eval/common_test.py a continuación.
eval/common_test.py ejecuta el conjunto completo de ataques (procesamiento clásico de
señal, códecs neuronales, eliminadores de ruido, vocoders) contra un punto de control
entrenado e informa la precisión de decodificación por ataque y la fidelidad (SI-SNR,
PESQ, STOI).
eval/tpr_eval.py calibra un umbral de detección por modelo a partir de
tasas de falsos positivos de audio limpio e informa TPR en un FPR compartido;
eval/compare_tpr.py agrega resultados entre experimentos en las
tablas de comparación del artículo con pruebas de significancia de arranque pareado.
scripts/plot_ablation_sweep.py, scripts/plot_fidelity_sweep.py,
scripts/visualize_mask.py y scripts/visualize_mask_zoom.py generan
las figuras del artículo.
Construido sobre TimbreWatermarking (NDSS 2024). Utiliza NaturalSpeech3 FACodec, ClearerVoice-Studio, TiCodec y EnCodec para ataques de códec/eliminador de ruido.