如何复刻你的老师——MockingBird拟声鸟AI拟声项目(2)

Hello, 欢迎登录 or 注册!

/ 3评 / 0

本文作者:  本文分类:软件安装  浏览:129
阅读时间:2444字, 约2.5-4分钟

相信不少人都看了上一次的入门级教程
然后发现:这克隆出来的还不如直接拿微软语音合成呢
那么,个性化语音教程来咯

今天着重讲的是如何训练特定人的合成器

这个有点复杂
我呢就给大家讲讲怎么克隆老师的声音

1、下载软件

就直接下载代即可
还需要一个字母生成软件
如果您有阿里云的话可以videosrt(github/gitee开源)
没有的话剪映或者网易见外都可以

2、制作数据集

首先您需要有特定人的录音(录在少量大文件里方便识别字幕,wav格式,最好有500+句长句)
然后使用字母识别软件(videosrt/网易见外/剪映)识别字幕,导出为srt
下载sound_file_processing,直接下载源码解压
进入sound_file_processing的文件夹,将wav拷进wav/input,将srt拷进srt文件夹(注意把原来的示例文件删掉)
在地址栏(或者使用cmd进入)中输入python long_file_cut_by_srt.py,回车
在询问短音频处理方式时输入2
如果报错,可能是哪个文件没有新建成功,像我就在transcript文件夹中手动新建了一个transcript_short.txt
请注意:
如果你的录音时长单文件大于1个小时,请先用格式工厂之类的分割一下(一个文件至少小于1个小时),不然会分割出一些44字节的东西,然后报错
然后就是比较无聊的一步:
打开transcript/transcript.txt
核对字幕,将所有字幕使用汉字或者拼音(比如“Snow”就可以叫做si5 nou4,5表示轻声)
(有出现英语单词的就放弃了吧,还有别想打transcript_short的主意,预处理的时候会被过滤掉的)
然后进入数据集的文件夹
还记得上次建的aidatatang_200zh文件夹吗?
进入,新建(或打开)corpus,新建train,把sound_file_processing中的wav/output文件夹整个拷进来,随便改个名字(比如改成演讲者的名字)
回到aidatatang_200zh的文件夹,新建文件夹transcript,在当中新建aidatatang_200_zh_transcript.txt,把修改过的transcript.txt的内容复制进来

3、预处理

然后,进入mockingbird的目录,在地址栏输入:python pre.py <datasets_root> -n <numbers>
注:datasets_root指aidatatang_200zh所在的目录,如我的就是D:\dataset\Snow
<numbers>指CPU并行数,实测没啥用
然后我们进入datasets_root,可以看见出现了一个SV2TTS文件夹
里面有一个synthesizer文件夹

4、改代码

首先打开synthesizer_train.py
有这样一行:

parser.add_argument("-s", "--save_every", type=int, default=1000, help= \

这是表示训练多少步保存一次,可以改小一点,像我改成了60
打开synthesizer/hparams.py

有这样一段:

        tts_schedule = [(2,  1e-3,  10_000,  12),   # Progressive training schedule
                        (2,  5e-4,  15_000,  12),   # (r, lr, step, batch_size)
                        (2,  2e-4,  20_000,  12),   # (r, lr, step, batch_size)
                        (2,  1e-4,  30_000,  12),   #
                        (2,  5e-5,  40_000,  12),   #
                        (2,  1e-5,  60_000,  12),   #
                        (2,  5e-6, 160_000,  12),   # r = reduction factor (# of mel frames
                        (2,  3e-6, 320_000,  12),   #     synthesized for each decoder iteration)
                        (2,  1e-6, 640_000,  12)],  # lr = learning rate

解释一下:
第一个我也不太清楚,但改了会报错
第二个是learning_rate,有什么算法,我不太清楚,总之基本不动
第三个是指步数,相当于定义域
第四个是指batch_size,即训练一步所抓取的示例数量,可以改大一点(每个都要改),我改成了24(有GPU加速的48乃至96都行)

5、训练模型

注:我发现在wsl里面练得比较快……不知为何
进入文件夹,在cmd中输入python synthesizer_train.py <name> <datasets_root>/SV2TTS/synthesizer
比如我的是python synthesizer_train.py Snow D:\dataset\Snow\SV2TTS\synthesizer
回车开练

6、按照作者进度进行训练(可选)

当你数据集较小,可选择按照作者进度训练
在运行一段时间,看到开始训练(即跳出来一行{Steps:|loss:| steps/s|}时)
进入synthesizer/saved_models/<name>中,把那个<name>.pt删了
把之前下好的pretrained-11-7-21_75k.pt拷进来,改名字,改成<name>.pt(如我的Snow.pt)
再次执行python synthesizer_train.py <name> <datasets_root>/SV2TTS/synthesizer
第一次可能报错,再次运行

7、停止训练

每500下会生成attention和loss图像,在synthesizer/saved_models/<name>/plots里面
attention如图,要是对角线走向
loss在0.4一下就基本可以用了
需要注意,并不是练得越久越好,如果loss反升,很可能已经过拟合,请立刻停止!
项目作者的知乎专栏,不定期收录炼丹心得:点我进入

就这些,大家谨慎使用~

关于作者

本作品采用 知识共享署名-非商业性使用 3.0 (CC BY-NC 3.0) 许可协议进行许可。
  1. 23 786说道:

    0.019 step/s,我没救了

发表评论

您的电子邮箱地址不会被公开。