FunAudioLLM / CosyVoice

Multi-lingual large voice generation model, providing inference, training and deployment full-stack ability.
https://funaudiollm.github.io/
Apache License 2.0
5.74k stars 610 forks source link

关于说话人信息提取的问题 #300

Open hm-li0420 opened 2 months ago

hm-li0420 commented 2 months ago

有些音频的克隆出来的音色与prompt wav的音色并不像,想请问一下campplus是否为在cosyvoice中表现最好的最好的声纹embedding模型,以及如何提升音色的相似度

aluminumbox commented 2 months ago

maybe your prompt audio is noisy, use a clean one

huskyachao commented 2 months ago

maybe your prompt audio is noisy, use a clean one

您好,请问 CosyVoice-300M中的flow模型,训练数据中的 spk embedding是从 token对应的音频中直接提取的呢?还是用同一说话人额外的prompt audio来提取的呢?谢谢~

Aworselife commented 1 month ago

maybe your prompt audio is noisy, use a clean one

您好,请问 CosyVoice-300M中的flow模型,训练数据中的 spk embedding是从 token对应的音频中直接提取的呢?还是用同一说话人额外的prompt audio来提取的呢?谢谢~

代码上来看(tools.extract_embedding),似乎是对同一说话人的所有音频提spk embedding再求mean吧

hm-li0420 commented 1 month ago

maybe your prompt audio is noisy, use a clean one

您好,请问 CosyVoice-300M中的flow模型,训练数据中的 spk embedding是从 token对应的音频中直接提取的呢?还是用同一说话人额外的prompt audio来提取的呢?谢谢~

代码上来看(tools.extract_embedding),似乎是对同一说话人的所有音频提spk embedding再求mean吧

没看到有求mean的操作,应该是输入音频的fbank特征去均值之后就直接提出来作为spk embedding prompt wav->prompt wav fank->minus mean value->extract embedding https://github.com/FunAudioLLM/CosyVoice/blob/dcc943db435f3329b574e4f5ecb2eb9db59ef124/cosyvoice/cli/frontend.py#L85

huskyachao commented 1 month ago

maybe your prompt audio is noisy, use a clean one

您好,请问 CosyVoice-300M中的flow模型,训练数据中的 spk embedding是从 token对应的音频中直接提取的呢?还是用同一说话人额外的prompt audio来提取的呢?谢谢~

代码上来看(tools.extract_embedding),似乎是对同一说话人的所有音频提spk embedding再求mean吧

嗯呢 tools里的确实是这样,我这边直接用utt_embeddding作为说话人信息,重训出来的flow模型的speaker similarity不到0.7,而CosyVoice-300M开源的flow模型在相同数据集上可以到 0.75,所以我在想官方是否用到了相同说话人额外的prompt audio来训/SFT flow呢?是不是我用utt_embeddding直接作为说话人信息这种做法有问题?

huskyachao commented 1 month ago

maybe your prompt audio is noisy, use a clean one

您好,请问 CosyVoice-300M中的flow模型,训练数据中的 spk embedding是从 token对应的音频中直接提取的呢?还是用同一说话人额外的prompt audio来提取的呢?谢谢~

代码上来看(tools.extract_embedding),似乎是对同一说话人的所有音频提spk embedding再求mean吧

没看到有求mean的操作,应该是输入音频的fbank特征去均值之后就直接提出来作为spk embedding prompt wav->prompt wav fank->minus mean value->extract embedding

https://github.com/FunAudioLLM/CosyVoice/blob/dcc943db435f3329b574e4f5ecb2eb9db59ef124/cosyvoice/cli/frontend.py#L85 上面老哥说的应该是tools/extract_embedding.py里的操作,确实是有个对每个说话人的所有embedding取mean的操作

for k, v in spk2embedding.items():
spk2embedding[k] = torch.tensor(v).mean(dim=0).tolist()
hm-li0420 commented 1 month ago

maybe your prompt audio is noisy, use a clean one

您好,请问 CosyVoice-300M中的flow模型,训练数据中的 spk embedding是从 token对应的音频中直接提取的呢?还是用同一说话人额外的prompt audio来提取的呢?谢谢~

代码上来看(tools.extract_embedding),似乎是对同一说话人的所有音频提spk embedding再求mean吧

没看到有求mean的操作,应该是输入音频的fbank特征去均值之后就直接提出来作为spk embedding prompt wav->prompt wav fank->minus mean value->extract embedding https://github.com/FunAudioLLM/CosyVoice/blob/dcc943db435f3329b574e4f5ecb2eb9db59ef124/cosyvoice/cli/frontend.py#L85

上面老哥说的应该是tools/extract_embedding.py里的操作,确实是有个对每个说话人的所有embedding取mean的操作

    for k, v in spk2embedding.items():
        spk2embedding[k] = torch.tensor(v).mean(dim=0).tolist()

原来如此,我这边也尝试过utt_embedding作为spk_embedding输入同样出现speaker similarity下降的问题

Aworselife commented 1 month ago

maybe your prompt audio is noisy, use a clean one

您好,请问 CosyVoice-300M中的flow模型,训练数据中的 spk embedding是从 token对应的音频中直接提取的呢?还是用同一说话人额外的prompt audio来提取的呢?谢谢~

代码上来看(tools.extract_embedding),似乎是对同一说话人的所有音频提spk embedding再求mean吧

嗯呢 tools里的确实是这样,我这边直接用utt_embeddding作为说话人信息,重训出来的flow模型的speaker similarity不到0.7,而CosyVoice-300M开源的flow模型在相同数据集上可以到 0.75,所以我在想官方是否用到了相同说话人额外的prompt audio来训/SFT flow呢?是不是我用utt_embeddding直接作为说话人信息这种做法有问题?

看给的配置里用的应该就是utt_embedding,不确定开源的flow模型是咋弄得 😢 https://github.com/FunAudioLLM/CosyVoice/blob/dcc943db435f3329b574e4f5ecb2eb9db59ef124/cosyvoice/dataset/processor.py#L365

https://github.com/FunAudioLLM/CosyVoice/blob/dcc943db435f3329b574e4f5ecb2eb9db59ef124/examples/libritts/cosyvoice/conf/cosyvoice.yaml#L170

github-actions[bot] commented 3 weeks ago

This issue is stale because it has been open for 30 days with no activity.