与大型语言模型(LLM)相比,语音模型相对较小,只需要本地有 GPU 的机器就可以进行训练。我的机器是很久以前购买的 1080Ti,10G 的显存,就可以正常训练。它在中文声音模拟方面的效果也相当不错。我下载了一段十几分钟评书音频,用这个模型进行训练只需 5 分钟就能完成。我觉得它模拟的音色和抑扬顿挫的效果都相当不错,虽然不能完全模拟真人的声音,但已经是我目前使用过的最好效果了。
此外,作者评测显示用 1 分钟语音与 30 分钟的效果相似。该项目目前只发布了 TTS 工具,变声工具还在开发中。
建议在 docker 环境下的安装。这样既可以与其他工具共存,也不会破坏宿主机当前环境。我下载了与 install.sh 中指定的底层软件版本最相近的版本。基础镜像 7.2G,全部安装完 10.5G,另外下载的模型和源码也在 5G 以内。
$ docker pull pytorch/pytorch:2.1.1-cuda12.1-cudnn8-runtime
$ nvidia-docker run --network host --rm -v /exports:/workspace/exports -it pytorch/pytorch:2.1.1-cuda12.1-cudnn8-runtime bash
docker image 占空间 7.2G
安装软件时,如果设置代理。可能会快一些;另外,为避免重复安装,我修改了 install.sh 中的 cuda 版本,与 docker 版本一致。
$ git clone https://github.com/RVC-Boss/GPT-SoVITS
$ cd GPT-SoVITS
$ . install.sh
如需要中文语音识别,还需要安装以下软件:
$ pip install modelscope torchaudio sentencepiece funasr
训练和使用 GPT-SoVITS 都需要下载基础模型。如需训练模型,还需要对待模仿的音频进行切分和识别等操作,至少需要安装语音识别模型 ASR。
在 huggingface 下载
$ cd GPT_SoVITS/pretrained_models
$ git clone https://huggingface.co/lj1995/GPT-SoVITS
$ mv GPT-SoVITS/* .
不计.git,模型约 1.1G 左右
在魔塔平台下载
$ cd tools/damo_asr/models
$ git clone https://www.modelscope.cn/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch.git
$ git clone https://www.modelscope.cn/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch.git
$ git clone https://www.modelscope.cn/iic/punc_ct-transformer_zh-cn-common-vocab272727-pytorch.git
不计.git 文件夹,约 1.4G 左右。
如需要修改端口,请在 config.py 中设置
$ python webui.py
此时,在默认的 9874 端口即可看到 gradio 界面。
切分音频
语音识别
编辑语音识别结果
切换到第二个选项卡 GPT-SOVITS-TTS,并输入待创建的模型名称。
该界面分为三个部分:A 数据格式化,B 模型训练,C 语音合成。
1A-Dataset formatting
设置之前处理的 list 位置和音频数据目录,按照 A-B-C 的步骤执行,或者通过下方按钮一次性执行所有步骤。
1B-Fine-tuned training
分别点击两个按钮进行模型训练,SoVITS 训练大约需要 5GB 显存和 5 分钟左右,GPT 训练大约需要 5GB 显存和 3 分钟左右。
在训练过程中可能会出现共享内存错误,解决方法请参考问题及解决部分。
1C-inference
点击 refresh 按钮后,下拉列表中将出现新训练的模型。选择模型后,打开推理 WEB 界面,在 9872 端口打开界面。
在推理 Inference 界面中,需要设置一个音频文件及其对应的文本。可以使用之前切分的 wav 文件,并输入其对应的文本。我觉得这是用于 GPT 从上文生成下文的需求。
然后输入需要合成的文本,点击合成按钮即可。
如果出现与 pyopenjtalk 相关的错误,请参考问题及解决部分。
我从下载到修改再到训练合成,大概花了半天时间;安装过程中遇到了一些报错,工具链还有一定的改进空间。
理论上,运行 install.sh 脚本可以直接安装所需软件。可能是因为 requirements.txt 文件中没有指定软件的版本号,导致我在安装 pyopenjtalk 时遇到了错误。似乎是由于编译工具的问题引起的。解决方法如下:
$ apt-get update
$ apt-get install build-essential
这是一个日语合成库,我们一般用不上,实在不行,将 text/japanese.py 中包含 pyopenjtalk 的地方加 try 或注释掉也行。
ImportError: cannot import name 'soft_unicode' from 'markupsafe'
降级了两个软件的版本后可正常运行。
$ pip install werkzeug==2.0.1
$ pip install markupsafe==1.1.1
我在使用语音识别 asr 功能时,报错“funasr-pipeline is not in the pipelines…",解决方法是:源码安装 modelscope(用 pip 安装同一版本报错找不到 funasr),另外还需要 modelscope 与 funasr 版本相配,请在 modelscopt 搜索 funasr,以确定其版本。
$ git clone -b funasr1.0 --single-branch https://github.com/alibaba-damo-academy/FunASR.git
$ cd FunASR
$ pip install -e ./
$ git clone https://github.com/modelscope/modelscope.git
$ pip install -e ./
修改后,出现另一报错“TypeError: AutoModel.generate() missing 1 required positional argument: ‘input’”,我觉得可能还是版本问题,于是修改了源码:
vi tools/damo_asr/cmd-asr.py
修改:
26 text = inference_pipeline(input="%s/%s"%(dir,name))[0]["text"]
27 #text = inference_pipeline(audio_in="%s/%s"%(dir,name))["text"] # xieyan test
报错信息如下:
RuntimeError: DataLoader worker (pid 14958) is killed by signal: Bus error. It is possible that dataloader’s workers are out of shared memory. Please try to raise your shared memory limit.
解决方法是修改 GPT_SoVITS/s2_train.py
112 行左右,将 DataLoader 的 num_workers 从 6 改成 1
110 train_loader = DataLoader(
111 train_dataset,
112 #num_workers=6,
113 num_workers=1,
代码以 Python 为主,约 1.3W 行,其中:
GPT_SoVITS 名字由三部分组成的模型:这里的 GPT 并非指代常见的大型语言模型 GPT,而是其字面意思——Generative Pre-training Transformer。它通常指利用上文生成下文的生成模型。这也可以从上述操作中看出,推理过程中使用“音频”作为引子来合成新的音频。
SoVITS 是 2023 年非常流行的一款歌声音色转换器,它主要基于 SoftVC 和 VITS 两个音频模型构建,名字即二者的组合。接下来的文章将介绍这两个模型相关的论文。
这个项目实现了定制的语音合成,并在训练过程中采用了如语音识别、人声与背景声的分离,以及精调模型,声音转换等技术的具体应用,可以说是一份极好的语音模型入门教材。
https://www.yjpoo.com/site/2983.html
我们致力于深入模型算法,为你剖析最新和经典的论文、开源项目;也为全栈的你,提供数据库、前后端及构建系统的实用技巧。