PaddlePaddle / PaddleSpeech

Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.
https://paddlespeech.readthedocs.io
Apache License 2.0
11.08k stars 1.85k forks source link

语音log mel和MFA提取的phone durations总和的frames相差问题 #2593

Closed binbinxue closed 1 year ago

binbinxue commented 2 years ago

General Question

我对语音做了切分和停顿的各种处理,然后用MFA 2.X提取了durations, 我对比了所有处理过后语音的duration和MFA durations总和,误差在1e-3 秒以下(1ms以下). 考虑到hop window用的是12.5ms这应该没有问题,因为MFA的TG文件只到小数点第二三位, log mel提取后frames数和phone durations用librosa.time_to_frames转换后的frames数有时候会差1个frame. log mel提取是根据你们那个script提取的,用到librosa.stft加上center padding. 然后librosa.time_to_frames用到flooring方程,我看了你们VTuberTalk那个repo, 对此的处理是把两者相差加进去,想问下你们paddlespeech repo里面有根据padding以及duration to frames转换有什么特别处理吗? 我的意思是,librosa.stft 的pad mode是reflective应该是两边都做了padding, 这样1frame的差别有可能会造成所有phoneme的frame对齐偏差一个frame吧?

看过这两行https://github.com/PaddlePaddle/PaddleSpeech/blob/a778f160144c242536c8333a4d442416967993bf/paddlespeech/t2s/exps/fastspeech2/preprocess.py#L69, 里面并没有对mismatch做处理,后面几行compare_...那个方程是把相差的frame加到duration frame那边。

binbinxue commented 2 years ago

https://librosa.org/doc/main/generated/librosa.stft.html librosa.stft里面, center和padding_mode的描述,所以fft的window从开头就因为reflection padding位移了半个frame, 然后librosa.time_to_frame因为用到floor的function, 会累积超过1frame的rounding difference, 这两个总体会造成2个frame的差别,而且是因为累积的,映射到每个phoneme上面会造成一个sequence里面一些phoneme的duration有1个或者2个frame的位移。当然把差别加到最后那个phoneme duration是可以跑通,但是这样不会造成质量问题吗?

yt605155624 commented 1 year ago

感觉你的前提是认为 MFA 的结果一定足够准确而且 1 ~ 2 frame 的位移对语音合成一定重要,但是需要思考:

  1. MFA 的结果就一定那么准确嘛?-> 我没做过 ASR 我不好说
  2. 1 ~ 2 frame 的位移对语音合成一定重要嘛?-> 我用过只有音频没有文本的数据来做语音合成,文本是通过 ASR 获取的,ASR 获取后的文本有很多错,但是人力有限不可能全部精标,这种情况下连文本都不一定对,遑论 1 ~ 2 frame 的误差了

当然这如果一定想知道这种处理是否会造成质量问题,可以做些对比实验,欢迎反馈结果 + 提交 pr

binbinxue commented 1 year ago

我记得fast speech 2s的文章里面说他们用teacher model训练出来的duration不如mfa的好, MFA的ASR用到了kaldi, 我看像speedyspeech那样用attention提取duration应该没有MFA的准确。

1,2个frame的位移是累积的,有可能从第一二个phoneme就开始偏移,有些phoneme它本身只有几个frame的duration. 感觉会影响到。 只有音频的情况下当然用ASR的误差就基本不用考虑。

就好奇问问,谢谢!