Walleclipse / Deep_Speaker-speaker_recognition_system

Keras implementation of ‘’Deep Speaker: an End-to-End Neural Speaker Embedding System‘’ (speaker recognition)
245 stars 81 forks source link

自己采集数据训练遇到的问题 #43

Closed dongzhenguo2016 closed 3 years ago

dongzhenguo2016 commented 4 years ago

学长你好!又打扰你,非常抱歉。 我现在能把学长的代码跑通了,现在我想采集我们实验室5个人的数据,让网络能学会去辨认这5个人。 1、有个问题就是我们需要用什么设备去录制语音吗? 2、我刚才用手机的录音机去录,得到的是.m4a格式的语音,是不是通过ffmpeg将.m4a格式再转化成.wav格式的语音呀? 3、train-clean-100中的语音都是英语,我们在制作自己的数据集的时候,需要说英文吗?还是说中文也可以。 4、我感觉train-clean-100中的语音,他们的说话音量都很稳定,感觉没什么噪音,我们在录制自己语音的时候,该怎么尽量克服呢? 5、train-clean-100中每个speaker的语音片段大概在110-130个左右,每个片段大概10秒左右,也有3秒的,我们在录制自己语音的时候,需要一段一段的录制呢?还是让每个人连续说上20分钟的话,我们再将这个长语音用什么工具切成一个一个的语音片段? 谢谢学长,万分感谢

Walleclipse commented 4 years ago

你好,

  1. 应该用手机或者电脑或者其他专业录音设备都可以,当然专业一点的设备声音的失真小,效果好
  2. 录音的格式是什么格式都无所谓,最后为了方便需要转换成 .wav,你可以从网上找一找相应的方法或转换程序,反正转换成 .wav 就可以了
  3. 不需要说英文,只要发出声音就可以了,因为本项目的关注点是说话者的声音特征而不是声音所表达的意义。
  4. train-clean-100 专门做过去噪音的处理,具体的方法我也不清楚。在录制过程当中尽量在安静环境下录制吧,尽量不要有外界噪音。录制完以后需要做去除静音的操作,当然如果你直接用 pre_process.py, 那么该程序已经包含了去掉静音的操作了。
  5. 一段一段录也行,或者先录长段录音,再切分也可以,这都无所谓。
LittleMaWen commented 4 years ago

我也想自己采集数据进行实验。初步想法是选定4男4女,录音20分钟/人。有几个问题想要向您进一步确认: 1.每个人录音的内容可以相同,也可以不同么? 2.训练集选择其中3男3女,测试集选择剩余的1男1女以及被选中训练集的1男1女,可以么? 3.录音完成后,我将音频全部切分为10秒片段,可以么?

Walleclipse commented 4 years ago
  1. 录音的内容可不重要,可以相同也可以不同
  2. 一般情况下,测试集当中的人不会在训练集里出现,所以最好不要再选择训练集的1男1女当测试
  3. 可以切的更小,比如说2秒一个片段,然后运行 pre_process.py 就会先把静音去掉,随后会切成大概1.6s的程度。这可以在 constants.py里面的 TRUNCATE_SOUND_SECONDS 修改。 你可以看一下 pre_process.py 代码。
  4. 建议选定的人物的数量更多一点,最少大概几十个。
LittleMaWen commented 4 years ago

我想进行测试时,可以得到这样的结果:测试一段语音,如果说话人在训练时出现过,就输出说话人姓名,如果说话人在训练时没出现过,就输出没出现过。所以如果想达到这样的效果,那么测试集中的人还是应该在训练集中出现一部分才对,这样才是声纹识别吧,请问学长为什么说测试集中的人不在训练集中出现?我不是太明白

Walleclipse commented 4 years ago

你好, 你说的项目应该是speaker classification。 和我这个repo不太一样。 "如果说话人在训练时出现过,就输出说话人姓名,如果说话人在训练时没出现过,就输出没出现过"这个是分类问题,你可以训练分类模型,这个时候测试集中的人应该出现在训练集中。 但是我这个repo只是speaker embedding,最后输出512维的embedding,我们只是验证两段语音是否来自同一个人。也就是测试集上我取两个语音,分别得到这两个语音的embedding,然后查看这两个语音是否出自同一个人