himajin2045 / voice-conversion

Voice Conversion pipeline consisting of GE2E speaker encoder, AutoVC conversion model and MelGAN vocoder.
23 stars 3 forks source link

About training steps needed #1

Closed JohnHerry closed 3 years ago

JohnHerry commented 3 years ago

Hi, himajin2045, Can you please give the training steps of each net? The config in hparams.py, 1e12, seems far more then enough. Thank you

himajin2045 commented 3 years ago

Vocoder: 1.2 million steps ( see https://github.com/descriptinc/melgan-neurips/issues/4#issuecomment-570106464 )

VC model: Training for 370k steps is usually enough

Speaker encoder: I'm not sure about this, I suggest you plot and observe the similarity matrix, it's good enough when you see a distinct diagonal line.

himajin2045 commented 3 years ago

You could find in each of the train_xxx scripts, there is an inference function dumping some results, and that should give you some ideas how the current model performs.

JohnHerry commented 3 years ago

You could find in each of the train_xxx scripts, there is an inference function dumping some results, and that should give you some ideas how the current model performs.

Thank you very much!

leijue222 commented 3 years ago

该方案好像只能在训练集的几个speaker之间相互转换。 可否像柯南的蝴蝶结一样,任意声音输入进来,都能转换成模型中的音色?(即任何人的声音经过蝴蝶结都转换成毛利小五郎的声音),请问有没有这种方案推荐?

himajin2045 commented 3 years ago

autovc 在当时(现在不知道)就是 unseen to unseen 的 state of the art 啊。

leijue222 commented 3 years ago

原来如此,我说的这种属于unseen to seen了。unseen to unseen肯定也是能满足的,我再研究看看。

deep-voice-conversion 太老了, autovc也有推荐他新的工作SpeechSplit

对,还有训练数据,要unseen to unseen的话,训练数据得多个speaker吧。 我的目的是想把任意声音的输入转换为标贝数据的声音,那得依赖什么数据呢?

himajin2045 commented 3 years ago

你先过一下代码,最好跑起来看看,我觉得你想知道的都在代码里,只是可能有点乱

leijue222 commented 3 years ago

嗯嗯,autovc和SpeechSplit 我都过一过,谢啦

JohnHerry commented 3 years ago

(1)算法 本论文AutoVC的方法,对unseen speaker style的语音合成,效果并不太好。它的编码器方式还是太简单了。新近的multi-speaker TTS技术,都在往unseen speaker合成能力上靠拢(Zero-shot Or One-shot)。具体可以参考近两年的论文。不过还没有达到STOA的效果。 本人看到最好的一篇是相似度0.5以上吧,还是限定性别的。 (2)数据 有论文论证过,要提高unseen speaker style的合成效果,其speaker embeder的训练语料,说话人越多越好,英文很多研究动辄上万不同说话人的数据集;我们中文环境还没有这么大的开源数据集出来。 另外,数据的多样性,非常重要。比如我们用大量男,女样本做模型训练,理论上对相同年龄特征等unseen speaker的可以有一定合成能力了,虽然不太像。但是如果你对一个幼儿的unseen speaker 去合成,你会发现,根本没有任何相似度可言,而且自然度都不行。 幼儿的语音频谱分布,跟成年人的差异很大;同样老年人的声谱也有其特点。我们目前开源数据集,一般是16-45周岁范围的,所以它学不到你想要的“任意声音”的能力。 (3)阿Q一下,也有一点好的方面 语音合成,跟声纹检测,是矛与盾的关系。Thanks to the low performance of unseen VC, 你不会因为一两次使用了互联网语音相关的应用,或者被不怀好意的人录了音,就导致以后有被冒充的风险。以后随着技术发展,不好说。

leijue222 commented 3 years ago

跟二位大佬交流一下。 AutoVC和同作者的SpeechSplit的demo我都跑了一下,

  1. 有个很显眼的弊端是合成速度相当慢(几秒的wav在1080Ti上需要3-4分钟...)
  2. 合成音质,issue中都阐述复现不了作者展示的那么完美,就如@JohnHerry 所说的,效果不太好。还有你说的不同人群我还真没考虑到,这是的确是一个大问题。音质不达标的话最多发发paper,商用展示没啥吸引力。

我是这两天在找Voice Conversion的方法。在此之前我用的是Voice clone,效果的话外放还凑合,但导师不太满意,我这才想着试试Conversion。Voice Conversion和Voice Clone的区别简单点说就是:

语音克隆(Voice-Cloning): 所谓voice clone就是,在拿到一个新的没见过speaker的语音之后,只要用户少量的句子(甚至一句), 就可以合成语音来。voice clone包含我们通常用到的adapt和本文新提出的speaker encoding。 最最传统的方式,就是把这些数据加进去微调得到新模型,这也就是clone了。

语音转换(voice conversion) 语音转换(voice conversion)是这样一个任务:输入一条语音,在保持说话内容不变的情况下,让它听起来像是另一个人说的。一个典型的用例,就是柯南的蝴蝶领结变声器。


我用非专业录音棚设备录制的少量数据对我训练有素的TTS model进行了finetune,也就是clone 合成了如下音频:

  1. finetune voice clone的音频
  2. 用标贝数据训练的TTS生产的音频 @JohnHerry @himajin2045 你们可以明显的感觉到Clone的声音还是远不如标贝的声音的,所以我就在想Conversion能不能达到更好的效果?对此你们觉得呢?

我这里Clone的效果不是足够好的原因有二:

  1. Clone的数据本身读的情感不如标贝
  2. 一般设备录制的音频再经过Adobe人工降噪除噪,达不到专业设备的纯干净。

还有一个有意思的事是百度地图的语音包,用的也是Voice clone的方法,录制少量数据即可合成自己的声音(收集用户数据->自动降噪->训练出结果)。我也想复刻一下,但我不知道它是如何做的自动降噪,自动降噪你们有了解的方案吗?人工成本太高了。

leijue222 commented 3 years ago

唉,我还是得拿数据train一个conversion model看看效果先。既然要多speaker那我就得用多speaker的数据+标贝的数据。 AutoVC效果一般的话,我就先试试同作者的SpeechSplit ,或者你们还有比较好的推荐吗?我不知道这方面的state of the art 是哪个

JohnHerry commented 3 years ago

跟二位大佬交流一下。 AutoVC和同作者的SpeechSplit的demo我都跑了一下,

  1. 有个很显眼的弊端是合成速度相当慢(几秒的wav在1080Ti上需要3-4分钟...)
  2. 合成音质,issue中都阐述复现不了作者展示的那么完美,就如@JohnHerry 所说的,效果不太好。还有你说的不同人群我还真没考虑到,这是的确是一个大问题。音质不达标的话最多发发paper,商用展示没啥吸引力。

我是这两天在找Voice Conversion的方法。在此之前我用的是Voice clone,效果的话外放还凑合,但导师不太满意,我这才想着试试Conversion。Voice Conversion和Voice Clone的区别简单点说就是:

语音克隆(Voice-Cloning): 所谓voice clone就是,在拿到一个新的没见过speaker的语音之后,只要用户少量的句子(甚至一句), 就可以合成语音来。voice clone包含我们通常用到的adapt和本文新提出的speaker encoding。 最最传统的方式,就是把这些数据加进去微调得到新模型,这也就是clone了。

语音转换(voice conversion) 语音转换(voice conversion)是这样一个任务:输入一条语音,在保持说话内容不变的情况下,让它听起来像是另一个人说的。一个典型的用例,就是柯南的蝴蝶领结变声器。

我用非专业录音棚设备录制的少量数据对我训练有素的TTS model进行了finetune,也就是clone 合成了如下音频:

  1. finetune voice clone的音频
  2. 用标贝数据训练的TTS生产的音频 @JohnHerry @himajin2045 你们可以明显的感觉到Clone的声音还是远不如标贝的声音的,所以我就在想Conversion能不能达到更好的效果?对此你们觉得呢?

我这里Clone的效果不是足够好的原因有二:

  1. Clone的数据本身读的情感不如标贝
  2. 一般设备录制的音频再经过Adobe人工降噪除噪,达不到专业设备的纯干净。

还有一个有意思的事是百度地图的语音包,用的也是Voice clone的方法,录制少量数据即可合成自己的声音(收集用户数据->自动降噪->训练出结果)。我也想复刻一下,但我不知道它是如何做的自动降噪,自动降噪你们有了解的方案吗?人工成本太高了。

1、voice conversion自身并不慢,你可以试试调用时间。慢的是vocoder。各个论文实验为了提高自然度,用的vocoder是WaveNet或者WaveRNN这类效果较好但是慢速的合成器。可以用其它快一些的。 2、合成音质,对训练中可见的说话人,特别是训练语料比较多的(例如该说话人总语音时长超过4个小时),转换合成效果还不错的。音质不好主要是对unseen speaker的。

其实这些都属于TTS的扩展研究范畴,你说的Voice-Cloning(用少量目标说话人语音数据fine-tune训练TTS),属于one-shot TTS; 本项目AutoVC这类用 speaker embedding控制合成说话人腔调的,属于zero-shot TTS。每个方向都有很多策略,可以参考VCC2020会议上的一些成果和论文。 (1)one-shot(这里特指fine-tune策略的)如果策略得当,数据OK,对新speaker的tts还是可以取得不错的效果的,因为毕竟用你的目标新说话人数据参与调优训练了。说数据OK,其实一般老一点的算法one-shot也都是1小时左右的该speaker语音数据量才可以。VCC2020上有些研究成果已经降低要求到5分钟10分钟的了,效果的话你可以去听听。 (2)zero-shot的,目前绝大部分研究,就跟我之前说的,效果其实都不行。主要是跟目标说话人相似度还达不到预期效果。 其实Voice-Clone 和Voice-Conversion的概念,很多研究并没有分的很清楚,差不多都是那样:首先输入输出都是从语音到语音,其次研究目标都是用尽量少,或者没有目标说话人的语音参与训练微调,就可以得到好的目标说话人语音。 这两类研究的论文,包括multi-speaker TTS的论文,你都可以参考阅读。

题外话说一下,其实我们这些在企业上班的,每天接的任务五花八门,学的也是偏重于用,并不深入。很难像你们还在上学,有大把时间研究一个方向,看很多论文。很羡慕你们! 好好加油,期待以后有机会用到你们的研究成果。嘿嘿!到时候多多指教哈。