手把手教你声音克隆(so-vits-svc)
前言
随着ChatGPT的爆火,AIGC(人工智能生成内容)再一次走到人们眼前。尤其是在文本、图像生成领域,通过GPT-4、Midjourney等应用生成各种令人惊叹定的文本和图片。
但 AI 在生成方面的能力,可远非如此如此。
我用长约一个小时的音频数据,训练了一个 AI 音色转换模型,生成了这首歌曲,效果如下所示,大家可以在评论区留言猜猜是谁?
小半-AI合成
视频里所使用的技术是 so-vits-svc,是音频转音频,属于音色转换算法,支持正常的说话,也支持歌声的音色转换。下面具体介绍如何使用so-vits-svc。
一、准备工作
训练数据很关键,越多高质量的音频数据,效果越好,建议至少准备一个小时以上的音频。
显卡建议使用 N 卡,且显存 8G 以上。
我将项目所需要的代码、工具整理了出来,如有需要可以在评论区留言或者通过下方链接联系我。
当然,也可以直接用开源代码直接部署,地址如下:
GitHub - svc-develop-team/so-vits-svc: SoftVC VITS Singing Voice Conversion
二、环境安装
1.安装pytorch深度学习框架
需要安装pytorch
, torchaudio
, torchvision三个库
参考我之前写的https://yunlord.blog.csdn.net/article/details/129812705?spm=1001.2014.3001.5502
2.安装相关依赖
可以看到下载的项目中包含两个requirements.txt,以windows为例:
进入到项目中,通过prompt输入以下指令:
pip install -r requirements_win.txt
三、数据处理
训练音频、还有需要预测(或者说转换)的音频,都必须是人物的干声。换句话说,音频中不能包含背景音、伴奏、合声等,所以无论是训练和预测,都需要对数据进行处理。
1.提取人声
我们可以通过UVR5 这个软件实现伴奏与人声分离。
在 Windows 下可以直接使用,打开软件,按照如下配置:
运行即可分离人声和伴奏。
然后再按照如下配置,去除合声:
经过提取出的干净人声音频就可以用来训练。
2.切割音频
不过因为音频太长,不要超过三十秒,很容易爆显存,需要对音频文件进行切片。
我们通过 Audio Slicer这个工具实现音频切分 。
直接运行 slicer-gui.exe。
填写输入路径,填写输出路径,其它参数都默认即可,这样就会得到切分好的音频段。
建议切完之后逐段听下,将效果不好的删除,高质量的音频比数量多的效果更好。并且如果还有时长超过30s的可以通过写的python音频切割代码,进行截切。
在项目的 so-vits-svc-4.0/dataset_raw 目录下创建一个文件夹,比如我的是 wang_processed,将处理好的数据放到里面。
四、训练模型
在训练模型前,我们需要下好原始模型,并将其放到对应位置
将
checkpoint_best_legacy_500.pt放入hubert
文件夹下将D_0.pth和G_0.pth
放入logs/44k
目录下
1.数据预处理
接下来可以直接运行项目里面的1.数据预处理.bat。
这个脚本就是按照步骤,运行各个 py 脚本:
(1) 重采样至44100Hz单声道
python resample.py
(2)自动划分训练集、验证集,以及自动生成配置文件
python preprocess_flist_config.py
(3)生成hubert与f0
python preprocess_hubert_f0.py
处理完毕后,会在 datset/44k 下生成一个文件夹,里面的数据如下图所示:
可以删除 dataset_raw 文件夹了。
2.模型训练
直接运行项目中的2.训练.bat 即可开启训练。
python train.py -c configs/config.json -m 44k
如果显卡够好,可以增加 batch_size 提高训练速度,对应的配置文件在 configs/config.json 文件里。
这个训练时间很长,个人觉得如果数据较好的话,训练到30000轮以上就有一个不错的效果。
3.聚类模型训练
直接运行项目中的3.训练聚类模型.bat 即可开启训练,这个比较快,几分钟即可跑完。
这个主要是可以减小音色泄漏,使得模型训练出来更像目标的音色(但其实不是特别明显),但是单纯的聚类方案会降低模型的咬字(会口齿不清)(这个很明显),本模型采用了融合的方式,可以线性控制聚类方案与非聚类方案的占比,也就是可以手动在"像目标音色" 和 "咬字清晰" 之间调整比例,找到合适的折中点。
使用聚类前面的已有步骤不用进行任何的变动,只需要额外训练一个聚类模型,虽然效果比较有限,但训练成本也比较低。
- 训练过程:
- 执行
python cluster/train_cluster.py
,模型的输出会在logs/44k/kmeans_10000.pt
- 执行
- 推理过程:
inference_main.py
中指定cluster_model_path
inference_main.py
中指定cluster_infer_ratio
,0
为完全不使用聚类,1
为只使用聚类,通常设置0.5
即可
4.推理预测
(1)准备干声
准备一首歌的干声,干声可以按上述音频素材准备那样处理,通过UVR5提取一段不超过90s的干声素材。
(2)修改模型名
修改 app.py 里的这一行:
训练好的模型存放在了 logs/44k 目录下,这里改为训练好的模型地址,以及对应的配置文件,最后是第三步生成的 pt 文件路径。
(3)运行web
直接运行项目中的4.推理预测.bat。
程序会直接开启一个 webui,将开启的 url,直接复制到浏览器地址栏中打开即可。
就是一个简单的 Web 页面,里面的参数,可以直接使用默认的,放入一个音频,即可转换音色。
总结
勿用技术做恶,这个必须强调来说。本教程仅供交流学习使用。
随着AI技术的不断发展,各种难以想象的事情AI都能够做到,我们能做到的就是规范技术发展,用AI做一些对社会有益的事情。
欢迎大家在评论区留言猜猜是谁?
参考:
1.AI声音克隆教程 - 哔哩哔哩
2.so-vits-svc3.0 中文详细安装、训练、推理使用教程_Sucial的博客-CSDN博客
3.so-vits-svc/README_zh_CN.md at 4.0 · svc-develop-team/so-vits-svc · GitHub
手把手教你声音克隆(so-vits-svc)相关推荐
- 手把手教你用JAVA实现“语音合成”功能(文字转声音)标贝科技
手把手教你用JAVA实现"语音合成"功能(文字转声音)标贝科技 前言 什么是语音合成? 将文本转换成自然流畅的语音,本篇文章将介绍"实时在线合成"(文本长度不得 ...
- 手把手教你用JAVA调用Websocket实现“声音转换”功能(变声)标贝科技
手把手教你用JAVA调用Websocket实现"声音转换"功能(变声)标贝科技 前言 什么是声音转换? 基于深度学习和迁移学习技术,精准将原说话人的声音转换为目标说话人,同时保留原 ...
- 手把手教你用JAVA实现“声音复刻”功能(复刻你的声音)标贝科技
手把手教你用JAVA实现"声音复刻"功能(复刻你的声音)标贝科技 前言 什么是声音复刻? 使用少量的用户声音,短时间内快速为用户量身打造个人定制音色 一.内容太长不愿意看,直接使用 ...
- 手把手教你用JAVA实现“语音识别”功能(声音转文字)标贝科技
手把手教你用JAVA实现"语音识别"功能(声音转文字)标贝科技 前言 什么是语音识别? 将自然语音转换为文本信息,本篇文章将介绍"一句话识别"(对60秒以内的语 ...
- 【玩转华为云】手把手教你利用ModelArts识别偶像的声音
本篇推文共计2000个字,阅读时间约3分钟. 华为云-华为公司倾力打造的云战略品牌,2011年成立,致力于为全球客户提供领先的公有云服务,包含弹性云服务器.云数据库.云安全等云计算服务,软件开发服务, ...
- 电视html转vga没有声音,手把手教你排除HDMI转VGA常见故障
最近几年出产的笔记本.电玩.网络盒子等设备基本都配备了最新的HDMI高清接口,而对于仍然在使用旧电视.投影仪等只带有VGA接口设备的家庭,想要把带有HDMI接口的设备连接到大屏电视机上,只能通过HDM ...
- 手把手教你走进Hyperledger Fabric
现在,Blockchain是业内新的热门话题.但是,寻找良好的资源来学习这项引人入胜的技术并不是一件容易的事.为了让其他人更容易学习,我开始在区块链和分布式分类帐技术(DLT)平台领域开展一系列工作. ...
- AI:百度飞桨EasyDL多门视频课程,手把手教你如何定制高精度AI模型
AI:百度飞桨EasyDL多门视频课程,手把手教你如何定制高精度AI模型 目录 百度飞桨EasyDL多门视频课程,手把手教你如何定制高精度AI模型 百度飞桨EasyDL多门视频课程,手把手教你如何定制 ...
- 数字电路实验怎么接线视频讲解_家庭影院中音箱、功放、投影机、4K播放机不知道怎么连接?手把手教你...
家庭影院中音箱.功放.投影机.4K播放机不知道怎么连接?手把手教你 有不少用户收到从家庭影院器材之后,表示完全不会连接.翻看说明书也觉得头大,知识太多,然而却很难找到要点. 今天主要跟大家讲讲如何连接 ...
最新文章
- [转载]深入探索.NET框架内部了解CLR如何创建运行时对象
- PyQt5 技术篇-调用字体对话框(QFontDialog)获取字体,控件设置字体。
- 60%的安卓APP存在漏洞,平均每个有39个漏洞
- 为了30分钟配送,盒马工程师都有哪些“神操作”?
- MBR的Linux分区机制启动过程,linux系统启动流程(MBR)
- java for新循环_Java 8 新语法习惯 (for 循环的函数替代方案)
- HDFS数据管理与容错
- Windows cmd终端美化:Windows terminal背景图
- wps word文档生成目录的时候显示断裂会生成大纲怎么办_橙瓜码字小说自动生成器,对话描写,景物描写,外貌描写自动生成...
- SVN下载 1.11.0版本 win7 32位 安装文件及中文语言包
- TX-LCN优化介绍
- Centos 下解压和压缩rar文件
- java 6u45 no sni 2_sjscxz.taobao.com
- 金地农村土地承包经营权证打证系统
- python ppt转图片_ppt一键转图片和pdf
- Android 真正的3D Gallery
- 基于Spring+Spring MVC+Mybatis的B2C购物网站
- cvs update 用法_CVS客户端使用指南
- 美国计算机属于敏感专业吗,美国留学F1签证中最常见被check的14个敏感专业
- 【matlab 图像处理】邻域处理与模板运算
热门文章
- 阿里巴巴资深架构师熬几个通宵肛出来的Spark+Hadoop+中台实战pdf
- Win7/Win10禁用所有任务计划批处理
- DailyFi - 11.11| Tokemak C.o.R.E.2. 投票上线,Nansen 即将集成 Solana
- 线程和进程 并发和并行
- java中正则表达式的应用
- Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
- 老菜鸟看软件开发的管理 二
- Linux之lrzsz命令安装及使用
- 开启Mysql主从复制
- vmware workstation 9安装教程(图文)