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

train.py运行问题 #57

Closed ooobsidian closed 3 years ago

ooobsidian commented 4 years ago

您好,谢谢您提供如此优秀的项目。 在预训练结束之后,执行train.py,会卡在select_batch里,具体情况就是会卡在beginning to select..........这里。进select_batch.py后发现inds的len是1,所以for jj in range(1,len(inds))这个循环无法执行,导致while死循环出不来。请问该如何解决,谢谢!

ooobsidian commented 4 years ago

@Walleclipse 能请您答复一下嘛

Walleclipse commented 4 years ago

你好! len(inds)=1 说明这个speaker只有一个语音,这样是无法计算 triplet loss的,这个项目要求,一个speaker至少要有2段语音。 我提供的 LibriSpeechSamples/train-clean-100/里面的数据是满足要求的。你可以重新运行 preprocess.py试试,或者检查其他数据准备过程

ooobsidian commented 4 years ago

@Walleclipse 请问一下该网络结构最多可以训练多少说话人,或者说训练多少说话人的效果最好?期待您的答复!

Walleclipse commented 4 years ago

你好, 理论上有多少人应该都可以训练的,但是效果如何,我没测试过。 如果你要用到实际的场景,似乎说话人多一点比较好。 比如说 我用 librispeech数据集训练,其中训练集采用train-clean-360,这包含了921 个说话人。性能还挺好的。所以类似数量的说话人应该都可以,当然每个说话人要有足够数量的数据。

ooobsidian commented 4 years ago

@Walleclipse 还有一个问题,就是该项目是否可以对于未训练过/未注册的说话人进行区分?也就是说需要交叉验证的说话人都不在训练集中。我使用ST-CMDS-20170001_1-OS语料库(855说话人,中文,每人120条语音)训练出模型后进行其他说话人(不在训练集中,10人)的交叉验证,效果并不是很好,误拒率和误识率都比较高,请问您知道是为什么吗?

Walleclipse commented 4 years ago

对于说话者验证任务来说是可以的。 我用的librispeech数据就是这样子的, 训练用的 train-clean-100 数据集包含 251 个说话人,测试用的 test-clean 数据包含40 个说话者,并且这40个都没有出现在训练集中。我给出的测试结果也是在这种书上给出来的,请查看 deep_speaker实验报告.pdf 如果你测试的是说话这是别的eer,应该来说是差不多的。如果效果很差,可能是你的训练集和测试集分布相差很大。

yaoyao1206 commented 3 years ago

Traceback (most recent call last): File "train.py", line 21, in import select_batch File "/data/Deep_Speaker-speaker_recognition_system/select_batch.py", line 18, in from pre_process import data_catalog File "/data/Deep_Speaker-speaker_recognition_system/pre_process.py", line 18, in np.set_printoptions(threshold=np.nan) File "/opt/conda/lib/python3.6/site-packages/numpy/core/arrayprint.py", line 245, in set_printoptions floatmode, legacy) File "/opt/conda/lib/python3.6/site-packages/numpy/core/arrayprint.py", line 86, in _make_options_dict raise ValueError("threshold must be non-NAN, try " ValueError: threshold must be non-NAN, try sys.maxsize for untruncated representation 师兄您好出现这个问题该如何解决啊555

Walleclipse commented 3 years ago

你好, 把pre_process.py的第18行注释掉就行,也就是: #np.set_printoptions(threshold=np.nan)

yaoyao1206 commented 3 years ago

Traceback (most recent call last): File "train.py", line 187, in main() File "train.py", line 91, in main pre_model.load_weights(last_checkpoint) File "/opt/conda/lib/python3.6/site-packages/keras/engine/network.py", line 1166, in load_weights f, self.layers, reshape=reshape) File "/opt/conda/lib/python3.6/site-packages/keras/engine/saving.py", line 1021, in load_weights_from_hdf5_group g = f[name] File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper File "/opt/conda/lib/python3.6/site-packages/h5py/_hl/group.py", line 264, in getitem oid = h5o.open(self.id, self._e(name), lapl=self._lapl) File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper File "h5py/h5o.pyx", line 190, in h5py.h5o.open KeyError: "Unable to open object (object 'res4_1_branch_2a_bn' doesn't exist)" 师兄我train-clean-100 数据集上 softmax 预训练模型后,将PRE_TRAIN 改为 True再运行train.py出现上面这个报错,请问该如何解决

Walleclipse commented 3 years ago

你好, 你先完整的跑完 pretraining.py 了么?那么请检查一下softmax预训练后保存的模型路径,是否准确。预训练模型的保存路径在 pretraining.py158行那里,根目录是 c.PRE_CHECKPOINT_FOLDER. 如果路径正常,那么进行 train.py就可以了。