我把我的声音训练成了AI模型,并让它唱了一首歌…(附超全面教程,你奶奶看了都会用) * { margin: 0; padding: 0; outline: 0; } body { font-family: “PingFang SC”, system-ui, -apple-system, BlinkMacSystemFont, “Helvetica Neue”, “Hiragino Sans GB”, “Microsoft YaHei UI”, “Microsoft YaHei”, Arial, sans-serif; line-height: 1.6; } .__page_content__ { max-width: 667px; margin: 0 auto; padding: 20px; text-size-adjust: 100%; color: rgba(0, 0, 0, 0.9); padding-bottom: 64px; } .title { user-select: text; font-size: 22px; line-height: 1.4; margin-bottom: 14px; font-weight: 500; } .__meta__ { color: rgba(0, 0, 0, 0.3); font-size: 15px; line-height: 20px; hyphens: auto; word-break: break-word; margin-bottom: 50px; } .__meta__ .nick_name { color: 576B95; } .__meta__ .copyright { color: rgba(0, 0, 0, 0.3); background-color: rgba(0, 0, 0, 0.05); padding: 0 4px; margin: 0 10px 10px 0; } blockquote.source { padding: 10px; margin: 30px 0; border-left: 5px solid ccc; color: #333; font-style: italic; word-wrap: break-word; } blockquote.source a { cursor: pointer; text-decoration: underline; } .item_show_type_0 > section { margin-top: 0; margin-bottom: 24px; } a { color: 576B95; text-decoration: none; cursor: default; } .text_content { margin-bottom: 50px; user-select: text; font-size: 17px; white-space: pre-wrap; word-wrap: break-word; line-height: 28px; hyphens: auto; } .picture_content .picture_item { margin-bottom: 30px; } .picture_content .picture_item .picture_item_label { text-align: center; } img { max-width: 100%; } .pay_subscribe_notice { margin: 30px 0; padding: 20px; background: fffbe6; border: 1px solid ffe58f; border-radius: 8px; } .pay_subscribe_badge { display: inline-block; padding: 4px 12px; background: faad14; color: fff; border-radius: 4px; font-size: 14px; font-weight: 500; margin-bottom: 12px; } .pay_subscribe_desc { font-size: 15px; line-height: 1.8; color: rgba(0, 0, 0, 0.7); margin-bottom: 12px; } .pay_subscribe_hint { font-size: 13px; color: rgba(0, 0, 0, 0.4); } .__bottom-bar__ { display: flex; justify-content: space-between; align-items: center; position: fixed; bottom: 0; left: 0; right: 0; height: 64px; padding: 8px 20px; background: white; box-sizing: border-box; border-top: 1px solid rgba(0, 0, 0, 0.2); } .__bottom-bar__ .left { display: flex; align-items: center; font-size: 15px; white-space: nowrap; } .__bottom-bar__ .right { display: flex; } .__bottom-bar__ .sns_opr_btn { display: flex; align-items: center; user-select: none; background: transparent; border: 0; color: rgba(0, 0, 0, 0.9); font-size: 14px; } .__bottom-bar__ .sns_opr_btn:not(:last-child) { margin-right: 16px; } .__bottom-bar__ .sns_opr_btn > img { margin-right: 4px; }

我把我的声音训练成了AI模型,并让它唱了一首歌…(附超全面教程,你奶奶看了都会用)

原创 数字生命卡兹克 数字生命卡兹克 2023-05-01 17:07 天津

原文地址: https://mp.weixin.qq.com/s/bBqGwsDgStTGTQs_ha03xg

我天生五音不全,对于所有需要唱歌的场合我都是抗拒的,因为只有一片笑声。

我一直有一个梦想,就是用我的声音,唱一首不跑调的歌。

得益于AI的井喷式发展,我的愿望实现了。

这是我的声音。

然后我把我的声音,训练成了模型,并让它唱了一首我非常喜欢的《富士山下》。

当梦想变成现实,当不需要我再开口就有我的声音,我的一切都变成模型被复刻下来。好像我也永远停在了这个时间点。

变成了真正的,数字生命。

我使用的项目是So-VITS-SVC,目前质量最高还原度最逼真的AI声音项目。

这里做个简单的小科普。

AI音频远没有AI绘图和AI文本技术成熟。目前主流有两种路线,SVC和TTS。

**SVC(Singing Voice Conversion),歌声转换,也就是类似变声器的玩意,抽取一个人的声音作为训练数据,训练一个神经网络模型,学习他的声线;然后用模型在目标歌曲上做推理,即可实现用自己的声线唱目标歌曲。**目前主要是两个项目顶着,So-VITS-SVC和Diff-SVC,我用的就是前者。然而可惜的是,So-VITS-SVC项目已经于4月23号正式停止维护了。

TTS(Text-to-Speech),文本生成音频,这玩意应用现在极其成熟,应用端各种什么微软腾讯都玩的66的。前几天大火的Bark项目就是TTS,而定制自己的声音TTS项目PaddleSpeech也是极其简单,在百度飞浆上可以直接跑,属于有手就行那种。后面我也会出一个TTS的PaddleSpeech教程,非常简单。

AI生成领域,四大模态:文案、图片、声音、视频。

文案和图片已经被完全攻陷,声音已经开始崭露头角,而视频仍然在坚守着属于人类的最后一块堡垒。

话不多说,直接开始我们的AI声音教程。

整个AI声音教程相比AI绘图会比较难一些,所以文章可能会比较长,我尽量写的细一些,让你奶奶来了都会自己训练模型~

整体大概需要4步。

  1. 准备声音数据集。

  2. 租云算力,上传数据集。

  3. 在云上训练模型。

  4. 本地进行推理模型重绘歌曲。

当然,万物起始,先下载傻瓜一站式整合包,关注我,回复S就有了,此处感谢B站大佬@羽毛布団制作的的开源整合包,AI绘图有秋叶,AI声音有羽毛,都是一等一的大佬!

一. 准备数据集

声音模型对数据集的要求比较苛刻,因为声音越优质,越干净,效果一定越好。所以没有杂音、没有乱七八糟的混响等等的干声是必须的,而且音域越广越好。

**所以如果你想训练你自己的声音,尽量是1小时以上的无杂音的纯人声,WAV格式。**可以使用手机、电脑录音等等,直接录1段或者多段,都行,然后转成WAV格式。

再使用整合包里的工具Audio Slicer(音频切分)将其剪裁成10秒左右的分段文件,因为你1个小时的文件直接拿去训练是必爆的,所以我们需要将他拆成10秒左右的1小段1小段,我们把Audio Slicer(音频切分)下载下来,解压后打开Slicer-gui。

然后把Minimun Length那一项改成8000,把我们需要处理的音频直接拖到左边窗口,在右下角选择输出路径。同时此处注意,任何路径和文件命名,都一定不要带有中文和特殊的比如空格之类的字符!!!

扔进去以后,我们直接点最右下角的Start。速度非常块,十几秒就切割完了。我们去我们选择的输出路径就能看到我们的文件。

然后我们选择时长排序,把低于2秒的,超过15秒的都给删了。数据集就算是处理完毕了~

当然,我相信任何人弄这一步都肯定很麻烦,毕竟玩之前还特么先得自己录1小时,人没了。所以我也为大家在整合包里准备了1个优质数据集,来自原神派蒙的近2小时的语音文件,我已经处理完了。打开即用。关注我回复S就有了(注:派蒙的数据集下载解压后,上传到你的阿里云盘,第二步你就知道了)。希望大家能让大家最快速度感受AI声音的魅力~

二. 租云算力,上传数据集

第二步当然就是开始我们的训练了,训练模型挺烧显卡的,而且大多人的显卡达不到训练的地步,所以我们直接上云,花个十几块钱,轻松便捷。

这里我推荐https://www.autodl.com/,目前非常便宜的云算力平台,注册好账号以后,自己充值,建议冲30~50左右,别太紧巴。然后我们点击控制台 - 容器实例,来到这个页面,再点击租用新实例(实例其实就是显卡的意思)

进到这个页面以后,就是租显卡了,直接选北京C区,找到V100 32G,租1张,记住,如果没有V100 32G,就刷新,刷到有为止,北京区的V100 32G,能把你后续训练的报错概率降到最低!

选中后,往下拖,找到社区镜像,点击。

在下面的输入框中输入so-v,找到后缀是v10的,选中,然后点立即创建,就能看到你的算力已经租好了。第一次创建时间会久一些,等等。

等到创建完毕,状态已经是运行中后,点击AutoPanel,把我们准备好的数据集传到租的服务器上。

进来以后,选择公网网盘,我们用网盘来当桥梁,第一次会先让你设置一个密码,随便设一个你自己能记得的就行。

然后此处我们选择阿里云盘来当桥梁,你懂的,不限速,而且百度网盘说实话在跟服务器的对接上太麻烦了。。。**如果你是用的自己的数据集,就把你自己的数据集传到你的阿里云盘上,如果用我的派蒙的例子,就直接把我在阿里云盘传的数据集解压然后上传到你的阿里云盘上就行,**然后用你的手机阿里云盘扫码登录。

登录成功以后,就能看到我们的文件了,点击要下载的数据集文件夹,我们的服务器就会开始下载了,这个地方下载确实会比较慢,需要等几分钟,大家别急,撒泡尿去遛遛弯,看看剧,一会就好。

下载完了以后,我们就直接把这个页面关了就行,给服务器上传数据,算是正式完成,接下来第3步,我们正式开始训练我们的模型~

三. 在云上训练我们的模型

回到我们的控制台页面,点击JupyterLab

进入到一个文档页面,这个页面看着复杂,但是其实项目作者已经都整合好了,你只要傻瓜式的无脑点击下一步就可以啦~我们先点击下面的第1步这个区域,看到前面的蓝色横线跑到了这,然后我们再点击左上角的运行按钮。

弹出这么一个框以后,说明运行完毕。

我们直接点击,然后点击左上角这个圆圈,把这个文件丢弃掉,不用管了。

接下来我们进入autodl-tmp,就能看到我们的数据集在这里面。

我们剪切它,把它放到刚才跟它一起在autodl-tmp的so-vits-svc4/dataset_raw文件夹下,这样咱们的数据集就放在了正确的位置了。

接下来我们回到so-vits-svc4目录下,打开这个文件README-v4.ipynb,还需要点几个小步骤,把数据集变成能训练模型的规范。

就能看到跟之前一样的页面,这次我们下滑,找到将数据重新采样至44100hz,一样,点击区域后,再点击左上角运行。

当看到小蓝条下移,右上角的实心圆变空心之后,说明采样率处理已经完成,我们继续点击下一个需要运行的区域,划分数据集、验证集、测试集以及生成配置文件。跟之前一样,选中后,点击左上角运行。

速度非常快,几秒钟就把数据集给划分完毕。同时也生成了一个config.json这个配置文件。

我们按照config/config.json这个路径打开配置文件,把 “learning_rate”改成 0.0004,把 “batch_size”改成24,把 “keep_ckpts”改成10,然后按Ctrl+S保存!!!

learning_rate和batch_size这两个参数可以理解为训练速度和训练质量,因为我们用的V100 32G显卡,这块直接固定死数值就可以,keep_ckpts是保存多少个模型,因为声音模型训练是不会自动停止的,每几千步就会给你保存一个模型,所以我们可以让他自动保存最新的10个模型让我们来选一个最好的。

接着回到我们刚才的步骤文件,执行准备数据集的最后一步操作!生成hubert和f0文件老规矩,点击区域,然后左上角运行即可这步会慢很多,需要几分钟时间,耐心等待。

看到进度条100%后,就证明完事啦!所有的数据集准备工作都做完了!接下来,我们要正式开始训练啦!!

我们一定要保证我们正在so-vits-svc4目录下(一定要注意!!!),然后复制训练这个区域里的这行代码。

复制完以后,再点击右上角的这个新建页面按钮。

再点击这个终端。

把我们刚才复制的训练代码给粘贴进去,敲一下回车,运行!训练开始!

然后你就会看到各种眼花缭乱的看不懂的文字,没关系,看到有这种数字,就说明模型正在训练中了,比如我图中这个,已经训练了2轮了,第一轮花费101s,第2轮花费57s。在第7轮的时候终于训练了200步了。我们一般评价AI声音模型,都是按步数评价,而不是轮数。

然后,我们等着就好毕竟是在云上训练的嘛,我们可以直接把网页叉了,睡一觉,明早再来,或者开开心心去玩去丝毫不会影响训练。等到10000步的时候,我们再将模型取出来,进行本地推理~

四. 本地进行推理模型重绘歌曲

我们训练的模型会保存在autodl-tmp/so-vits-svc4/logs/44k这个文件夹里,D_XXXXX和D_XXXXX就是我们的模型,XXXXX是步数,比如G_8000就是训练到8000步的时候保存的模型。每800步就会保存一个模型。

我们直接右键下载,把他们拿到本地来,解压我们在最开头下载的整合包,放到同一个目录下So-VITS-SVC\logs\44k,根目录不太一样没有关系,云端叫so-vits-svc4,我们本地解压出来的叫So-VITS-SVC,无所谓,后面的子路径是一致的就OK。

这里我下载了6个模型,从7200步到18400步的,都下载下来听听试试,除了把模型放进来以外,我们还需要把之前在云上修改的config/config.json文件给下载到本地,把本地的So-VITS-SVC\configs里面的那个config.json文件给替换掉。保持统一。

接下来就是激动人心的时刻啦~我们要进行本地歌曲重绘了。

声音重绘的原理是,用模型的音色替换人声,所以正常我们想替歌声的话,是需要把伴奏和人声分离,用模型推理替换人声,把推理完的人声文件和伴奏合在一起,形成一首完整的歌。

这里给大家推荐一个我认为目前最牛逼的分离工具-UVR5,也在整合包里了。

直接先安装UVR5,然后解压模型包,把模型包里的文件解压出来,复制粘贴到Ultimate Vocal Remover\models文件夹里。这样UVR5就算安装好了。

音乐的获取推荐大家直接使用QQ音乐,下载以后,用https://demo.unlock-music.dev/这个小工具去解锁~

然后打开我们的UVR5,分为两步,先去伴奏,再去混响,提炼出一个干干净净的人声~

我们先去伴奏,input我们刚刚解锁的歌曲,这几个参数按下图设置。然后直接start就OK。

成功了以后,我们去到我们设置的输出目录下,就能看到两个文件,伴奏和人声已经分离出来了,但是人声还会带一些混响,我们需要把混响也去了,得到一个干干净净最完整的人声。

于是我们回到UVR5,把刚转出来的Vocals文件再导入,按下图参数设置,去掉混响。再点击Start。

OK,这时候咱们就得到了一个极其干净的人声。

但是这个人声歌曲一般都有好几分钟,直接推理必爆显存。所以推荐用AU啥的给切分一下,我的显卡不太行,就给切成了8段。

最后,咱们打开So-VITS-SVC\启动webui.bat这个文件,启动我们的WebUI,这玩意跟SD极其相似。

第一次运行会需要稍微等一会会,然后他就会自动给你打开网页了。

图形化界面咱们就非常熟悉啦,模型选择里就选我们的刚才下载到本地的声音模型文件。增强也勾上就行,这个能有效提高你的模型推理效果。

然后我们加载模型,几秒钟就会反馈,加载成功,你的声音模型也出来了。

然后上传你需要替换的声音文件。把F0均值滤波勾上,第二个数值无脑输入0.5,因为有的训练集音域不够广,导致训练出来的模型高音部分偶尔会有哑音或者卡痰的情况,勾上F0均值滤波以后效果会好很多。

然后我们点击最后一步,音频转化,你就能看到你梦寐以求的歌声啦!!!

都推理完成以后,最后的歌曲合成,用AU、剪映什么的都可以,这块我就不再赘述了。

最后,当项目完事,记得你的云算力还在烧钱哦,不用的话,就直接先点关机,然后点击更多,释放实例~

写在最后

这篇教程花费了我太多的心血,前期自己实验,即使已有大佬们的点拨,也还是踩了无数的坑,花费了将近100个小时。现在这篇教程,是我认为现在的SVC项目,最优解。

整个项目的傻瓜一站式整合包和案例数据集,关注我,回复S就有了。

AI歌姬现在非常火,B站遍地都是AI歌声,AI孙燕姿,AI周杰伦。等等。

在初音未来、洛天依之后,AI音乐的时代这次真正的到来了。

现在的繁荣,我觉得仅仅只是序章,AI声音和AI绘图,必将达到同一高度。

至于歌手们会被替代吗?

这个问题我觉得跟AI绘图一样,初级插画师会被替代吗?会。高级插画师会被替代吗?不会。

我很喜欢西部世界的一句台词:

Evolution forged the entirety of Sentient life on this planet using only one tool--- the mistake.

进化塑造这个星球上有感情和知觉的所有生命体,使用的唯一工具,就是错误。

**AI太过于完美了。他们在绘图在作曲上,工整、精确,但是过分的完美无瑕,反而少了想象空间。
**

所以这就是为什么,断臂维纳斯,是最伟大的艺术品之一。

以上,创作不易,有用的话请点个关注并给个星标,感恩。

数字生命卡兹克

![](data:image/svg+xml,%3Csvg xmlns=‘http://www.w3.org/2000/svg’ width=‘24’ height=‘24’ viewBox=‘0 0 24 24’%3E%3C!— Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE —%3E%3Cg fill=‘none’ stroke=‘%23888888’ stroke-linecap=‘round’ stroke-linejoin=‘round’ stroke-width=‘2’%3E%3Cpath d=‘M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0’/%3E%3Ccircle cx=‘12’ cy=‘12’ r=‘3’/%3E%3C/g%3E%3C/svg%3E) 阅读![](data:image/svg+xml,%3Csvg width=‘25’ height=‘24’ viewBox=‘0 0 25 24’ fill=‘none’ xmlns=‘http://www.w3.org/2000/svg’%3E%3Cpath fill-rule=‘evenodd’ clip-rule=‘evenodd’ d=‘M16.154 6.797l-.177 2.758h4.009c1.346 0 2.359 1.385 2.155 2.763l-.026.148-1.429 6.743c-.212.993-1.02 1.713-1.977 1.783l-.152.006-13.707-.006c-.553 0-1-.448-1-1v-8.58a1 1 0 0 1 1-1h2.44l1.263-.03.417-.018.168-.015.028-.005c1.355-.315 2.39-2.406 2.58-4.276l.01-.16.022-.572.022-.276c.074-.707.3-1.54 1.08-1.883 2.054-.9 3.387 1.835 3.274 3.62zm-2.791-2.52c-.16.07-.282.294-.345.713l-.022.167-.019.224-.023.604-.014.204c-.253 2.486-1.615 4.885-3.502 5.324l-.097.018-.204.023-.181.012-.256.01v8.218l9.813.004.11-.003c.381-.028.72-.304.855-.709l.034-.125 1.422-6.708.02-.11c.099-.668-.354-1.308-.87-1.381l-.098-.007h-5.289l.26-4.033c.09-1.449-.864-2.766-1.594-2.446zM7.5 11.606l-.21.005-2.241-.001v8.181l2.45.001v-8.186z’ fill=‘%23000’/%3E%3C/svg%3E) 赞 ![](data:image/svg+xml;charset=utf8,%3Csvg xmlns=‘http://www.w3.org/2000/svg’ width=‘24’ height=‘24’ viewBox=‘0 0 24 24’%3E %3Cg fill=‘none’ fill-rule=‘evenodd’%3E %3Cpath d=‘M0 0h24v24H0z’/%3E %3Cpath fill=‘%23576B95’ d=‘M13.707 3.288l7.171 7.103a1 1 0 0 1 .09 1.32l-.09.1-7.17 7.104a1 1 0 0 1-1.705-.71v-3.283c-2.338.188-5.752 1.57-7.527 5.9-.295.72-1.02.713-1.177-.22-1.246-7.38 2.952-12.387 8.704-13.294v-3.31a1 1 0 0 1 1.704-.71zm-.504 5.046l-1.013.16c-4.825.76-7.976 4.52-7.907 9.759l.007.287c1.594-2.613 4.268-4.45 7.332-4.787l1.581-.132v4.103l6.688-6.623-6.688-6.623v3.856z’/%3E %3C/g%3E%3C/svg%3E) 分享 ![](data:image/svg+xml;charset=utf8,%3Csvg xmlns=‘http://www.w3.org/2000/svg’ xmlns:xlink=‘http://www.w3.org/1999/xlink’ width=‘24’ height=‘24’ viewBox=‘0 0 24 24’%3E %3Cdefs%3E %3Cpath id=‘a62bde5b-af55-42c8-87f2-e10e8a48baa0-a’ d=‘M0 0h24v24H0z’/%3E %3C/defs%3E %3Cg fill=‘none’ fill-rule=‘evenodd’%3E %3Cmask id=‘a62bde5b-af55-42c8-87f2-e10e8a48baa0-b’ fill=‘%23fff’%3E %3Cuse xlink:href=‘%23a62bde5b-af55-42c8-87f2-e10e8a48baa0-a’/%3E %3C/mask%3E %3Cg mask=‘url(%23a62bde5b-af55-42c8-87f2-e10e8a48baa0-b)‘%3E %3Cg transform=‘translate(0 -2.349)‘%3E %3Cpath d=‘M0 2.349h24v24H0z’/%3E %3Cpath fill=‘%23576B95’ d=‘M16.45 7.68c-.954 0-1.94.362-2.77 1.113l-1.676 1.676-1.853-1.838a3.787 3.787 0 0 0-2.63-.971 3.785 3.785 0 0 0-2.596 1.112 3.786 3.786 0 0 0-1.113 2.687c0 .97.368 1.938 1.105 2.679l7.082 6.527 7.226-6.678a3.787 3.787 0 0 0 .962-2.618 3.785 3.785 0 0 0-1.112-2.597A3.687 3.687 0 0 0 16.45 7.68zm3.473.243a4.985 4.985 0 0 1 1.464 3.418 4.98 4.98 0 0 1-1.29 3.47l-.017.02-7.47 6.903a.9.9 0 0 1-1.22 0l-7.305-6.73-.008-.01a4.986 4.986 0 0 1-1.465-3.535c0-1.279.488-2.56 1.465-3.536A4.985 4.985 0 0 1 7.494 6.46c1.24-.029 2.49.4 3.472 1.29l.01.01L12 8.774l.851-.85.01-.01c1.046-.951 2.322-1.434 3.59-1.434 1.273 0 2.52.49 3.472 1.442z’/%3E %3C/g%3E %3C/g%3E %3C/g%3E%3C/svg%3E) 推荐 ![](data:image/svg+xml,%3Csvg width=‘25’ height=‘24’ viewBox=‘0 0 25 24’ fill=‘none’ xmlns=‘http://www.w3.org/2000/svg’%3E%3Cpath d=‘M22.242 7a2.5 2.5 0 0 0-2.5-2.5h-14a2.5 2.5 0 0 0-2.5 2.5v8.5a2.5 2.5 0 0 0 2.5 2.5h2.5v1.59a1 1 0 0 0 1.707.7l1-1a.569.569 0 0 0 .034-.03l1.273-1.273a.6.6 0 0 0-.8-.892v-.006L9.441 19.1l.001-2.3h-3.7l-.133-.007A1.3 1.3 0 0 1 4.442 15.5V7l.007-.133A1.3 1.3 0 0 1 5.742 5.7h14l.133.007A1.3 1.3 0 0 1 21.042 7v4.887a.6.6 0 1 0 1.2 0V7z’ fill=‘%23000’ fill-opacity=’.9’/%3E%3Crect x=‘14.625’ y=‘16.686’ width=‘7’ height=‘1.2’ rx=’.6’ fill=‘%23000’ fill-opacity=’.9’/%3E%3Crect x=‘18.725’ y=‘13.786’ width=‘7’ height=‘1.2’ rx=’.6’ transform=‘rotate(90 18.725 13.786)’ fill=‘%23000’ fill-opacity=’.9’/%3E%3C/svg%3E) 留言