项目名:VITS-fast-fine-tuning (VITS 快速微调)
项目地址:https://github.com/Plachtaa/VITS-fast-fine-tuning
支持语言:中、日、英
官方简介:
这个代码库会指导你如何将自定义角色(甚至你自己),加入预训练的VITS模型中,在1小时内的微调使模型具备如下功能:
在 模型所包含的任意两个角色 之间进行声线转换
以 你加入的角色声线 进行中日英三语 文本到语音合成。
本项目使用的底模涵盖常见二次元男/女配音声线(来自原神数据集)以及现实世界常见男/女声线(来自VCTK数据集),支持中日英三语,保证能够在微调时快速适应新的声线。
干声,一般指录音以后未经过任何空间性质或的后期处理和加工的纯人声。
为了保证最好的合成效果,数据集越干净越好。当然也不是必须使用干声数据,也可以使用从视频中分离的人声来进行训练,效果也还可以。
录制可以直接使用手机进行录音,如果电脑有效果较好的麦克风,也可以使用麦克风进行录制(如果可以自定义录制音频格式,建议选择wav)。
如果进行视频人声分离,我这给大家推荐几个分离相关的网站和项目。
将音频转码为wav格式,码率等配置保持原始音频质量即可。可以使用格式工厂、ShanaEncoder等转码软件进行音频转码。
将我们的音频数据切分成多个5-15s的小段,这个范围仅供参考。需要注意的是,如果音频时长过长,在训练过程中会占用更多的显存,所以为了降低显存和显卡负担,建议大家切分成小段。
那么切分方式同样也多种多样,可以使用视频剪辑软件、音频编辑软件、格式转换软件、第三方软件等。
我这边就以windows用户为例,给大家推荐一款开源的音频批量自动分割软件slicer-gui(源自b站),官方下载地址:https://github.com/flutydeer/audio-slicer/releases/download/v1.1.0/slicer-gui-windows-v1.1.0.zip
完成以上分割后,我们将我们分割好的音频文件,存入一个文件夹中,需要注意的是,此文件夹的命名就是我们训练时的说话人配置,所以需要慎重取名,并不要和其他说话人重复。最后将存放音频的文件夹再存入一个名为:custom_character_voice 的文件夹中,最后打包压缩包即可。需要注意,此文件夹在源码中是默认的配置,所以建议大家保持一致,可以避免不必要的麻烦。那么最终的文件目录结构如下:
我们先安装git,在终端运行命令
然后clone项目到目录。(注意,如果您选择的VITS-fast-fine-tuning的镜像,那可能需要先删除默认的文件夹,重新clone项目)
如果您没有选择做好的官方镜像,则需要手动安装相关环境,具体可以参考官方笔记:https://colab.research.google.com/drive/1pn1xnFfdLK63gVXDwV4zCXfVeo8c-I-0?usp=sharing
1. 安装运行环境
2.下载预训练模型(以下步骤如果不进行训练,皆可以跳过)
可以根据自己的需求下载对应的模型,不一定全部都下载。
下载好后,需要将配置文件和预训练模型移动到指定路径,我这里提供了shell脚本,您可以创建名为 init.sh 的文件,贴入以下内容,然后通过 bash init.sh CJE 来运行脚本,选择需要使用的预训练模型。最后就是预训练模型的传参,分别是 CJE、CJ、C。
3.上传数据集并解压
4.数据预处理
我这里提供了shell脚本,您可以创建一个data_pre.sh的文件,将以下内容写入,然后使用bash data_pre.sh 运行,第一个传参是选择训练的目标语言(需要有配套的预训练模型),第二个传参为0表示不使用预训练模型,直接进行训练,非0则使用预训练模型。例如: bash data_pre.sh CJE 就是使用预训练模型CJE训练CJE三语模型。
在完成运行环境和前期准备后,则可以进行我们的训练了。
打开终端,在项目根目录运行以下命令即可,其中 -m 后为模型输出路径, --max_epochs 后为最大迭代次数,到达后会自动停止。您可以根据自己需求自行更改,默认为存储在 OUTPUT_MODEL文件夹中,训练100个迭代。
下面是训练日志内容,可以看到训练相关的配置,迭代次数,损失率,输出的模型等内容。等待训练完成即可,期间也可以随时终止训练。
将我们的模型和配置文件放到指定文件夹下(配置文件放到项目根目录,模型放到OUTPUT_MODEL文件夹下),项目根目录运行以下命令,打开web UI服务,进行推理。其中 --model_dir 后就是模型路径,可以自行修改,配置文件默认读取的 项目路径下的 finetune_speaker.json 。
需要注意的是,默认服务跑在 http://127.0.0.1:7860,如果您需要公网访问,可以做修改端口至6006,开放AutoDL对应实例的自定义服务功能,或者自建内网穿透。