综合介绍
F5-TTS 是一种新型非自回归文本到语音(TTS)系统,基于流匹配的扩散变换器(Diffusion Transformer, DiT)。该系统通过使用 ConvNeXt 模型来优化文本表示,使其更容易与语音对齐,从而显著提升了合成质量和效率。F5-TTS 支持多语言数据集训练,具备高度自然和富有表现力的零样本能力、无缝代码切换能力以及速度控制效率。该项目开源,旨在促进社区发展。
这款模型摒弃了传统 TTS 系统中的复杂模块,例如时长模型、音素对齐和文本编码器等,而是通过将文本填充至与输入语音相同的长度,并应用去噪方法实现语音生成。
F5-TTS 的一大创新点是 Sway Sampling 策略,在推理阶段显著提升了效率,使其具备实时处理能力。这种特性适用于需要快速语音合成的场景,如语音助手和交互式语音系统。
F5-TTS 支持 零样本语音克隆,无需大量训练数据即可生成多种声音和口音,还提供了 情绪控制 和 速度调整 功能。该系统多语言支持强大,特别适合需要生成多样音频内容的应用场景,比如有声书、电子学习模块和营销材料等。
功能列表
- 文本到语音转换:将输入文本转换为自然流畅的语音。
- 零样本生成:无需预先录制样本即可生成高质量语音。
- 情绪复刻:支持生成带有情感的语音。
- 速度控制:用户可以控制语音生成的速度。
- 多语言支持:支持多种语言的语音生成。
- 开源代码:提供完整的代码和模型检查点,方便社区使用和开发。
使用帮助
安装流程
conda create -n f5-tts python=3.10 conda activate f5-tts sudo apt update sudo apt install -y ffmpeg pip uninstall torch torchvision torchaudio transformers # 安装 PyTorch(包含 CUDA 支持) pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 安装 transformers pip install transformers git clone https://github.com/SWivid/F5-TTS.git cd F5-TTS pip install -e . # Launch a Gradio app (web interface) f5-tts_infer-gradio # Specify the port/host f5-tts_infer-gradio --port 7860 --host 0.0.0.0 # Launch a share link f5-tts_infer-gradio --share
F5-TTS一键安装命令
conda create -n f5-tts python=3.10 -y && \ conda activate f5-tts && \ sudo apt update && sudo apt install -y ffmpeg && \ pip uninstall -y torch torchvision torchaudio transformers && \ pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 transformers && \ git clone https://github.com/SWivid/F5-TTS.git && \ cd F5-TTS && \ pip install -e . && \ f5-tts_infer-gradio --port 7860 --host 0.0.0.0
F5-TTS google Colab运行
注意:需要ngrok注册后申请密钥,实现内网穿透。
!pip install pyngrok transformers gradio # 导入所需库 import os from pyngrok import ngrok !apt-get update && apt-get install -y ffmpeg !pip uninstall -y torch torchvision torchaudio transformers !pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 transformers # 克隆并安装项目 !git clone https://github.com/SWivid/F5-TTS.git %cd F5-TTS !pip install -e . !ngrok config add-authtoken 2hKI7tLqJVdnbgM8pxM4nyYP7kQ_3vL3RWtqXQUUdwY5JE4nj # 配置 ngrok 和 gradio import gradio as gr from pyngrok import ngrok import threading import time import socket import requests def is_port_in_use(port): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: return s.connect_ex(('localhost', port)) == 0 def wait_for_server(port, timeout=60): start_time = time.time() while time.time() - start_time < timeout: if is_port_in_use(port): try: response = requests.get(f'http://localhost:{port}') if response.status_code == 200: return True except: pass time.sleep(2) return False # 确保 ngrok 没有在运行 ngrok.kill() # 在新线程中启动 Gradio def run_gradio(): import sys import f5_tts.infer.infer_gradio sys.argv = ['f5-tts_infer-gradio', '--port', '7860', '--host', '0.0.0.0'] f5_tts.infer.infer_gradio.main() thread = threading.Thread(target=run_gradio) thread.daemon = True thread.start() # 等待 Gradio 服务启动 print("等待 Gradio 服务启动...") if wait_for_server(7860): print("Gradio 服务已启动") # 启动 ngrok public_url = ngrok.connect(7860) print(f"\n=== 访问信息 ===") print(f"Ngrok URL: {public_url}") print("===============\n") else: print("Gradio 服务启动超时") # 保持程序运行 while True: try: time.sleep(1) except KeyboardInterrupt: ngrok.kill() break !f5-tts_infer-cli \ --model "F5-TTS" \ --ref_audio "/content/test.MP3" \ --ref_text "欢迎来到首席AI分享圈,微软发布了一款基于大模型的屏幕解析工具OmniParser.这款工具是专为增强用户界面自动化而设计的它." \ --gen_text "欢迎来到首席AI分享圈,今天将为大家详细演示另一款开源语音克隆项目。"
使用流程
训练模型
- 配置加速设置,例如使用多 GPU 和 FP16:
accelerate config
- 启动训练:
accelerate launch test_train.py
推理
- 下载预训练模型检查点。
- 单次推理:
- 修改配置文件以满足需求,例如固定时长和步长:
python test_infer_single.py
- 修改配置文件以满足需求,例如固定时长和步长:
- 批量推理:
- 准备测试数据集并更新路径:
bash test_infer_batch.sh
- 准备测试数据集并更新路径:
详细操作流程
- 文本到语音转换:
- 输入文本后,系统会自动将其转换为语音,用户可以选择不同的语音风格和情感。
- 零样本生成:
- 用户无需提供任何预先录制的样本,系统会根据输入文本生成高质量的语音。
- 情绪复刻:
- 用户可以选择不同的情感标签,系统会生成带有相应情感的语音。
- 速度控制:
- 用户可以通过调整参数来控制语音生成的速度,满足不同场景的需求。
- 多语言支持:
- 系统支持多种语言的语音生成,用户可以根据需要选择不同的语言。