把自己变成初音未来!Diffsinger折腾记录

1155 字
6 分钟
把自己变成初音未来!Diffsinger折腾记录

前言#

又是東雪蓮!B站上的Diffsinger Ai東雪蓮让我发现了Diffsinger这个项目

众所周知,東雪蓮作为罕见,当然是不唱中文歌的

而Diffsinger默认词典又需要大量的中文干声素材

所以我猜测B站上那个视频用的是语音数据

因为不是干声,也就不会有广阔的音域和转音

那么那个视频里的电也就合情合理了

虽然说SVS类型的Ai应该尽可能接近真人才对(像ACE Studio,SynthesizerV那种)

但电音却有种VOCALOID的感觉,倒也不是坏事

一开始我是打算接着用我兄弟的数据集的,但问题来了:

diff项目需要大量的数据集(该项目建议4-5小时)我兄弟的语音数据仅仅只有20分钟

有人说:我可以用Sovits Diff-svc把开源数据集(Opencpop那种)换成兄弟的声音啊?

是,但只要有音色泄露的问题存在出来的声音就不会像本人,况且这样套娃音质是不可控的

所以我兄弟得等以后了

那我又想折腾,就只能迫害我自己了

正片开始#

考虑到听自己唱歌实在太处刑了,所以我决定也先用说话数据试试看

这里有必要列一下我的麦:Blue Snowball

虽然不是高端麦克风,但是折腾Ai足矣

准备数据集#

我认为流程应该是:

前期录制——匹配响度——降噪——切片——标注

前期录制#

内容很简单,就是我找各种中文念出来,语速平缓,吐字清晰

总共大概半个小时

匹配响度#

这里选择Au,按照DiffSinger的官方教程来

降噪#

去你妈的Au和什么RX9,我单方面宣布UVR是最强的降噪工具

试了一圈,UVR太强了只能说

Kim_Vocal模型,Vocal Only,直接输出,降噪出来不仅安静人声几乎无失真,真的比Au强太多了

切片#

按照上面下来就用自动切片机切就好了

标注#

你以为我会手动标注吗?

不可能,我们是懒狗炼丹师,所以我选择了阿里巴巴达摩院的Paraformer项目进行自动标注

一开始其实用的OpenAi的whisper,但那个对于中文的准确性远远不如Paraformer

也能理解,毕竟Whisper兼顾多种语言,Paraformer则是专精于中文和少量的英语

之前用的venv,这次为了随时调用,我选择anaconda

Conda安装教程不多说了,这里说配环境:

首先我们要给funasr创建一个环境:

Terminal window
conda create -n funasr python=3.7

然后激活环境:

Terminal window
conda activate funasr

于是就可以安装了:

Terminal window
pip install funasr

你也可以

Terminal window
git clone [https://github.com/alibaba/FunASR.git](https://github.com/alibaba/FunASR.git) && cd FunASR
Terminal window
pip install --editable ./

前提是你的电脑里有git

为了调用模型我们需要 Model Scope

Terminal window
pip install "modelscope[audio_asr]" --upgrade -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html

这里两步如果报错了大概是需要安装Visual Studio

你需要在Visual Studio Installer中安装“使用C++的桌面开发”并确保安装详细信息的两项勾选:MSVC生成工具、Windows SDK

完事安装Torch,可以是CPU也可以是GPU版本

由于Python版本问题,我们只能装11.6的版本

Terminal window
conda install pytorch torchvision torchaudio pytorch-cuda=11.6 -c pytorch -c nvidia

(这里是GPU版本)

然后我们调用一下官方Demo:

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
inference_pipeline = pipeline(
task=Tasks.auto_speech_recognition,
model='damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch')
rec_result = inference_pipeline(audio_in='你自己的音频.wav')
print(rec_result)

效果还是可以的,中英语混合而且准确度很高

我们引用os和pypinyin批量处理并把它们转成对应的拼音保存在.lab里

import os
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
from pypinyin import lazy_pinyin
inference_pipeline = pipeline(
task=Tasks.auto_speech_recognition,
model='damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch')
raw_path = r"源wav的地址"
list = os.listdir(raw_path)
OUTPUT_PATH = r".lab输出地址"
print(list)
for i in list:
path = raw_path + "\\" + i
rec_result = inference_pipeline(path)
print(rec_result)
pinyin = lazy_pinyin(rec_result['text'])
print(pinyin)
str = ' '.join(pinyin)
no_prefix = i.split(".")[0]
lab = OUTPUT_PATH + "\\" + no_prefix
with open(lab + '.lab','w') as f:
f.write(str)

别骂了别骂了我知道我的代码跟屎一样能用就可以了

用MinLable查看一下是否正确,核对一下

完事之后就用项目里的notebook一路下一步就好了

最后他会输出训练的命令,在你项目的根目录运行就好了

最后我练了3天,22w步

您猜怎么的?翻车了

出来我本人的声音是电的,电流声非常明显,处于完全不可用的状态

看来还是得要干声数据,下次写

咕咕

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

把自己变成初音未来!Diffsinger折腾记录
https://cainongw.github.io/posts/diffsinger/
作者
Cainong
发布于
2023-05-01
许可协议
CC BY-NC-SA 4.0
随机文章 随机推荐
Profile Image of the Author
Cainong
Caiw there 👋
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
站点统计
文章
38
分类
16
标签
48
总字数
57,650
运行时长
0
最后活动
0 天前

文章目录