Tailored news hub
home›Audio›

Come UNISON Unifica Generazione ed Editing Audio con Deep LLM

Scopri il framework che integra text-to-audio, text-to-speech e clonazione vocale zero-shot in un unico modello a pesi unificati.

Come UNISON Unifica Generazione ed Editing Audio con Deep LLM
#Accademico#Generazione Contenuti#LLM#Open Source#TTS

UNISON è un framework unificato di flow-matching latente per la generazione e l'editing di audio e parlato. Utilizzando un singolo set di pesi, integra text-to-audio, text-to-speech, clonazione vocale zero-shot e editing di scene audio/vocali in un unico modello, architettura e passaggio in avanti.

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.

DirectoryVAEDiT depthChannelsConfig
unison_D20S0_O_40ch/MMAudio 44 kHz20 double + 0 single40D20S0_O_40ch.yaml
unison_D24S0_O_20ch/MMAudio 16 kHz24 double + 0 single20D24S0_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.

TaskFormato 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.pth o v1-16.pth, e best_netG.pt per il VAE a 16 kHz) dal rilascio di MMAudio.
  • Impostare la variabile d'ambiente QWEN_OMNI_MODEL_PATH al percorso dell'installazione locale di Qwen2.5-Omni-7B.
  • Utilizzare snapshot_download di Hugging Face per scaricare i checkpoint di UNISON in una directory checkpoints/.

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
Articoli Correlati