F5-TTS是一款基于流匹配(Flow Matching)技术的端到端语音合成系统,能够将文本转换为自然流畅的语音。与传统的TTS系统相比,F5-TTS采用了创新的DiT(Diffusion Transformer)架构,通过流匹配技术优化了语音生成过程,在语音自然度和发音准确性方面都有显著提升。
这个项目特别适合以下几类开发者:
提示:F5-TTS支持中文和英文语音合成,特别针对中文语音进行了优化,内置了智能拼音转换和多音字处理功能。
首先我们需要建立一个独立的Python环境,避免与其他项目的依赖冲突:
bash复制conda create -n f5-tts python=3.11
conda activate f5-tts
选择Python 3.11版本是因为它提供了良好的性能,同时与PyTorch等深度学习框架兼容性最佳。
根据你的CUDA版本安装对应的PyTorch包。以下是CUDA 12.1的安装示例:
bash复制pip install torch==2.8.0+cu121 torchaudio==2.8.0+cu121 --extra-index-url https://download.pytorch.org/whl/cu121
注意:务必确认你的CUDA版本与PyTorch版本匹配。可以通过
nvidia-smi命令查看CUDA版本。
克隆官方代码仓库:
bash复制git clone https://gitcode.com/gh_mirrors/f5/F5-TTS
cd F5-TTS
pip install -e .
pip install -e .命令会以"可编辑"模式安装项目,这样你可以修改代码后立即生效,无需重新安装。
FFmpeg是处理音频文件必不可少的工具:
bash复制conda install ffmpeg
为加速模型下载,建议配置国内镜像源:
bash复制echo 'export HF_ENDPOINT=https://hf-mirror.com' >> ~/.bashrc
echo 'export HF_HOME=~/.cache/huggingface' >> ~/.bashrc
source ~/.bashrc
这个配置会将Hugging Face的模型下载请求重定向到国内镜像站,大幅提升下载速度。
F5-TTS要求数据集按特定格式组织:
code复制your_dataset/
├── metadata.csv
└── wavs/
├── audio_0001.wav
├── audio_0002.wav
└── ...
metadata.csv文件内容格式为:
code复制audio_file|text
wavs/00001.wav|这是第一条语音的文字
wavs/00002.wav|这是第二条语音的文字
F5-TTS提供了prepare_csv_wavs.py脚本来处理原始数据:
bash复制python src/f5_tts/train/datasets/prepare_csv_wavs.py /input/dataset/path /output/dataset/path
脚本支持三种主要模式:
微调模式(默认):
预训练模式(添加--pretrain参数):
并行处理(添加--workers N参数):
F5-TTS内置了智能中文处理功能,核心是convert_char_to_pinyin()函数:
python复制def convert_char_to_pinyin(text_list, polyphone=True):
# 初始化结果列表
final_text_list = []
# 标点符号统一转换
custom_trans = str.maketrans({";": ",", "“": '"', "”": '"', "‘": "'", "’": "'"})
for text in text_list:
char_list = []
text = text.translate(custom_trans)
# 使用结巴分词处理中文
for seg in rjieba.cut(text):
seg_byte_len = len(bytes(seg, "UTF-8"))
# 处理非中文字符
if seg_byte_len == len(seg):
if char_list and seg_byte_len > 1 and char_list[-1] not in " :'\"":
char_list.append(" ")
char_list.extend(seg)
# 处理中文字符
elif polyphone and seg_byte_len == 3 * len(seg):
seg_ = lazy_pinyin(seg, style=Style.TONE3, tone_sandhi=True)
for i, c in enumerate(seg):
if is_chinese(c):
char_list.append(" ")
char_list.append(seg_[i])
# 处理混合字符
else:
for c in seg:
if ord(c) < 256:
char_list.extend(c)
elif is_chinese(c):
char_list.append(" ")
char_list.extend(lazy_pinyin(c, style=Style.TONE3, tone_sandhi=True))
else:
char_list.append(c)
final_text_list.append(char_list)
return final_text_list
这个函数实现了:
提示:对于专业领域术语,建议先在文本中转换为拼音,确保发音正确。
使用Accelerate库配置训练环境:
bash复制accelerate config
配置过程中需要做出以下关键选择:
基础训练命令:
bash复制accelerate launch src/f5_tts/train/train.py --config-name F5TTS_v1_Base.yaml
高级训练选项示例:
bash复制accelerate launch --mixed_precision=fp16 src/f5_tts/train/train.py \
--config-name F5TTS_v1_Base.yaml \
++datasets.batch_size_per_gpu=19200 \
++optim.bnb_optimizer=True
这个命令实现了:
F5-TTS的配置主要通过Hydra框架管理,核心参数文件是src/f5_tts/configs/F5TTS_v1_Base.yaml。
yaml复制datasets:
name: Emilia_ZH_EN
batch_size_per_gpu: 38400
batch_size_type: frame
max_samples: 64
num_workers: 16
batch_size_type: frame:按音频帧数计算批次大小,适合长音频num_workers: 16:数据加载的并行进程数,建议设为CPU核心数的70-80%yaml复制optim:
epochs: 11
learning_rate: 7.5e-5
num_warmup_updates: 20000
grad_accumulation_steps: 1
max_grad_norm: 1.0
bnb_optimizer: False
num_warmup_updates:学习率热身步数,避免初期训练不稳定bnb_optimizer:8-bit优化器,显存不足时可启用yaml复制model:
name: F5TTS_v1_Base
tokenizer: pinyin
backbone: DiT
arch:
dim: 1024
depth: 22
heads: 16
attn_backend: torch
mel_spec:
target_sample_rate: 24000
mel_spec_type: vocos
dim: 1024:Transformer隐藏层维度depth: 22:Transformer层数mel_spec_type: vocos:使用Vocos声码器CUDA内存不足:
batch_size_per_gpubnb_optimizer: Truegrad_accumulation_steps累积梯度数据加载缓慢:
num_workersNCCL通信错误:
添加以下环境变量:
bash复制export NCCL_P2P_DISABLE=1
export NCCL_IB_DISABLE=1
F5-TTS支持多种日志工具:
yaml复制ckpts:
logger: wandb # 可选 wandb/tensorboard/null
log_samples: True # 记录推理样本
log_samples定期检查合成质量yaml复制ckpts:
save_per_updates: 50000
keep_last_n_checkpoints: -1
last_per_updates: 5000
save_per_updates:定期保存检查点last_per_updates:频繁保存最新权重(便于恢复训练)keep_last_n_checkpoints限制保存数量经过多次训练实践,我总结了以下宝贵经验:
数据质量至关重要:
学习率设置技巧:
批次大小调整:
batch_size_type: framebatch_size_type: sample语音质量评估:
训练时间预估:
模型部署建议:
通过合理配置和耐心调优,F5-TTS能够生成非常自然的中英文语音,特别是在中文语音合成方面表现出色。关键在于数据准备和训练过程的细致把控。