一、内容和目标
1. 实验内容
本实验主要介绍基于寒武纪 MLU370 (寒武纪处理器,简称 MLU )与寒武纪 TensorFlow2 框架的 LPCNet 语音合成训练方法。在官方源码的基础上,只需要进行简单移植修改便可将 LPCNet 模型运行在 MLU370 加速卡上,实现语音合成的功能。主要的修改点集中在`models/training_tf2/mlu_lpcnet.py`
内,如果您对修改点感兴趣,可对比`models/training_tf2/lpcnet.py`
与`models/training_tf2/mlu_lpcnet.py`
文件。
2. 实验目标
-
掌握使用寒武纪 MLU370 和 TensorFlow2 框架进行 AI 模型训练的基本方法。
-
理解 LPCNet 模型的整体网络结构及其适配流程。
二、前置知识
1. 寒武纪软硬件平台介绍
-
硬件:寒武纪 MLU370 AI 加速卡
-
框架:TensorFlow2 2.5.2
2. 寒武纪 PyTorch 框架
为⽀持寒武纪 MLU 加速卡,寒武纪定制了开源AI编程框架 TensorFlow2(以下简称 Cambricon TensorFlow2)。
Cambricon TensorFlow2 集成了寒武纪软件栈,扩展了原生 TensorFlow2 对 MLU 设备的支持,同事屏蔽了硬件细节,允许用户使用原生 TensorFlow API 进行开发。用户在使用 Cambricon TensorFlow2 进行开发、部署时,可以获得与使用 CPU、GPU 完全一致的体验。
Cambricon TensorFlow2 借助 TensorFlow2 自身提供的设备扩展接口将 MLU 后端库中所包含的算⼦操作动态注册到 TensorFlow2 中,MLU 的后端库可处理 MLU 上的张量和⽹络算⼦的运算。Cambricon TensorFlow2 会基于 CNNL 库在 MLU 后端实现常⽤⽹络算⼦的计算,并完成数据拷贝。
获取更多有关Cambricon TensorFlow2资料,请参考 寒武纪官网文档 TensorFlow2 相关内容。
三、网络结构
LPCNet 是一个 AI 声码器,用于语音合成,属于 TTS 系统的一部分,输入是声学特征向量,输出结果为音频文件。LPCNet 结合了 WaveRNN 和数字信号处理(DSP),不对语音做任何先验假设,而是通过一个采样过程来生成语音。相比于 WaveRNN 需要为所有的采样值建模,LPCNet 的思路则是将采样值内非线性部分交给 WaveRNN 处理,采样值内的线性部分则通过 DSP 的线性预测给出。
由 原始论文 可知,其网络结构如下图所示:
由上图可知,LPCNet 可以分解为三个子结构: Frame rate network,Sample rate network,计算 LPC 的模块。LPCNet 的核心设计在 Sample rate network 部分,Frame rate network 主要为 Sample rate network 提供一个条件向量的输入,该向量每帧计算一次,并在该帧时间内保持恒定。LPC 计算模块则负责从输入特征中计算线性预测参数 LPC,LPC 同样是每帧计算一次,并在帧内保持恒定。
四、模型训练
-
【工程准备】:安装依赖环境,编译源代码和数据集准备等。
-
【设定超参】:设定相关参数的值,如训练数据集路径、
`batch_size`
,`epoch`
等。 -
【构建模型】:模型构建时需要区分当前是finetune训练还是
from_scratch
训练,如果是finetune,则直接调用load_model()
即可,如果是from_scratch
训练,则需调用new_lpcnet_model()
。本实验展示了finetune训练时的模型构建过程。 -
【加载数据和模型】:创建数据加载器时需先根据原始输入数据处理得到data,features,periods,随后将data,features,periods与其他参数一起送入LPCNetLoader,生成数据加载器,供后续训练遍历。同时加载 finetune 的模型文件。
-
【训练】:本实验主要介绍finetune 的训练模型。
-
【效果验证】:提供脚本测试训练的精度。
五、相关链接
实验代码仓库:https://gitee.com/cambricon/practices
Modelzoo仓库:https://gitee.com/cambricon/modelzoo