auspicious3000 / SpeechSplit

Unsupervised Speech Decomposition Via Triple Information Bottleneck
http://arxiv.org/abs/2004.11284
MIT License
636 stars 92 forks source link

关于demo.ipynb的一些问题 #77

Open IndowK opened 1 year ago

IndowK commented 1 year ago

作者您好,我的代码基础比较一般,在运行demo.ipynb的时候,我对以下代码感到疑惑: sbmt_i = metadata[0] emb_org = torch.from_numpy(sbmt_i[1]).to(device) x_org, f0_org, len_org, uid_org = sbmt_i[2] 我大概理解了一下,sbmt_i代表的是原说话人的语音信息,sbmt_i[0]指的是说话人身份,sbmt_i[1]指的是一个one-hot编码(我不太理解这个编码的用处),sbmt_i[2]是一个四维的元组,分别代表mel信息,f0信息,mel曲线和f0曲线的长度,uid 我想知道这个uid是怎么获得的,它是什么含义? 以及我想知道x_org, f0_org的获得方式。 希望得到您宝贵的回复!

auspicious3000 commented 1 year ago

uid是utterance id,相当于文件名 x_org和f0_org的计算方式在make_spect_f0.py里面

IndowK commented 1 year ago

感谢您的回复! 我还有一些不明白的地方:1、用于训练的数据集是拼接后的音频,那训练的时候会用到uid吗?2、您提供的demo.pkl中的两个说话人的uid都是003002,这个意思是说话人的第三个语音文件中的第二个语句吗?

auspicious3000 commented 1 year ago

1.用不到 2.是的

IndowK commented 1 year ago

感谢您的回复! 我还有一些问题:demo.pkl中的one-hot向量,是由makemetadata中的这段代码生成的吗?: for speaker in sorted(subdirList): print('Processing speaker: %s' % speaker) utterances = [] utterances.append(speaker) , _, fileList = next(os.walk(os.path.join(dirName,speaker)))

# use hardcoded onehot embeddings in order to be cosistent with the test speakers
# modify as needed
# may use generalized speaker embedding for zero-shot conversion
spkid = np.zeros((82,), dtype=np.float32)
if speaker == 'p226':
    spkid[1] = 1.0
else:
    spkid[7] = 1.0
utterances.append(spkid)

以及: 我想知道为什么除了p226的说话人,其他的说话人的one-hot向量都相同? 我在构建我自己的demo.pkl的时候,one-hot向量要与训练时保持一致吗?

auspicious3000 commented 1 year ago

因为demo里只有两个人

需要一致