声音克隆
原理介绍
第一个模块:收到说话人音频,然后转成这样一个低维表征向量speaker embedding,(这个向量富含说话信息)实现方式:
由于是无监督学习,使用聚类算法每个人说的所有话能够聚类到一起,
使用损失函数GE2E分开,假设有n个人,每人m个语句,xi,j表示提取的特征,先对xi,j进行LSTM网络输出结果,然后正则化,
使用余弦距离计算距离,然后比较出一个相似矩阵定义相似点,使用softmax损失函数,将损失叠加,实现分类
第二个模块:是一个编码器解码器模型,主要任务就是文本和上一步的声音向量转化成mel频谱图,因为我们一般的音频文件特征很难提取,一般用频谱图做中间人,
频谱图用的就是傅里叶变换,
编码器编码器将字符序列转换为解码器消耗以预测频谱图的隐藏特征表示
就是先把文本转化为char embendding,通过3个卷积层的堆叠,bn层[18]和relu激活
将卷积输出传递到单个双向LSTM以产生编码特征
中间还有个attention,将编码特征转化为定长向量(128维)
然后就是解码器,解码器模块是一个自回归RNN,用来预测mel频谱图,一次一帧,
上一步预测出的频谱帧首先被传入一个每层由256个隐藏ReLU单元组成的双层全连接的“pre-net”
pre-net的输出和attention的结果使用concat函数拼接一起进入lstm层,
LSTM的输出再次和注意力上下文向量拼接在一起,然后经过一个线性变换投影来预测目标频谱帧
目标频谱帧经过一个5层卷积的“post-net”来预测一个残差叠加到卷积前的频谱帧上,
损失函数用的MSE(均方)
下一个模块:就是把mel频谱图转化为音频
使用wavenet,将波形waveform当作一个联合概率 ,使用因果卷积建模,
代码链接:github搜索mockingbird或者点击GitHub - babysor/MockingBird: AI拟声: 5秒内克隆您的声音并生成任意语音内容 Clone a voice in 5 seconds to generate arbitrary speech in real-time
考虑到github访问慢,下面是码云的链接:mygit: 源自github上的mockingbird项目,下载下来用于学习
实现过程:可以在b站搜索mockingbird,里面有详细视频介绍
实验结果: