复现so-vits模型合成ai月之美兔过程中遇到的一些问题及处理方法及模型开源

2023-03-22 22:16:23     来源:哔哩哔哩

复现模型:https://github.com/PlayVoice/so-vits-svc


(资料图)

训练后得到的模型:https://pan.baidu.com/s/1rDBiX496T6irnMgK8ZBxjg?pwd=9r41  提取码:9r41

这篇文章可能适合什么读者:对sovits的复现感兴趣,但本地设备显卡算力不足,打算通过autodl等平台租借显卡,在anaconda+linuxs平台上复现sovits4.0的读者。(虽然后文也有涉及一点win系统上复现可能出现问题)

以下内容视作读者具备基本的代码复现知识,不过如果阅读中有不理解的地方或者问题欢迎私信与我讨论,也欢迎喜欢ai技术和nijisanji的各位在评论区交流心得。

笔者的复现平台:linuxs系统+anaconda。显卡是3090 cuda=11.6 显存24g

torch的版本我选用:pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu116。这里建议大伙选用符合你自己设备cuda版本的torch,把我这段的最后几个数字改成你的cuda版本即可,不清楚自己的cuda版本可以用nvidia-smi指令查看。cuda一般是向上兼容的。

py我选用python=3.8

其他环境配置参照github文档中的requirements.txt,不过不建议直接pip install -r requirements.txt,因为pyworld的安装需要在先安装好torch的基础之上。实际运行过程中发现requirements文档也不太完整,可能还需要补充pip install一些东西,比如pip install librosa=0.8.0(如果最新版本或过早版本都会导致问题),tensorboard,另外starlette我用的也是0.26.1,因为报错冲突了

linuxs系统直接pip install pyaudio可能出错。因为在安装PyAudio之前需要先安装pyproject.toml-based projects,方法如下:

yes|sudo apt-get install portaudio19-dev

yes|sudo apt-get install python3-all-dev

pip install pyaudio

(参考自:https://blog.csdn.net/weixin_38369492/article/details/125992255。在sudo之前补充了yes|以免确认)

执行时preprocess_hubert_f0.py,如果出现no moudle found 'parselmouth'或者在parselmouth的安装中报错,请pip install praat-parselmouth

dataset raw/ 中的语音文件必须为wav格式否则无法进行预处理,建议选用每条长度为6秒的主播的无背景噪音且音色清晰的语音60条-100条(此处参考https://github.com/SUC-DriverOld/so-vits-svc-Chinese-Detaild-Documents)。推荐的方法是下载一段主播的无背景音杂谈,然后用剪切工具如“音频编辑专家”等分成几秒的小片段

我猜想加入一些消除bgm的歌回或是歌曲可以提高生成效果,有待验证

和本文无关不过顺口一提我个人pip install比较喜欢用pypi源(即pip install (moudle name ) -i http://pypi.douban.com/simple --trusted-host pypi.douban.com)

有关人声和背景音乐的分离,我一开始用到的网站是https://www.media.io/zh/vocal-remover.html,每日非会员可以进行10次100m以内的人声分离(考虑到网站分离长音频容易崩建议每次放进去的音频不要过长),输出时也可以以wav格式输出。另外一种方法是下载ultimate vocal remover (链接:https://github.com/Anjok07/ultimatevocalremovergui),这个程序的人声分离性能很好但是体积不小(4g)且分离时烧cpu。快速分离可用前一种方法,追求效果可用后者方法。

windows系统下开始训练时如果出现报错RuntimeError: Distributed package doesn't have NCCL built in,请将train.py第60行的dist.init_process_group(backend='nccl', init_method='env://', world_size=n_gpus, rank=rank)改为dist.init_process_group(backend="gloo", init_method='env://', world_size=n_gpus, rank=rank)

开始训练时如果出现爆显存(error: cuda out of memory),建议调小batch_size,通过修改configs文件夹下的configs文件内batch_size后跟的那个值来调整(没有ide的话就用记事本打开就可以改),默认为12,我24g显存的3090是可以满足。8g显存的设备可以考虑batch_size调为4。

进行推理时如果爆显存,可以尝试增大slice_db,如果依旧存在问题可以将要推理的raw分段

后续想到啥再补充

标签:

包装