泰裤辣!!!手摸手教学,如何训练一个你的专属AI歌姬~
最近在做AIGC的项目,不过是与图片相关的,现在的模型效果可比前几年图片替换效果好多了。之前尝试过用 faceswap 工具来进行人脸替换的,具体可以参看下我之前的这篇文章:https://blog.csdn.net/sinat_26918145/article/details/79591717
现代的模型对于图生图的支持效果已经非常好了,相信对于美术行业,这是一场影响很深远的变革。也许我们正站在一个新的时代交叉路口,可能多年后回忆起当下的一瞬间,才后知后觉我们经历了一段什么样的时代开端。
好了,回到主题,这一篇文章主要是介绍如何使用音频模型,转换成你想要的歌手声音,得益于AI孙燕姿的火爆全网,让我也迫切想尝试一下 AIsong 歌曲转换。
目前来说比较火的开源 SVC 主要有以下几种:
- rvc: https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI
- diff-svc: https://github.com/prophesier/diff-svc
- so-vits-svc: https://github.com/svc-develop-team/so-vits-svc
语音转换的目标是将源语音转换为目标语音,保持内容不变。提出了自监督表示学习用于语音转换
离散内容编码表示会丢失一些语言内容,导致发音不准确。为此,提出了通过预测离散单位分布学习的软语音单位。通过建模,软语音单位捕捉更多的内容,提高了转换语音的效果。

在语音转换系统架构中,离散内容编码主要包含两个部分的实现:
- 离散内容编码器:将音频特征聚类,生成一系列离散的语音单位序列
- 软内容编码器:被训练用于预测离散语音单位
除此之外Acoustic model将离散/软语音单位转换为目标声谱图。 vocoder语音合成器将声谱图转换为音频波形。
废话不多说,前期铺垫了这么多,我们下面直接开始操作~
一、前期准备
刚开始模型训练前,我们需要搜集大量的目标人物的音频素材,如果是需要以你自己声音为基础的转换模型,则需要录制你自己的声音。这里的素材多少会直接影响到你模型训练的质量,一般建议提供 100 分钟以上的人声素材。
如果不是自己的声音,建议可以去网上搜集需要的人声音频。我这边使用的是阿B上的视频素材,这里可以使用这里推荐的工具(传送门),直接下载对应的视频or音频,非常方便~
这里我下载了差不多100分钟的音频

准备好音频素材后,需要对音频文件进行人声和背景音的分离,因为背景音对于模型的训练有干扰,单纯的人声可以让模型的声音效果和目标更拟合。这里使用到的工具是 demucs
安装:
pip install -U demucs
分离人声和背景音
demucs "音频文件地址" -o "输出文件目录" -n mdx_extra --two-stems=vocals
生成后输出文件目录有两个文件,一个是人声,一个是背景音

把所有的音频文件都进行人声分离后,接下来就要对音频进行切片处理了,因为人声素材文件的大小过大会影响模型训练的速度,所以我们还需要对其切片,将它变成一个比较小的人声切片文件。这里使用的工具是 audio-slicer
https://github.com/openvpi/audio-slicer
git clone https://github.com/flutydeer/audio-slicer.git
cd ./audio-slicer
pip install -r requirements.txt
python ./slicer-gui.py

二、模型训练
模型训练主要是使用的是 https://github.com/svc-develop-team/so-vits-svc/tree/4.1-Stable
你可以在自己的显卡上训练,也可以在云端上进行锻炼。因为我本机电脑的显卡不行,所以使用云端的服务器来进行训练。参考了很多教程,感觉很多博主都推荐 AutoDL 这个平台,所以我们也使用这个,避免走弯路~
这里租用一台 v100 的算力服务器

镜像这里选择:

选择 v3 或者 v4 模型都可以

买完之后进入控制台,接下来就是使用网盘把我们处理过的人声素材导入到实例容器中

点击“AutoPanel”进入控制台


可以先把训练数据上传到阿里云,在这里用阿里云app扫码登录。对需要上传到容器内的训练集文件夹,点击下载,然后就可以自动同步到容器内的这个文件夹目录里的,整个过程耗时会稍微久一点。

至此,我们的数据集就全部准备好了,下面就准备训练了。
二、模型训练
回到我们的控制台,点击 JupyterLab 进入容器内

进入 JupyterLab 后,打开项目内的 README-v4.ipynb ,可以看到模型作者很细致的将模型训练每一步都做成了可视化操作的命令步骤解析。第一步就是我们的训练集从 /dataset 文件夹目录,搬运到 /dataset_raw。只需要鼠标点击模型作者第一步 [1]: 所标识的python命令,然后点击运行按钮即可,这个点击后需要小小等待一会,它开始运行时命令下面会有相关的输出提示。

在此文件夹目录下,数据集就安放正确了。比如你训练数据集的文件夹名称是 Paimondata 则会在此目录下生成一个同样的目录,其实你可以直接把数据集导入到这里也行,不用网盘。

在文档中也清楚的说明了,文件夹名称就是你训练的人声名字,可以放多个你想要训练的声音目标

第二步就是对数据集进行采样至 44100hz。第三步则是进行自动划分训练集。这两部分也是一样,按运行按钮执行。

接下来就是对配置文件 /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,这里是后面推理的时候添加的辅助选项,为了修饰推理出来的音频更加顺滑

如果你是第一次训练,则无需进行清理,直接跳到训练这一步就行了,不过在训练这里,按照文档注释的,使用终端来进行训练命令的执行。


注意一下,这里需要在项目的当前目录才能执行,如果不是项目目录可以
cd ~/autodl-tmp/so-vite-svc

出现日志后就说明开始训练了,可以看到每训练200步,train.log 日志就记录相关的日志,也就是控制台中的输出。没当800步的时候就会保存一个模型,工程会默认保存最新的十个模型,模型目录如下

然后我们可以等待它的模型了,一般达到10000步的时候效果会比较好一些,这个过程差不多五个小时,这时候咱们可以去吃饭喝茶遛弯干别的事情了,哪怕关掉电脑都行,训练命令并不会因为与 autodl 的网页连接中断而停止,所以不用担心。
三、声音推理

python inference_main.py -m "logs/44k/G_{模型编号}.pth" -c "configs/config.json" -n {raw目录下需要转换的人声文件名} -t 0 -s {上面你数据训练集的文件夹名称也就是文档里的speaker name}
关于推理参数,文档有很详细的描述
#用脚本推理
!python inference_main.py
#推理结果会存放在so-vits-svc/results文件夹
#如果不编辑推理脚本,参数直接附加在上面的指令后
#如 !python inference_main.py -m "logs/44k/G_30400.pth" -c "configs/config.json"...
#每个参数需要用""括起来
#必填参数
#-m, --model_path:模型路径。
#-c, --config_path:配置文件路径。
#-n, --clean_names:wav 文件名列表,放在 raw 文件夹下。
#-t, --trans:音高调整,支持正负(半音)。
#-s, --spk_list:合成目标说话人名称。
#可填参数
#-a, --auto_predict_f0:语音转换自动预测音高,转换歌声时不要打开这个会严重跑调。
#-cm, --cluster_model_path:聚类模型路径,如果没有训练聚类则随便填。
#-cr, --cluster_infer_ratio:聚类方案占比,范围 0-1,若没有训练聚类模型则填 0 即可。
所有的推理产出都在 result 文件夹中



最后的最后让我们一起来听一下成片吧~~~
链接: https://pan.baidu.com/s/1lwCvlZc91UYmPmtICksLIQ 提取码: dezw
泰裤辣!!!手摸手教学,如何训练一个你的专属AI歌姬~的更多相关文章
- 手摸手教你微信小程序开发之自定义组件
前言 相信大家在开发小程序时会遇到某个功能多次使用的情况,比如弹出框.这个时候大家首先想到的是组件化开发,就是把弹出框封装成一个组件,然后哪里使用哪里就调用,对,看来大家都是有思路的人,但是要怎样实现 ...
- 手摸手,和你一起学习 UiPath Studio
学习 RPA 的路上坑比较多,让我们手摸手,一起走…… 以下是一些学习 UiPath 和 RPA 的资源, 拿走不用谢! UiPath Studio 中文文档 机器人流程自动化其实是很好的概念和技术, ...
- 【转】手摸手,带你用vue撸后台 系列二(登录权限篇)
前言 拖更有点严重,过了半个月才写了第二篇教程.无奈自己是一个业务猿,每天被我司的产品虐的死去活来,之前又病了一下休息了几天,大家见谅. 进入正题,做后台项目区别于做其它的项目,权限验证与安全性是非常 ...
- iOS动画进阶 - 手摸手教你写 Slack 的 Loading 动画
如果移动端访问不佳,可以访问我的个人博客 前几天看了一篇关于动画的博客叫手摸手教你写 Slack 的 Loading 动画,看着挺炫,但是是安卓版的,寻思的着仿造着写一篇iOS版的,下面是我写这个动画 ...
- 【转】手摸手,带你用vue撸后台 系列三(实战篇)
前言 在前面两篇文章中已经把基础工作环境构建完成,也已经把后台核心的登录和权限完成了,现在手摸手,一起进入实操. Element 去年十月份开始用vue做管理后台的时候毫不犹豫的就选择了Elemen, ...
- 【转】手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)
前言 做这个 vueAdmin-template 的主要原因是: vue-element-admin 这个项目的初衷是一个vue的管理后台集成方案,把平时用到的一些组件或者经验分享给大家,同时它也在不 ...
- 【转】手摸手,带你用vue撸后台 系列一
前言 说好的教程终于来了,第一篇文章主要来说一说在开始写业务代码前的一些准备工作吧,但这里不会教你webpack的基础配置,热更新怎么做,webpack速度优化等等,有需求的请自行google. 目录 ...
- 原创 | 手摸手带您学会 Elasticsearch 单机、集群、插件安装(图文教程)
欢迎关注笔者的公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site/ ...
- 浅谈Java中的Condition条件队列,手摸手带你实现一个阻塞队列!
条件队列是什么?可能很多人和我一样答不出来,不过今天终于搞清楚了! 什么是条件队列 条件队列:当某个线程调用了wait方法,或者通过Condition对象调用了await相关方法,线程就会进入阻塞状态 ...
- 手摸手教你让Laravel开发Api更得心应手
https://www.guaosi.com/2019/02/26/laravel-api-initialization-preparation/ 1. 起因 随着前后端完全分离,PHP也基本告别了v ...
随机推荐
- 解析极限编程-拥抱变化_V2
作者:Kent Beck 第一章 极限编程定义 XP(极限编程):extreme programming,适用于中小型团队在需求不明确或迅速变化的情况下进行软件开发的轻量级方法学. 第二章 学习开车 ...
- 最新 umi4-max 如何使用 webpack5 联邦模块
新项目用 umi4-max 搭建,部分功能想要使用其他项目的功能,不想重新开发,想到了使用 webpack5 的联邦模块,可以直接引用其他项目代码来实现共享代码. 理想很美好,现实很残酷.直接按照 w ...
- ChatGPT 设计游戏剧情 | 基于 AI 5 天创建一个农场游戏,完结篇!
欢迎使用 AI 进行游戏开发! 在本系列中,我们将使用 AI 工具在 5 天内创建一个功能完备的农场游戏.到本系列结束时,您将了解到如何将多种 AI 工具整合到游戏开发流程中.本文将向您展示如何将 A ...
- node.js解决跨域方案
服务端 1.通过使用cors模块解决跨域问题 var express = require('express') , cors = require('cors') , app = express(); ...
- 第一推动|2023年VSCode插件最新推荐(54款)
本文介绍前端开发领域常用的一些VSCode插件,插件是VSCode最重要的组成部分之一,本文列出了我自己在以往工作经验中积累的54款插件,个人觉得这些插件是有用或有趣的,根据它们的作用,我粗略的把它们 ...
- kubernetes 的TCP 数据包可视化
kubernetes 的TCP 数据包可视化 介绍 k8spacket是用 Golang 编写的工具,它使用gopacket第三方库来嗅探工作负载(传入和传出)上的 TCP 数据包.它在运行的容器网络 ...
- [Excel/Word]常用函数与技巧
1 Excel case1 同时多列筛选 同时筛选多列: 选中首行(属性行)>筛选>(筛选目标的N列) case2 IF/OR/AND/COUNTIF语句 =IF(condition,co ...
- SQL concat_ws, collect_set, 和explode合并使用
1. 背景 有一个这样的数据集:字段和字段的值是两列 目的是将这个数据转换成规整的一个特征是一列的数据: 2. 做法 第一步:先造出列 select ucid ,CASE WHEN type ='性别 ...
- Vulnhub Joy Walkthrough
Recon 这台靶机对枚举的要求较高,如果枚举不出有用的信息可能无法进一步展开,我们首先进行普通的扫描. ┌──(kali㉿kali)-[~/Labs/Joy/80] └─$ sudo nmap -s ...
- 彻底解决VSCode无法远程ssh,提示The remote host may not meet VS Code Server‘s prerequisites for glibc and libstdc++
彻底解决VSCode无法远程ssh,提示The remote host may not meet VS Code Server's prerequisites for glibc and libstd ...