去评论
辅助岛

【AI变声器】RVC AI 实时变声器,可变任何声音,保姆级别使用教程

X先生
2023/05/12 15:41:59



一个基于VITS的简单易用的语音转换(变声器)框架,算法相关经验和成果是b站花儿不哭和Rcell经过半年时间做了上百组实验得出的当前的最优解,注意需要N卡才能玩,A卡目前只能战未来Github

特点
@入梦增强版
1 对AI变声集成了VB-audio虚拟MME麦克风,可以实时输出
2 对RVC增强了模型地址,减少加载工作量

相比于传统变声器优点
1 AI变声不吃个人声线,只需要清晰的说化即可,传统变声器只能根据个人声线进行变化
2 可以训练模型,加载各种声线,语气声线多样化
相比于传统变声器缺点
1 延迟太高,通常都是1-5秒以上,传统变声器最低可以无延迟
2 咬字不清晰,气息非常奇怪,感情波动就会失真,非常吃模型的音源
3 吃配置较高,需要CPU和GPU双重占用,配置低就无法使用,RVC目前只能兼容N卡
4 兼容性还是太差了,AI变声目前还不成熟,闪退稳定性有待优化

博主观点
1 使用的时候建议独立声卡或者麦克风,耳机噪音过大会非常影响到AI变声效果,麦克风音质越好,效果越好
2 对CPU和GPU双重资源的压力,部分配置低的用户可能带不动,建议有独立显卡在使用
3 延迟太高,如果使用MME协议输出,延迟在2秒到6秒,如果麦克风音质太低,设置低延迟声音会卡顿
4 说话的时候不能大喊大叫,必须平稳说话,否则声音就变成气音
5 打游戏还是不行的,因为延迟太高,如果说话过快会覆盖下一句话,不能情绪过于激动不然也会变成气音
6 只是发短语音消息而非实时通话,声音还是非常棒的,颠覆了我对于AI变声的印象,科技使人进步

简介
使用top1检索替换输入源特征为训练集特征来杜绝音色泄漏
即便在相对较差的显卡上也能快速训练
使用少量数据进行训练也能得到较好结果(推荐至少收集10分钟低底噪语音数据)
可以通过模型融合来改变音色(借助ckpt处理选项卡中的ckpt-merge)
简单易用的网页界面
可调用UVR5模型来快速分离人声和伴奏

常见问题解答
Q1:ffmpeg error/utf8 error.
大概率不是ffmpeg问题,而是音频路径问题;
ffmpeg读取路径带空格、()等特殊符号,可能出现ffmpeg error;训练集音频带中文路径,在写入filelist.txt的时候可能出现utf8 error;
Q2:一键训练结束没有索引
显示"Training is done. The program is closed."则模型训练成功,后续紧邻的报错是假的;
一键训练结束完成没有added开头的索引文件,可能是因为训练集太大卡住了添加索引的步骤;已通过批处理add索引解决内存add索引对内存需求过大的问题。临时可尝试再次点击"训练索引"按钮。
Q3:训练结束推理没看到训练集的音色
点刷新音色再看看,如果还没有看看训练有没有报错,控制台和webui的截图,logs/实验名下的log,都可以发给开发者看看。
Q4:如何分享模型
rvc_root/logs/实验名 下面存储的pth不是用来分享模型用来推理的,而是为了存储实验状态供复现,以及继续训练用的。用来分享的模型应该是weights文件夹下大小为60+MB的pth文件;
后续将把weights/exp_name.pth和logs/exp_name/added_xxx.index合并打包成weights/exp_name.zip省去填写index的步骤,那么zip文件用来分享,不要分享pth文件,除非是想换机器继续训练;
如果你把logs文件夹下的几百MB的pth文件复制/分享到weights文件夹下强行用于推理,可能会出现f0,tgt_sr等各种key不存在的报错。你需要用ckpt选项卡最下面,手工或自动(本地logs下如果能找到相关信息则会自动)选择是否携带音高、目标音频采样率的选项后进行ckpt小模型提取,提取完在weights文件夹下会出现60+MB的pth文件,刷新音色后可以选择使用。
Q5:Connection Error.
也许你关闭了控制台(黑色窗口)。
Q6:WebUI弹出Expecting value: line 1 column 1 (char 0).
请关闭系统局域网代理/全局代理。
这个不仅是客户端的代理,也包括服务端的代理(例如你使用autodl设置了http_proxy和https_proxy学术加速,使用时也需要unset关掉)
Q7:不用WebUI如何通过命令训练推理
训练脚本:
可先跑通WebUI,消息窗内会显示数据集处理和训练用命令行;
推理脚本:
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/myinfer.py
例子:
runtime\python.exe myinfer.py 0 "E:\codes\py39\RVC-beta\todo-songs\1111.wav" "E:\codes\py39\logs\mi-test\added_IVF677_Flat_nprobe_7.index" harvest "test.wav" "weights/mi-test.pth" 0.6 cuda:0 True
f0up_key=sys.argv[1]
input_path=sys.argv[2]
index_path=sys.argv[3]
f0method=sys.argv[4]#harvest or pm
opt_path=sys.argv[5]
model_path=sys.argv[6]
index_rate=float(sys.argv[7])
device=sys.argv[8]
is_half=bool(sys.argv[9])
Q8:Cuda error/Cuda out of memory.
小概率是cuda配置问题、设备不支持;大概率是显存不够(out of memory);
训练的话缩小batch size(如果缩小到1还不够只能更换显卡训练),推理的话酌情缩小config.py结尾的x_pad,x_query,x_center,x_max。4G以下显存(例如1060(3G)和各种2G显卡)可以直接放弃,4G显存显卡还有救。
Q9:total_epoch调多少比较好
如果训练集音质差底噪大,20~30足够了,调太高,底模音质无法带高你的低音质训练集
如果训练集音质高底噪低时长多,可以调高,200是ok的(训练速度很快,既然你有条件准备高音质训练集,显卡想必条件也不错,肯定不在乎多一些训练时间)
Q10:需要多少训练集时长
推荐10min至50min
保证音质高底噪低的情况下,如果有个人特色的音色统一,则多多益善
高水平的训练集(精简+音色有特色),5min至10min也是ok的,仓库作者本人就经常这么玩
也有人拿1min至2min的数据来训练并且训练成功的,但是成功经验是其他人不可复现的,不太具备参考价值。这要求训练集音色特色非常明显(比如说高频气声较明显的萝莉少女音),且音质高;
1min以下时长数据目前没见有人尝试(成功)过。不建议进行这种鬼畜行为。
Q11:index rate干嘛用的,怎么调(科普)
如果底模和推理源的音质高于训练集的音质,他们可以带高推理结果的音质,但代价可能是音色往底模/推理源的音色靠,这种现象叫做"音色泄露";
index rate用来削减/解决音色泄露问题。调到1,则理论上不存在推理源的音色泄露问题,但音质更倾向于训练集。如果训练集音质比推理源低,则index rate调高可能降低音质。调到0,则不具备利用检索混合来保护训练集音色的效果;
如果训练集优质时长多,可调高total_epoch,此时模型本身不太会引用推理源和底模的音色,很少存在"音色泄露"问题,此时index_rate不重要,你甚至可以不建立/分享index索引文件。
Q11:推理怎么选gpu
config.py文件里device cuda:后面选择卡号;
卡号和显卡的映射关系,在训练选项卡的显卡信息栏里能看到。
Q12:如何推理训练中间保存的pth
通过ckpt选项卡最下面提取小模型。

[此处包含隐藏内容,如果需要查看请回复]