zoukankan      html  css  js  c++  java
  • 现在你可以通过深度学习用别人的声音来说话了

    640?wx_fmt=png

    语音合成(Text-to-speech,TTS)是指文本到音频的人工转换,也可以说给定一段文字去生成对应的人类读音。人类通过阅读来完成这项任务,而一个好的TTS系统是让计算机自动完成这项任务。

    在打造这样一个系统时,一个非常有趣的地方是为生成的音频选择哪个声音,是男人还是女人的声音?声音是大还是小?

    在使用深度学习创建TTS时,这有一个限制,你必须收集文本-音频的数据集,而录制演讲的演讲者可能是固定的——因为你不可能有无限多个演讲者!

    所以,如果你想为自己或他人的声音创建音频,唯一的方法就是收集一个全新的数据集。

    来自谷歌名为 Voice Cloning 的人工智能研究使计算机可以用任何类型声音发出声音。
     

    Voice Cloning是怎样工作的

    很明显,为了让电脑能够使用任何类型声音发出声音,它需要理解两件事:它读的是什么以及它是如何读的。

    因此,谷歌研究人员设计的语音克隆系统有两个输入:我们想要读取的文本和我们想要用来阅读文本的语音样本。

    例如,如果我们想让蝙蝠侠读“我爱披萨”这句话,那么我们会给系统两样东西:“我爱披萨”的文本和一小段蝙蝠侠的声音样本,这样它就知道蝙蝠侠的声音应该是什么样的。而电脑的输出应该是蝙蝠侠说“我爱披萨”的声音音频!

    从技术角度来看,系统分为3个顺序组件:

    1. 给定我们希望使用的声音的一个小音频样本,将语音波形编码为一个固定的维向量表示

    2. 给定一段文本,也把它编码成向量表示。将语音和文本这两个向量结合起来,将它们解码成声谱图

    3. 使用声码器将声谱图转换成我们可以听到的音频波形。

    640?wx_fmt=png

    系统的简化版本

    在文章中,我们对这三个部分分别进行了训练。

    在过去几年中,语音合成系统在深度学习社区中得到了很多研究关注。事实上,有很多基于深度学习针对语音合成的解决方案都非常有效。

    这里的关键是,系统能够将编码器从语音中学到的“知识”应用到文本中。

    在分别编码后,将语音和文本组合在一个公共的嵌入空间中,然后进行解码,生成最终的输出波形。
     

    克隆声音的相关实现代码

    多亏了人工智能社区中开放源码思想的美妙之处,在这里有一个公开可用的语音克隆实现!你可以按照下面的介绍这样来使用它。

    1. 首先克隆仓库:

    git clone https://github.com/CorentinJ/Real-Time-Voice-Cloning.git

    1. 安装必要的库并确保使用的是Python 3的版本:

    pip3 install -r requirements.txt

    1. 在README文件中,你还可以找到下载预训练模型和数据集的链接,并尝试一些示例。

    2. 最后,你可以运行以下命令打开GUI:

    python demo_toolbox.py -d <datasets_root>

    下面是我这边运行操作的一个截图:

    640?wx_fmt=png

    正如你所看到的,右上角的输入框中是我想让电脑阅读的文字:“Did you know that the Toronto Raptors are Basketball champions? Basketball is a great sport.”

    你可以点击每个部分下面的 “Random” 按钮来随机化语音输入,然后点击 “Load” 将语音输入加载到系统中。

    Dataset 从你选择的语音样本中选择数据集,Speaker 选择说话的人,Utterance 选择输入语音所说的短语。如果想听输入的语音是怎样的,只需点击 “Play” 按钮。

    一旦你点击 “Synthesize and vocode” 按钮,算法就会运行。一旦运行结束,你将听到扬声器以某个声音朗读你的输入文本。

    你甚至可以录制你自己的声音作为输入,只需要点击 “Record one” 按钮。相信我,这会非常有趣!
     

    更进一步

    如果你想了解更多关于这个算法的工作原理,你可以阅读谷歌的官方NIPS论文。这里(https://google.github.io/tacotron/publications/speaker_adaptation/)还有一些音频样本结果。

    论文链接:

    https://arxiv.org/pdf/1806.04558.pdf
     

    欢迎关注磐创博客资源汇总站:
    http://docs.panchuang.net/

    欢迎关注PyTorch官方中文教程站:
    http://pytorch.panchuang.net/

  • 相关阅读:
    asp.net mvc 中使用async/await异步编程
    简述C#中浅复制和深复制
    Angular:自定义表单控件
    Angular:Reactive Form的使用方法和自定义验证器
    Angular:ViewProviders和Providers的区别
    Angular:OnPush变化检测策略介绍
    Angular:利用内容投射向组件输入ngForOf模板
    在Angular中利用trackBy来提升性能
    Angular @HostBinding()和@HostListener()用法
    Angular利用@ViewChild在父组件执行子组件的方法
  • 原文地址:https://www.cnblogs.com/panchuangai/p/12568069.html
Copyright © 2011-2022 走看看