1213组会汇报


Done:

  1. PGAN 训起来了,用的 AiShell所有 train 训练集,测试集没混进去
  2. Deep Voice 的 train1 提取 ppgs 的网络也训起来了,用的Timit,自带 Phonetic 信息
  3. VCTK-Corpus-0.92.zip 还在043下载,速度比较慢

Did & Doing:

  1. StarGAN-VC 2复现环节
  2. 把 G 和 D 网络结构写好了,还差 一个 dataloader 写一下,另外 Solver 部分模仿着写一下就差不多了
  3. 特征用的是 PGAN 处理的方式(整体训练集做 均值&方差 归一化处理),为了和后端配合上,直接用vocoder的训练数据
  4. 🌟困难点
    1. 跟进了 CIN 在图像领域的具体实现,照猫画虎写出来(IN的改进,加上 特征偏置)
    2. image-20201213171056728
    3. 论文中提到的 GSP ,查了别人不同版本代码,挑了一个合适的方式移植进来
    4. 论文的尺寸结构 是【36维,128帧】,和咱们 mel 80 不对等,进行尺寸匹配计算

论文方面:

  1. 近期看到很多围绕

    1. Speaker embedding 循环损失

      • 「OPTIMIZING VOICE CONVERSION NETWORK WITH CYCLE CONSISTENCY LOSS OF SPEAKER IDENTITY」
    2. ❤️ “stargan-vc2 进一步改造”、——(投到了 2021 icassp

      • WEIGHT ADAPTIVE INSTANCE NORMALIZATION(WAStarGAN-VC

      • 「TOWARDS LOW-RESOURCE STARGAN VOICE CONVERSION USING WEIGHT ADAPTIVE INSTANCE NORMALIZATION」

    3. PPG实现多对多转换” 「Phonetic Posteriorgrams based Many-to-Many Singing Voice Conversion via Adversarial Training」的论文

  1. 主要的创新点都不多,其中 stargan-vc2改进,基于的是 其中提到的 CIN 结构,再把 one-hot 类型改进成 同步训练的 Speaker Encoder 出来的 Speaker Embedding 来改;但是声码器还是用的 WORLD

    1. demo网址 : https://minidemo.dcs.shef.ac.uk/wastarganvc/
  1. 咱们的想法算是综合上面两篇

(论文具体细节内容还没全部看完,接下来看一下)


下周安排

  1. dataloadersolver 尽快写完,让代码先跑通
  2. 先试 one-hot 类型的,再试 AiShell3 的 Speaker encoder 方式提取的【256】维 embedding
    • 嵌入 embedding 两个可能的实现方式路线:
      1. 同样用 CIN;但是感觉不太符合 CIN 本意是针对 one-hot 而设计的初衷
      2. 不用CIN,直接在 通道层 方向上拼接:像一代那样,但是 2 代 这里已经 reshape 成一维卷积层了
      3. 可以分别做实验看效果,或者直接选第二个就好
  3. 再跟进一下 看近期有没有新的针对 「隐变量」路线的VC论文的代码

1206工作进度:

  1. 很多论文 ——看了
  2. 很多代码 ——看了、改了、写了
  3. 很多想法 ——可行与否缺乏交流
  4. 🌟没有机器 ——用单位机器被 Kill批评

  1. 初步想法——在stargan-vc2基础上改进,侧重点还是 少数据量 && 快速
  2. PGAN + Mel 处理,Embedding 部分调用 AiShell (还是得咱们自己重训,特征处理方式和PGAN不一样)(Mel 归一化方式不同
  3. 另外引入 “ Speaker Embedding循环损失,提升说话人相似度
  4. 最后再引入 洪丰 的“相对损失”来替代MSE,看效果提升度
    • Speaker Embedding 尺寸 256
    • PGAN 尺寸 80 mel
    • StarGAN 网络结构也得跟着改动了,为了迎合 两者输入特征尺寸
  1. PPG 路线:没有机器训,就在 Deep_voice_conversion 基础上改

    • 但是不知是论文读的少还是什么原因:

    • 所有 PPG –> Mel 环节,都是用的自身转自身(就是只能单一目标人转换

    • 🌟如果加 speaker embedding 的思路来做多目标人,那是不是就只能用 GAN 来做?

    • (这条路线真的好复杂,想训 Kaldi-librispeech 来学做 ppg 提取,完全训不起来,cpu占用太高了)

    • (有 fac-via-ppg 项目,做的口音转换,用的pykaldi,但是没法引入 VC)


  1. guanlongzhao/fac-via-ppg

    1. 这个任务,实现了用PyKaldi提取PPGs信息(可套来用)、PPGs 转 Mel(咱们做的是口音转换,看怎么通过改 Loss 成语音转换)、WavaGlow后端(有预训练的模型,256维度?)
    2. 这个的训练需要自己手动整理 file list,等我整理一下,自己训一下看成不成功,应该问题好解决
    3. 准备用aishell3 数据集试试中文提取ppg效果
  1. sos1sos2Sixteen/aishell-3-baseline-fc

    1. 从❤️ 这里 抄的,原本是做的英文,改成中文

    2. 这个AiShell3 的多说话人合成任务,实质是 Fork 自另一份caizexin/tf_multispeakerTTS_fc

    3. 不得不说,文档真的很差,看不清,折腾好几天起不来

    4. 🌟问题:

      1. 数据的放置位置,处理顺序全都没讲
      2. 给的预训练模型都是另一份英文的,并没有任何体现中文aishell3的存在感的地方
      3. 尝试直接跑 预训练模型,起不来,代码有问题!真的是代码有问题,传参时缺参数,一时半会不知怎么加上去,改了N多代码还是不行
      4. 不得不说,Tensorflow 问题真的比Torch多多了
    5. 🌟最新进展:demo .ipynb 跑通了!:

      1. 将 wavernn 代码 vocoder/models/fatchord_version.py 中所有 .cuda() 注释掉

      2. 将三个 ckpt 文件放入对应文件夹:

        1. pertained/tacotron_ckpt
        2. tf_multispeaker/vocoder/saved_models/aishell/aishell_ssb.pt
        3. ❤️这里的aishell/aishell_ssb.pt手动改名就行
      3. 注释掉【51】:
      1
      2
      # def mel2audio(mel) : 
      # return np.random.randn(14000)[None]

      image-20201204002224675

    6. display 函数jupter notebook环境下的一个函数接口:

    7. image-20201204002342062

    8. image-20201204002439910

      1. 文本送进去的是音素,所以生成语音需要的是音素信息,这个转换不用管,【可以用声韵母训练,用pypinyin做标注,或者找对应的音素字典就好】image-20201204002635896

      2. 说话人 embedding 这里aishell3 采用的是 ,先用预训练的 speaker encoder 提前提取所有语音embeddinmg,然后碎每个人的embedding做一个均值处理;而且这里demo提供的 embedding提取,是已经准备好的;

      3. 在原版的代码中,这里是需要手工提取的,这个回头是我钻研的重点,看怎么准备数据和文本,然后训起来再说;

      4. image-20201204002857320

  2. fatchord/WaveRNN

    1. 这个非常清楚,代码写的很工整
    2. 主要特色就是他的 WaveRNN声码器 + tacotron 前端(更改了 attention 部分机制)
    3. 目前在训练 taco前段部分,用的是 LjSpeech
  1. CorentinJ/Real-Time-Voice-Cloning
    1. 这份是比较经典的多说话人合成任务,里面有 Speaker Encoder,还没跑,有参考价值

问题:

在pyworld使用前,一般需要读取音频文件:

  • librosa.load() 默认得到的是float32类型的数据,所以一般会再跟上 x.astype(np.float64)

    • 而恰恰是这么一个Numpy类型转换,会导致得到的 ap 特征中会含有 Nan 数据,这会导致最终的计算出现不必要的偏差;
阅读全文 »

参考:

  1. https://github.com/mmorise/World/issues/90 (有人提问 WORLD 提取得到的 mel spectrum 梅尔谱和传统概念上 经过一系列stft之后还要经过“三角滤波器组”的过程区别?)
  2. https://github.com/mmorise/World/issues/33 (r9y9 在mmorise/World 下提问关于 编码/解码后音色变化问题;代码bug已解决;学习一下画图和使用特点)

阅读全文 »

1
$ hexo c && hexo g && hexo s
1
$ hexo d
阅读全文 »

Diffussion Model——扩散概率模型

——适用于所有的生成类任务:TTS (☑️)、VC(❓)

——其实和VAE有点像:多层 VAE


image-20220605112436197

  • 最早见刊时间 1995-2004

  • 论文:2015-ICML && ==2020-NIPS==

    • [1] Ho, Jonathan, Ajay Jain, and Pieter Abbeel. “Denoising diffusion probabilistic models.” Advances in Neural Information Processing Systems 33 (2020): 6840-6851.
    • [2] Sohl-Dickstein, Jascha, et al. “Deep unsupervised learning using nonequilibrium thermodynamics.” International Conference on Machine Learning. PMLR, 2015.
  • github代码

  • 视频解读Bilibili

阅读全文 »