auspicious3000/SpeechSplit

关于demo.ipynb的一些问题

IndowK opened this issue · 5 comments

IndowK commented

作者您好,我的代码基础比较一般,在运行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的获得方式。
希望得到您宝贵的回复!

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

IndowK commented

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

1.用不到
2.是的

IndowK commented

感谢您的回复!
我还有一些问题:demo.pkl中的one-hot向量,是由make_metadata中的这段代码生成的吗?:
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向量要与训练时保持一致吗?

因为demo里只有两个人

需要一致