Generación y edición unificada de audio con UNISON
UNISON es un framework unificado de latent flow matching que maneja múltiples tareas de audio y voz utilizando un único conjunto de pesos. Soporta text-to-audio, text-to-speech, clonación de voz zero-shot, generación de escenas mixtas de voz y sonido, y edición detallada de audio, todo dentro de un mismo modelo y un solo paso hacia adelante. Construido sobre una estrategia de deep LLM fusion, UNISON aprovecha un modelo de lenguaje Qwen2.5-Omni-7B congelado para inyectar representaciones semánticas ricas capa a capa en un backbone de difusión, eliminando la necesidad de codificadores o cabezales específicos para cada tarea. El diseño marca un cambio hacia sistemas de generación de audio verdaderamente de propósito general.
Cómo funciona UNISON: Mask Channels y Deep LLM Fusion
La arquitectura de UNISON se basa en un encoder/decoder VAE compartido y un backbone MM-DiT. El VAE comprime el audio crudo en un espacio latente, donde el latent flow matching genera formas de onda de manera eficiente. La identidad de la tarea se codifica mediante un mask channel que condiciona el proceso de difusión sin módulos adicionales. El audio de origen o referencia se inyecta mediante la concatenación de canales codificados por el VAE.
La innovación clave es la deep LLM fusion: los estados ocultos de capas muestreadas uniformemente del modelo Qwen2.5-Omni-7B congelado se proyectan mediante capas lineales aprendidas y se inyectan en los bloques de doble flujo MM-DiT correspondientes. Esta integración capa a capa proporciona un contexto lingüístico y acústico rico, lo que permite al modelo unificar diversas tareas de generación y edición en un solo paso hacia adelante. No se necesitan text encoders separados ni cabezales específicos para cada tarea.
Checkpoints disponibles
Se proporcionan dos variantes, que difieren en la tasa de muestreo del VAE y la capacidad del modelo. Ambas comparten el mismo encoder Qwen2.5-Omni-7B y el mismo pipeline de inferencia.
| Directorio | VAE | Profundidad DiT | Canales | Configuración |
|---|---|---|---|---|
unison_D20S0_O_40ch/ | MMAudio 44 kHz | 20 double + 0 single | 40 | D20S0_O_40ch.yaml |
unison_D24S0_O_20ch/ | MMAudio 16 kHz | 24 double + 0 single | 20 | D24S0_O_20ch.yaml |
La variante de 44 kHz ofrece audio de mayor calidad para música y sonido general; la variante de 16 kHz utiliza más bloques transformer pero un canal más estrecho, adecuada para voz.
Prompting multitarea
UNISON utiliza formatos de prompt unificados para especificar las tareas. La siguiente tabla muestra cómo se activa cada tarea.
| Tarea | Formato de prompt |
|---|---|
| Text-to-Audio (T2A) | [Audio] {caption} |
| Text-to-Speech (TTS) | [Speech] A {female/male} voice saying "{text}" |
| Mixed Speech + Sound | [Speech] A {gender} voice saying "{text}" [Audio] {background} |
| Zero-shot Speaker Cloning | [Speech with voice] {ref_text}, {target_text} |
| Audio Scene Editing (add/remove/replace/denoise) | [Edit] [Audio] {instruction} |
| Speech-in-Scene Editing (content/insert/delete) | [Edit] [Speech] {instruction} |
| Timed Temporal Composition | `[Audio] From {t1}s to {t2}s, {event1}. |
| From {t2}s to {t3}s, {event2}. ...` |
El mask channel y la concatenación de referencia codificada por VAE permiten al modelo interpretar estos prompts sin ramas de entrada separadas.
Primeros pasos
Para ejecutar UNISON localmente:
- Clona el repositorio e instala las dependencias.
- Descarga los pesos del VAE de MMAudio (
v1-44.pthov1-16.pth, ybest_netG.ptpara el VAE de 16 kHz) desde la publicación de MMAudio. - Configura la variable de entorno
QWEN_OMNI_MODEL_PATHcon la ruta de tu instalación local de Qwen2.5-Omni-7B. - Usa
snapshot_downloadde Hugging Face para descargar los checkpoints de UNISON en un directoriocheckpoints/.
Los checkpoints son archivos únicos model.safetensors, que se desenvuelven automáticamente de EMA si es necesario.
El pipeline también acepta directorios o rutas de archivo directas.
git clone https://github.com/lizhaoqing/UNISON cd UNISON pip install -r requirements.txt # Optional: pip install flash-attn --no-build-isolation export QWEN_OMNI_MODEL_PATH=Qwen/Qwen2.5-Omni-7B # Place downloaded MMAudio VAE weights in unison/models/mmaudio/data/ext_weights/ # Then download UNISON checkpoints (e.g., via snapshot_download)
Generación y edición con UNISON
La inferencia se lanza mediante un único script.
La canalización admite tanto el ayudante bash infer.sh como una llamada directa a Python.
Los parámetros clave incluyen:
--num_inference_steps: pasos del solucionador ODE (por defecto 100; use 50 para una generación más rápida).--guidance_scale: intensidad de guía sin clasificador (classifier-free guidance) (por defecto 4.5).--seed: semilla de reproducibilidad (por defecto 42).--gen_duration: duración de salida en segundos para tareas de generación (por defecto 10.0).--ref_duration: duración del clip de referencia para TTS zero-shot (por defecto 3.0).
El modelo puede alternar entre todas las tareas utilizando la bandera --task_mode all.
Los resultados se guardan en un directorio específico.
Un ejemplo de una sola instrucción a continuación demuestra la generación de texto a audio.
# 44 kHz variant bash scripts/infer.sh \ --checkpoint_dir checkpoints/unison_D20S0_O_40ch \ --model_config unison/config/D20S0_O_40ch.yaml \ --vae_config unison/models/mmaudio/vae_config_44k.yaml \ --task_mode all # Or single-prompt generation python unison/pipelines/infer.py \ --model_ckpt checkpoints/unison_D20S0_O_40ch \ --model_config unison/config/D20S0_O_40ch.yaml \ --vae_config unison/models/mmaudio/vae_config_44k.yaml \ --omni_model_path $QWEN_OMNI_MODEL_PATH \ --task_mode generation \ --gen_prompt "[Audio] Rain falling on a tin roof with distant thunder" \ --gen_duration 10.0 \ --output_dir outputs/demo




