高效实时语音合成:SqueezeWave
加州大学伯克利分校的研究人员提出了一种超轻量级的声码器模型SqueezeWave,相较于WaveGlow减小了61-214倍的计算量,在众多边缘设备上——甚至是树莓派上——都能有效部署实现高效的实时语音合成。
自动语音合成对于众多智能应用十分重要,其中声学特征转换为音频输出的声码器在语音合成过程中具有十分重要的作用。虽然WaveGlow可以实现并行化的语音合成,但其庞大的计算量使得本地和边缘设备无法承受,基于云计算的语音合成使得网络延时和用户隐私问题无法有效解决。
为了解决语音合成中计算效率的问题,来自加州大学伯克利分校的研究人员提出了一种超轻量级的声码器模型SqueezeWave,通过对WaveGlow的结构和计算方法进行优化大幅提升了模型计算效率,相较于WaveGlow减小了61-214倍的计算量,在众多边缘设备上——甚至是树莓派上——都能有效部署实现高效的实时语音合成。
一、TTS从云端向边缘
从车载地图应用到语音助手,众多设备都开始采用了丰富的语音交互技术来处理各种任务。但想要得到高质量的文本到语音转换,需要复杂的机器学习模型和庞大的云计算资源支撑。但随着硬件的发展,边缘设备的计算能力大幅提升使得语音合成模型在本地运行成为可能。其次消费者对于隐私的担忧与日俱增,在移动端运行机器学习模型消除用户数据向云端泄漏的威胁。此外随着消费者对于语音助手的依赖逐渐加深,对于用户体验的关注也逐渐增加。为了提供低延时的语音服务,降低网络连接质量带来的影响,本地运行的语音合成模型比云端模型更有优势。
典型的现代语音合成模型主要包含两个部分:合成器和声码器。其中合成器用于从文字输入生成声学特征,而后利用声码器从声学特征生成波形输出。现存的高质量语音合成器都需要消耗十分可观的计算资源,SqueezeWave的主要目的在于提升合成器的效率。例如WaveNet及其变体基于自回归的方法,意味着每一个生成的样本都依赖于先前的样本,这种串行的处理方式阻碍了硬件的并行加速;而基于流的WaveGlow可以在每一次前传中生成许多样本,虽然这一方法具有并行优势但却需要消耗十分巨大的计算量。例如生成1s22kHz的语音需要消耗229G MACs的计算量,远远超过了移动端处理器所能承受的范围。尽管WaveFlow可以在最新的V100显卡上达到超过实时的性能,但却不适合在边缘设备部署。
在这篇论文中研究人员提出了一种轻量级的基于流的声码器SqueezeWave用于边缘设备的语音合成。研究人员重新设计了WaveGlow的架构,通过重整音频张量、采用深度可分离卷积以及相关优化使其比WaveGlow少消耗61-214倍的计算量,可在笔记本端实现每秒123-303K样本的生成,在树莓派上3B+上也能实现15.6K的实时水平。
二、重新审视WaveGlow的计算复杂度
与直接进行卷积操作不同,WaveGlow首先将邻近的样本聚类构建多通道的输入,其中L为时域维度的长度,Cg为每个时间步上的聚类组合的样本数量。波形中的样本总数量为.波形随后被一系列双边映射进行转换,其中每一个都会利用的输入得到输出。在每个双边映射中,输入信号首先被可逆的逐点卷积处理,而后将结果沿通道拆分为和。其中被用于计算仿射耦合系数。其中将被应用于的后续计算。而则为类似wavenet的函数,为编码音频的梅尔谱Lm为梅尔谱的时间长度,Cm为频率分量的数目。随后仿射变换层将通过下式计算:其中代表逐元素相乘。最终将在通道方向上组合得到最后的输出。
WaveGlow最主要的计算量来自于WN函数,其计算流程如上图所示。输入首先通过逐点卷积进行处理(图中start),卷积使得的通道数从增加到非常大的数目,在WaveGlow中start的输出维度为256维。随后核为3的一维膨胀卷积将继续对上述结果进行处理(图中in_layer所示)同时梅尔谱也被馈入到网络中。由于梅尔谱的时域长度远小于波形长度,所以需要对其进行上采样来进行维度匹配。
而后in_layer和cond_layer输出按照WaveNet的方式通过门函数进行合并,随后传输到res_skip_layer。其输出长度为L=2000,通道数为512.随后将按照通道拆分为两部分。这一结构将重复八次,并在最后的res_skip_layer输出与end进行逐点卷积,计算出转换因子
并将通道从512压缩到8。在WaveGlow的源码中,每秒的计算量为229G MACs,其中in_layer占据了47%,cond_layer占据了39%, res_skip_layer则为14%。这对这样的情况,研究人员将对原始的网络结构进行改进以减少计算量提高计算效率。