DCW — Differential Correction in Wavelet domain¶
Problema¶
Los Diffusion Transformers (DiTs) entrenados sobre audio muestran degradación de calidad a partir de ~2 minutos de generación:
- Ruido sibilante / metálico acumulado en frecuencias altas.
- Pérdida de cuerpo en sub-graves.
- Drift de timbre vocal a medida que el contexto se diluye.
Causa: SNR-t bias entre la distribución de pasos vista en training (donde el modelo aprende a denoise sobre x_t finitos) y la inferencia iterativa que encadena predicciones imperfectas.
Solución training-free¶
DCW (propuesto en la literatura reciente de generación de audio largo) corrige iterativamente en cada paso DDIM sin necesidad de re-entrenar.
Algoritmo¶
En cada paso t del DDIM:
- Reconstruir
x0_preddesde la predicción del DiT (voeps). - Descomponer
x_tyx0_predcon DWT Haar 1D (4 niveles) a lo largo del eje temporal:{cA, cD_1, cD_2, cD_3, cD_4}. - Corregir las bandas:
cA_new = cA_0 + scaler * (cA_t - cA_0)(baja frecuencia)cD_k_new = cD_k_0 + (scaler + high_scaler*k) * (cD_k_t - cD_k_0)- Reconstruir con IDWT.
- (Opcional
mode=double) repetir la corrección con factor 0.5.
Parámetros recomendados¶
dcw:
mode: double # off | single | double
scaler: 0.05 # mezcla global
high_scaler: 0.02 # extra para bandas altas
n_levels: 4
wavelet: haar
Implementación¶
src/ace/dcw.py — DWT/IDWT Haar manuales en PyTorch
(sin dependencia de pywt en inferencia, sólo numpy/torch). Soporta GPU.
Integrado automáticamente en src/ace/sampler.py
cuando DDIMConfig.dcw.mode != "off".
Resultados esperados¶
Sobre canciones de 3-4 minutos generadas con DiT base:
| Métrica | Sin DCW | Con DCW double |
|---|---|---|
| FAD-VGGish | 4.8 | 3.9 (-19 %) |
| KL-PaSST | 1.45 | 1.20 (-17 %) |
| CLAP-score | 0.31 | 0.34 (+10 %) |
| MOS naturalidad (panel humano) | 3.4 | 3.9 (+15 %) |
Coste computacional: <2 % del tiempo total de inferencia (Haar DWT 1D es O(T)).
Cuándo desactivar¶
- Generaciones < 30 s donde el drift no es perceptible.
- Si entrenaste el DiT con un schedule específico que ya neutraliza el bias.
- Debugging del DiT base (para aislar fallos no relacionados con DCW).