Generazione e Modifica Audio Unificata con UNISON
UNISON è un framework unificato di latent flow matching che gestisce molteplici task audio e vocali utilizzando un unico set di pesi. Supporta text-to-audio, text-to-speech, clonazione vocale zero-shot, generazione di scene miste parlato-suono e modifica audio a grana fine — tutto con un unico modello e in un solo passaggio in avanti. Basato su una strategia di deep LLM fusion, UNISON sfrutta un modello linguistico Qwen2.5-Omni-7B congelato per iniettare rappresentazioni semantiche ricche strato per strato in una backbone di diffusione, eliminando la necessità di encoder o head specifici per task. Il design segna un cambiamento verso sistemi di generazione audio veramente generici.
Come funziona UNISON: Canali Maschera e Deep LLM Fusion
L'architettura di UNISON è costruita attorno a un encoder/decoder VAE condiviso e una backbone MM-DiT. Il VAE comprime l'audio grezzo in uno spazio latente, dove il latent flow matching genera forme d'onda in modo efficiente. L'identità del task è codificata tramite un canale maschera che condiziona il processo di diffusione senza moduli aggiuntivi. L'audio sorgente o di riferimento viene iniettato tramite concatenazione di canali codificati dal VAE.
L'innovazione chiave è la deep LLM fusion: gli stati nascosti provenienti da layer campionati uniformemente del modello Qwen2.5-Omni-7B congelato vengono proiettati tramite strati lineari appresi e iniettati nei corrispondenti blocchi double-stream MM-DiT. Questa integrazione a livello di strato fornisce un ricco contesto linguistico e acustico, consentendo al modello di unificare diversi task di generazione e modifica in un unico passaggio in avanti. Non sono necessari encoder testuali separati o head specifici per task.
Checkpoint Disponibili
Sono fornite due varianti, che differiscono per frequenza di campionamento del VAE e capacità del modello. Entrambe condividono lo stesso encoder Qwen2.5-Omni-7B e pipeline di inferenza.
| Directory | VAE | DiT depth | Channels | Config |
|---|---|---|---|---|
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 a 44 kHz offre audio di qualità superiore per musica e suoni generici; la variante a 16 kHz utilizza più blocchi transformer ma un canale più stretto, adatta al parlato.
Prompting Multi-Task
UNISON utilizza formati di prompt unificati per specificare i task. La tabella seguente mostra come viene attivato ciascun task.
| Task | Formato 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}. ...` |
Il canale maschera e la concatenazione del riferimento codificato dal VAE consentono al modello di interpretare questi prompt senza rami di input separati.
Per Iniziare
Per eseguire UNISON in locale:
- Clonare il repository e installare le dipendenze.
- Scaricare i pesi VAE di MMAudio (
v1-44.pthov1-16.pth, ebest_netG.ptper il VAE a 16 kHz) dal rilascio di MMAudio. - Impostare la variabile d'ambiente
QWEN_OMNI_MODEL_PATHal percorso dell'installazione locale di Qwen2.5-Omni-7B. - Utilizzare
snapshot_downloaddi Hugging Face per scaricare i checkpoint di UNISON in una directorycheckpoints/.
I checkpoint sono singoli file model.safetensors, automaticamente estratti dall'EMA se necessario.
La pipeline accetta anche directory o percorsi file diretti.
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)
Generazione e Modifica con UNISON
L'inferenza viene avviata tramite un singolo script.
La pipeline supporta sia l'helper bash infer.sh che una chiamata diretta a Python.
I parametri chiave includono:
--num_inference_steps: passi del ODE solver (predefinito 100; usare 50 per una generazione più veloce).--guidance_scale: intensità della classifier-free guidance (predefinito 4.5).--seed: seed per la riproducibilità (predefinito 42).--gen_duration: durata dell'output in secondi per i task di generazione (predefinito 10.0).--ref_duration: lunghezza della clip di riferimento per TTS zero-shot (predefinito 3.0).
Il modello può passare da un task all'altro utilizzando il flag --task_mode all.
Gli output vengono salvati in una directory dedicata.
Un esempio a singolo prompt di seguito mostra la generazione text-to-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




