把自己变成初音未来!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创建一个环境:
conda create -n funasr python=3.7
然后激活环境:
conda activate funasr
于是就可以安装了:
pip install funasr
你也可以
git clone [https://github.com/alibaba/FunASR.git](https://github.com/alibaba/FunASR.git) && cd FunASR
pip install --editable ./
前提是你的电脑里有git
为了调用模型我们需要 Model Scope
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的版本
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步
您猜怎么的?翻车了
出来我本人的声音是电的,电流声非常明显,处于完全不可用的状态
看来还是得要干声数据,下次写
咕咕