meituan-longcat/LongCat-AudioDiT-3.5B
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

LongCat-AudioDiT:波形 latent 空间中的高保真扩散文本转语音

LongCat-AudioDiT

License GitHub Demo
Hugging Face Hugging Face
Wechat Twitter Follow License

引言

LongCat-AudioDiT 是一款基于扩散模型的文本转语音(TTS)模型,代表了当前技术水平(SOTA),可直接在波形潜空间中运行。

摘要:我们提出了 LongCat-TTS,这是一种新型的、非自回归的基于扩散模型的文本转语音(TTS)模型,其性能达到了当前技术水平(SOTA)。 与以往依赖梅尔频谱图等中间声学表示的方法不同,LongCat-TTS 的核心创新在于直接在波形潜空间内进行操作。这种方法有效减轻了复合误差,并大幅简化了 TTS pipeline,仅需一个波形变分自编码器(Wav-VAE)和一个扩散主干网络即可。 此外,我们对推理过程引入了两项关键改进:首先,我们识别并纠正了一个长期存在的训练-推理不匹配问题;其次,我们用自适应投影引导取代了传统的无分类器引导,以提升生成质量。 实验结果表明,尽管没有复杂的多阶段训练 pipeline 或高质量的人工标注数据集,LongCat-TTS 在 Seed 基准测试上实现了 SOTA 的零样本语音克隆性能,同时保持了具有竞争力的可懂度。 具体而言,我们最大的模型变体 LongCat-TTS-3.5B 优于之前的 SOTA 模型(Seed-TTS),在 Seed-ZH 上的说话人相似度(SIM)分数从 0.809 提升至 0.818,在 Seed-Hard 上从 0.776 提升至 0.797。 最后,通过全面的消融实验和系统分析,我们验证了所提出模块的有效性。 值得注意的是,我们研究了 Wav-VAE 与 TTS 主干网络之间的相互作用,揭示了一个反直觉的发现:Wav-VAE 中更高的重建保真度并不一定能带来更好的整体 TTS 性能。 代码和模型权重已发布,以促进语音社区的进一步研究。

LongCat-AudioDiT

本仓库提供了与 HuggingFace 兼容的实现,包括模型定义、权重转换和推理脚本。

Seed 基准测试实验结果

LongCat-AudioDiT 在 Seed 基准测试中实现了语音克隆性能的当前最佳水平(SOTA),超越了闭源和开源模型。

模型中文 CER (%) ↓中文 SIM ↑英文 WER (%) ↓英文 SIM ↑中文-难 CER (%) ↓中文-难 SIM ↑
GT1.260.7552.140.734--
Seed-DiT1.180.8091.730.790--
MaskGCT2.270.7742.620.71410.270.748
E2 TTS1.970.7302.190.710--
F5 TTS1.560.7411.830.6478.670.713
F5R-TTS1.370.754--8.790.718
ZipVoice1.400.7511.640.668--
Seed-ICL1.120.7962.250.7627.590.776
SparkTTS1.200.6721.980.584--
FireRedTTS1.510.6353.820.46017.450.621
Qwen2.5-Omni1.700.7522.720.6327.970.747
Qwen2.5-Omni_RL1.420.7542.330.6416.540.752
CosyVoice3.630.7234.290.60911.750.709
CosyVoice21.450.7482.570.6526.830.724
FireRedTTS-1S1.050.7502.170.6607.630.748
CosyVoice3-1.5B1.120.7812.210.7205.830.758
IndexTTS21.030.7652.230.7067.120.755
DiTAR1.020.7531.690.735--
MiniMax-Speech0.990.7991.900.738--
VoxCPM0.930.7721.850.7298.870.730
MOSS-TTS1.200.7881.850.734--
Qwen3-TTS1.220.7701.230.7176.760.748
CosyVoice3.50.870.7971.570.7385.710.786
LongCat-AudioDiT-1B1.180.8121.780.7626.330.787
LongCat-AudioDiT-3.5B1.090.8181.500.7866.040.797

安装

pip install -r requirements.txt

命令行界面推理

# TTS
python inference.py --text "今天晴暖转阴雨,空气质量优至良,空气相对湿度较低。" --output_audio output.wav --model_dir meituan-longcat/LongCat-AudioDiT-1B

# Voice cloning
python inference.py \
    --text "今天晴暖转阴雨,空气质量优至良,空气相对湿度较低。" \
    --prompt_text "小偷却一点也不气馁,继续在抽屉里翻找。" \
    --prompt_audio assets/prompt.wav \
    --output_audio output.wav \
    --model_dir meituan-longcat/LongCat-AudioDiT-1B \
    --guidance_method apg

# Batch inference (SeedTTS eval format, one item per line: uid|prompt_text|prompt_wav_path|gen_text)
python batch_inference.py \
    --lst /path/to/meta.lst \
    --output_dir /path/to/output \
    --model_dir meituan-longcat/LongCat-AudioDiT-1B \
    --guidance_method apg

推理(Python API)

1. 文本转语音(TTS)

import audiodit  # auto-registers with transformers
from audiodit import AudioDiTModel
from transformers import AutoTokenizer
import torch, soundfile as sf

# Load model
model = AudioDiTModel.from_pretrained("meituan-longcat/LongCat-AudioDiT-1B").to("cuda")
model.vae.to_half()  # VAE runs in fp16 (matching original)
model.eval()

tokenizer = AutoTokenizer.from_pretrained(model.config.text_encoder_model)

# Zero-shot synthesis
inputs = tokenizer(["今天晴暖转阴雨,空气质量优至良,空气相对湿度较低。"], padding="longest", return_tensors="pt")
output = model(
    input_ids=inputs.input_ids,
    attention_mask=inputs.attention_mask,
    duration=62,  # latent frames
    steps=16,
    cfg_strength=4.0,
    guidance_method="cfg",  # or "apg"
    seed=1024,
)
sf.write("output.wav", output.waveform.squeeze().cpu().numpy(), 24000)

2. 声音克隆(带提示音频)

import librosa, torch

# Load prompt audio
audio, _ = librosa.load("assets/prompt.wav", sr=24000, mono=True)
prompt_wav = torch.from_numpy(audio).unsqueeze(0).unsqueeze(0)  # (1, 1, T)

# Concatenate prompt_text + gen_text for the text encoder
prompt_text = "小偷却一点也不气馁,继续在抽屉里翻找。"
gen_text = "今天晴暖转阴雨,空气质量优至良,空气相对湿度较低。"
inputs = tokenizer([f"{prompt_text} {gen_text}"], padding="longest", return_tensors="pt")

output = model(
    input_ids=inputs.input_ids,
    attention_mask=inputs.attention_mask,
    prompt_audio=prompt_wav,
    duration=138,  # prompt_frames + gen_frames
    steps=16,
    cfg_strength=4.0,
    guidance_method="apg",
    seed=1024,
)

许可协议

本仓库(包括模型权重和源代码)均在MIT许可协议下发布。

除非另有说明,对本仓库的任何贡献均遵循MIT许可协议。本许可协议不授予使用美团商标或专利的任何权利。

详情请参见LICENSE文件。