# 引言
阅读本文的一大前提是您可以看懂 Bert-vits2 项目中的部分源码,至少对训练相关代码需要有基础的理解
本文不提供一键脚本或整合包,仅提供基础流程和部分坑点及部分数据预处理脚本。
本文只适用于 2.3 final 版本,中文特化版建议等待更新
# 训练流程
# 音频重采样
此部分可能遇到的问题:
# 采样率应该使用多少?
除非你能自行训练底模或者在无需底模的情况下训练,否则保持默认的 44100
# 重采样过于缓慢
此部分使用 CPU 进行相关操作,部分 GPU 云计算平台在无卡模式下 (或者常规模式下) CPU 性能比桌面级平台要慢很多,建议在本地预处理后再上传到 GPU 云平台
# 重采样不开始或长时间无变化
在没有日志的情况下此问题无解。建议检查是否重采样时出现了内存不足的问题。
# 训练集预处理
# filelist 生成
本文不考虑训练集以何种方式进行收集,仅提供预处理方法。
对于不带有标注的语音文件,请自行手打标注或使用 whisper
等进行处理,建议参考 VITS-fast-fine-tuning 项目进行编写
对于带有 lab 格式标注的语音文件 (例如 AI-Hobbyist Genshin_Datasets),可参照下列 py 文件自行生成 filelist:import os
path = 'Data/audios' # 训练集存放位置,此文件夹下应有 wavs (已重采样音频) 和 text (lab 格式标注文件)
character = "角色名" # 角色名,可使用中文
lang = "ZH" # 训练集语言
for root, dirs, files in os.walk(path):
for file in files:
if '.wav' not in file:
continue
wav_path = f"{path}/wavs/{file}"
text_path = f"{path}/text/{file.replace('.wav', '.lab')}"
with open(text_path, 'r', encoding='utf-8') as lab:
lab_line = lab.readline().strip()
if 'color' in lab_line or '{' in lab_line:
continue
l_string = f"{wav_path}|{character}|{lang}|{lab_line}"
with open(f'filelists/{character}.list', 'a+', encoding='utf-8') as f:
f.write(l_string + '\n')
# preprocess_text
对于 preprocess_text 的配置可能遇到的问题:
# val_per_spk 设置为多少?
合理即可。例如 1500 条数据集设置为 4 就不太合理。不建议设置太大。
# 要开启数据清洗吗?
开。数据清洗可以预处理掉明显不符合格式 / 缺项漏项 / 文本包含特殊标记的训练集,便于训练使用。
如果训练集是以特殊方法从游戏或应用中提取的,务必开启数据清洗,否则可能出现类似于 {NICKNAME}
等标记混入训练集之中,影响后续操作
# bert 生成
本部分没什么特别重要的问题,只需要注意:
- 现版本无需自行下载模型,bert_gen 的时候会自动下载
- 设备优先选 GPU,有
cuda
或者mps
且能跑起来就优先用,尽量别用cpu
- 无需特别关注并行数,一般默认值就可以了
关于镜像选择:
huggingface
:国外服务器 (例如 AWS 海外) 的用这个openi
:国内服务器务必使用,即使有网络加速也不要用huggingface
,能慢到怀疑人生
# 训练 config
此处坑点较多,且对训练有一定影响,提供部分常用配置:
eval_interval
:控制模型保存和 tensorboard 中 audio 预览的生成频率,过低会影响训练速度,建议根据训练集动态调整seed
:随机种子,选个幸运数字就行,对实际效果影响不大epochs
:最大训练轮数,建议保持默认batch_size
:控制模型训练速度和优化性能,一般设置为显存的 50%(例如 3090 24GB 设置为 12),但部分专业卡或者配置可以和显存对等 (例如 V100 32GB 设置为 32)
建议非专业卡按照 50% 设置,如果训练时显存占用不满就逐步调高,直到显存占用稳定在 95% 以上bf16_run
:使用 BF16 进行训练 / 推理。需要安培架构或更新的显卡,如果支持建议使用。开启此选项时,batch_size
的 50% 不适用,请自行调整n_speakers
:调整为实际说话人数即可。设置过大可能影响训练速度与显存占用
对于部分机器学习常见参数不做解释,请自行查询相关参数作用
# 开始训练
# 需要使用底模吗?
没有训练经验或者数据集不够大的 (我认为至少总长度不能少于 1 小时),务必使用底模进行 finetune 训练,否则可能出现训练不正常 / 生成电音 / 效果奇差等问题
使用底模需要填写 openi_token
,请注意在 mirror 部分提前填写
# 训练应在何时结束?
没有准确答案。如果数据集较大建议在 6000 步后使用 TensorBoard 的 Audios 查看验证集效果。数据集较小则建议每 200 步查看一次。
# 如果你还没有可靠的 GPU 资源
那么我建议你使用 AWS 的 EC2 机器学习加速计算实例, Tesla T4
可以适用大部分的初步机器学习需求,例如本文的 Bert-VITS2
现在注册亚马逊云科技账户可以享受 12 个月免费套餐,其中包括 Amazon EC2 云服务器、S3 云储存、Cloudfront CDN 等多种热门产品。
为节省时间,此处省去注册账号的过程,在注册后进入控制台,选择创建实例:
随后输入相关内容,实例选择 g4dn.xlarge
,系统选择 ubuntu 22.04LTS
,随后创建密钥对:
如果你有一定改写代码的能力,或许可以试试 Inf1
一切完成之后,启动实例,等待创建完成后使用 SSH 连接到终端即可。
g4dn.xlarge
不属于免费套餐内容,使用时注意余额