Git Product home page Git Product logo

yeyupiaoling / voiceprintrecognition-pytorch Goto Github PK

View Code? Open in Web Editor NEW
701.0 10.0 112.0 2.17 MB

This project uses a variety of advanced voiceprint recognition models such as EcapaTdnn, ResNetSE, ERes2Net, CAM++, etc. It is not excluded that more models will be supported in the future. At the same time, this project also supports MelSpectrogram, Spectrogram data preprocessing methods

License: Apache License 2.0

Python 100.00%
pytorch voice-recognition arcface speaker-recognition ecapa-tdnn

voiceprintrecognition-pytorch's Introduction

简体中文 | English

基于Pytorch实现的声纹识别系统

python version GitHub forks GitHub Repo stars GitHub 支持系统

本分支为1.0版本,如果要使用之前的0.3版本请在0.3分支使用。本项目使用了EcapaTdnn、ResNetSE、ERes2Net、CAM++等多种先进的声纹识别模型,不排除以后会支持更多模型,同时本项目也支持了MelSpectrogram、Spectrogram、MFCC、Fbank等多种数据预处理方法,使用了ArcFace Loss,ArcFace loss:Additive Angular Margin Loss(加性角度间隔损失函数),对应项目中的AAMLoss,对特征向量和权重归一化,对θ加上角度间隔m,角度间隔比余弦间隔在对角度的影响更加直接,除此之外,还支持AMLoss、ARMLoss、CELoss等多种损失函数。

本项目是如果对你有帮助,欢迎Star,避免之后需要找不到了。

欢迎大家扫码入知识星球或者QQ群讨论,知识星球里面提供项目的模型文件和博主其他相关项目的模型文件,也包括其他一些资源。

知识星球 QQ群

使用环境:

  • Anaconda 3
  • Python 3.11
  • Pytorch 2.0.1
  • Windows 11 or Ubuntu 22.04

项目特性

  1. 支持模型:EcapaTdnn、TDNN、Res2Net、ResNetSE、ERes2Net、CAM++
  2. 支持池化层:AttentiveStatsPool(ASP)、SelfAttentivePooling(SAP)、TemporalStatisticsPooling(TSP)、TemporalAveragePooling(TAP)、TemporalStatsPool(TSTP)
  3. 支持损失函数:AAMLoss、SphereFace2、AMLoss、ARMLoss、CELoss、SubCenterLoss、TripletAngularMarginLoss
  4. 支持预处理方法:MelSpectrogram、Spectrogram、MFCC、Fbank、Wav2vec2.0、WavLM

模型论文:

模型下载

训练CN-Celeb数据,共有2796个说话人。

模型 Params(M) 数据集 train speakers threshold EER MinDCF 模型下载
CAM++ 6.8 CN-Celeb 2796 0.26 0.09557 0.53516 加入知识星球获取
ERes2Net 6.6 CN-Celeb 2796 0.19 0.09980 0.52352 加入知识星球获取
ResNetSE 7.8 CN-Celeb 2796 0.20 0.10149 0.55185 加入知识星球获取
EcapaTdnn 6.1 CN-Celeb 2796 0.24 0.10163 0.56543 加入知识星球获取
TDNN 2.6 CN-Celeb 2796 0.23 0.12182 0.62141 加入知识星球获取
Res2Net 5.0 CN-Celeb 2796 0.22 0.14390 0.67961 加入知识星球获取
CAM++ 6.8 更大数据集 2W+ 0.33 0.07874 0.52524 加入知识星球获取
ERes2Net 55.1 其他数据集 20W+ 0.36 0.02936 0.18355 加入知识星球获取
ERes2NetV2 56.2 其他数据集 20W+ 0.36 0.03847 0.24301 加入知识星球获取
CAM++ 6.8 其他数据集 20W+ 0.29 0.04765 0.31436 加入知识星球获取

说明:

  1. 评估的测试集为CN-Celeb的测试集,包含196个说话人。
  2. 使用语速增强分类大小翻三倍speed_perturb_3_class: True
  3. 使用的预处理方法为Fbank,损失函数为AAMLoss
  4. 参数数量不包含了分类器的参数数量。

训练VoxCeleb1&2数据,共有7205个说话人。

模型 Params(M) 数据集 train speakers threshold EER MinDCF 模型下载
CAM++ 6.8 VoxCeleb1&2 7205 0.23 0.02659 0.18604 加入知识星球获取
ERes2Net 6.6 VoxCeleb1&2 7205 0.23 0.03648 0.25508 加入知识星球获取
ResNetSE 7.8 VoxCeleb1&2 7205 0.23 0.03668 0.27881 加入知识星球获取
EcapaTdnn 6.1 VoxCeleb1&2 7205 0.26 0.02610 0.18008 加入知识星球获取
TDNN 2.6 VoxCeleb1&2 7205 0.26 0.03963 0.31433 加入知识星球获取
Res2Net 5.0 VoxCeleb1&2 7205 0.20 0.04290 0.41416 加入知识星球获取
CAM++ 6.8 更大数据集 2W+ 0.28 0.03182 0.23731 加入知识星球获取
ERes2Net 55.1 其他数据集 20W+ 0.53 0.08904 0.62130 加入知识星球获取
ERes2NetV2 56.2 其他数据集 20W+ 0.52 0.08649 0.64193 加入知识星球获取
CAM++ 6.8 其他数据集 20W+ 0.49 0.10334 0.71200 加入知识星球获取

说明:

  1. 评估的测试集为VoxCeleb1&2的测试集,包含158个说话人。
  2. 使用语速增强分类大小翻三倍speed_perturb_3_class: True
  3. 使用的预处理方法为Fbank,损失函数为AAMLoss
  4. 参数数量不包含了分类器的参数数量。

预处理方法效果对比实验

预处理方法 数据集 train speakers threshold EER MinDCF 模型下载
Fbank CN-Celeb 2796 0.14574 0.10988 0.58955 加入知识星球获取
MFCC CN-Celeb 2796 0.14868 0.11483 0.61275 加入知识星球获取
Spectrogram CN-Celeb 2796 0.14962 0.11613 0.60057 加入知识星球获取
MelSpectrogram CN-Celeb 2796 0.13458 0.12498 0.60741 加入知识星球获取
wavlm-base-plus CN-Celeb 2796 0.14166 0.13247 0.62451 加入知识星球获取

说明:

  1. 评估的测试集为CN-Celeb的测试集,包含196个说话人。
  2. 实验数据为CN-Celeb,实验模型为CAM++,损失函数为AAMLoss
  3. 数据使用extract_features.py提前提取特征,也就是说训练中没有使用对音频的数据增强。
  4. w2v-bert-2.0wav2vec2-large-xlsr-53是多语言数据预训练得到的,wavlm-base-pluswavlm-large的预训练数据仅用英文。

损失函数效果对比实验

损失函数 数据集 train speakers threshold EER MinDCF 模型下载
AAMLoss CN-Celeb 2796 0.14574 0.10988 0.58955 加入知识星球获取
TripletAngularMarginLoss CN-Celeb 2796 0.30838 0.11169 0.61810 加入知识星球获取
SphereFace2 CN-Celeb 2796 0.20377 0.11309 0.61536 加入知识星球获取
SubCenterLoss CN-Celeb 2796 0.13126 0.11775 0.56995 加入知识星球获取
ARMLoss CN-Celeb 2796 0.14563 0.11805 0.57171 加入知识星球获取
AMLoss CN-Celeb 2796 0.12870 0.12301 0.63263 加入知识星球获取
CELoss CN-Celeb 2796 0.13607 0.12684 0.65176 加入知识星球获取

说明:

  1. 评估的测试集为CN-Celeb的测试集,包含196个说话人。
  2. 实验数据为CN-Celeb,实验模型为CAM++,预处理方法为Fbank
  3. 数据使用extract_features.py提前提取特征,也就是说训练中没有使用对音频的数据增强。

安装环境

  • 首先安装的是Pytorch的GPU版本,如果已经安装过了,请跳过。
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia
  • 安装ppvector库。

使用pip安装,命令如下:

python -m pip install mvector -U -i https://pypi.tuna.tsinghua.edu.cn/simple

建议源码安装,源码安装能保证使用最新代码。

git clone https://github.com/yeyupiaoling/VoiceprintRecognition-Pytorch.git
cd VoiceprintRecognition-Pytorch/
pip install .

创建数据

本教程笔者使用的是CN-Celeb,这个数据集一共有约3000个人的语音数据,有65W+条语音数据,下载之后要解压数据集到dataset目录,另外如果要评估,还需要下载CN-Celeb的测试集。如果读者有其他更好的数据集,可以混合在一起使用,但最好是要用python的工具模块aukit处理音频,降噪和去除静音。

首先是创建一个数据列表,数据列表的格式为<语音文件路径\t语音分类标签>,创建这个列表主要是方便之后的读取,也是方便读取使用其他的语音数据集,语音分类标签是指说话人的唯一ID,不同的语音数据集,可以通过编写对应的生成数据列表的函数,把这些数据集都写在同一个数据列表中。

执行create_data.py程序完成数据准备。

python create_data.py

执行上面的程序之后,会生成以下的数据格式,如果要自定义数据,参考如下数据列表,前面是音频的相对路径,后面的是该音频对应的说话人的标签,就跟分类一样。自定义数据集的注意,测试数据列表的ID可以不用跟训练的ID一样,也就是说测试的数据的说话人可以不用出现在训练集,只要保证测试数据列表中同一个人相同的ID即可。

dataset/CN-Celeb2_flac/data/id11999/recitation-03-019.flac      2795
dataset/CN-Celeb2_flac/data/id11999/recitation-10-023.flac      2795
dataset/CN-Celeb2_flac/data/id11999/recitation-06-025.flac      2795
dataset/CN-Celeb2_flac/data/id11999/recitation-04-014.flac      2795
dataset/CN-Celeb2_flac/data/id11999/recitation-06-030.flac      2795
dataset/CN-Celeb2_flac/data/id11999/recitation-10-032.flac      2795
dataset/CN-Celeb2_flac/data/id11999/recitation-06-028.flac      2795
dataset/CN-Celeb2_flac/data/id11999/recitation-10-031.flac      2795
dataset/CN-Celeb2_flac/data/id11999/recitation-05-003.flac      2795
dataset/CN-Celeb2_flac/data/id11999/recitation-04-017.flac      2795
dataset/CN-Celeb2_flac/data/id11999/recitation-10-016.flac      2795
dataset/CN-Celeb2_flac/data/id11999/recitation-09-001.flac      2795
dataset/CN-Celeb2_flac/data/id11999/recitation-05-010.flac      2795

修改预处理方法(可选)

配置文件中默认使用的是Fbank预处理方法,如果要使用其他预处理方法,可以修改配置文件中的安装下面方式修改,具体的值可以根据自己情况修改。如果不清楚如何设置参数,可以直接删除该部分,直接使用默认值。

# 数据预处理参数
preprocess_conf:
  # 是否使用HF上的Wav2Vec2类似模型提取音频特征
  use_hf_model: False
  # 音频预处理方法,也可以叫特征提取方法
  # 当use_hf_model为False时,支持:MelSpectrogram、Spectrogram、MFCC、Fbank
  # 当use_hf_model为True时,指定的是HuggingFace的模型或者本地路径,比如facebook/w2v-bert-2.0或者./feature_models/w2v-bert-2.0
  feature_method: 'Fbank'
  # 当use_hf_model为False时,设置API参数,更参数查看对应API,不清楚的可以直接删除该部分,直接使用默认值。
  # 当use_hf_model为True时,可以设置参数use_gpu,指定是否使用GPU提取特征
  method_args:
    sample_frequency: 16000
    num_mel_bins: 80

提取特征(可选)

在训练过程中,首先是要读取音频数据,然后提取特征,最后再进行训练。其中读取音频数据、提取特征也是比较消耗时间的,所以我们可以选择提前提取好取特征,训练模型的是就可以直接加载提取好的特征,这样训练速度会更快。这个提取特征是可选择,如果没有提取好的特征,训练模型的时候就会从读取音频数据,然后提取特征开始。提取特征步骤如下:

  1. 执行extract_features.py,提取特征,特征会保存在dataset/features目录下,并生成新的数据列表train_list_features.txtenroll_list_features.txttrials_list_features.txt
python extract_features.py --configs=configs/cam++.yml --save_dir=dataset/features
  1. 修改配置文件,将dataset_conf.train_listdataset_conf.enroll_listdataset_conf.trials_list修改为train_list_features.txtenroll_list_features.txttrials_list_features.txt

训练模型

使用train.py训练模型,本项目支持多个音频预处理方式,通过configs/ecapa_tdnn.yml配置文件的参数preprocess_conf.feature_method可以指定,MelSpectrogram为梅尔频谱,Spectrogram为语谱图,MFCC梅尔频谱倒谱系数等等。通过参数augment_conf_path可以指定数据增强方式。训练过程中,会使用VisualDL保存训练日志,通过启动VisualDL可以随时查看训练结果,启动命令visualdl --logdir=log --host 0.0.0.0

# 单卡训练
CUDA_VISIBLE_DEVICES=0 python train.py
# 多卡训练
CUDA_VISIBLE_DEVICES=0,1 torchrun --standalone --nnodes=1 --nproc_per_node=2 train.py

训练输出日志:

[2023-08-05 09:52:06.497988 INFO   ] utils:print_arguments:13 - ----------- 额外配置参数 -----------
[2023-08-05 09:52:06.498094 INFO   ] utils:print_arguments:15 - configs: configs/ecapa_tdnn.yml
[2023-08-05 09:52:06.498149 INFO   ] utils:print_arguments:15 - do_eval: True
[2023-08-05 09:52:06.498191 INFO   ] utils:print_arguments:15 - local_rank: 0
[2023-08-05 09:52:06.498230 INFO   ] utils:print_arguments:15 - pretrained_model: None
[2023-08-05 09:52:06.498269 INFO   ] utils:print_arguments:15 - resume_model: None
[2023-08-05 09:52:06.498306 INFO   ] utils:print_arguments:15 - save_model_path: models/
[2023-08-05 09:52:06.498342 INFO   ] utils:print_arguments:15 - use_gpu: True
[2023-08-05 09:52:06.498378 INFO   ] utils:print_arguments:16 - ------------------------------------------------
[2023-08-05 09:52:06.513761 INFO   ] utils:print_arguments:18 - ----------- 配置文件参数 -----------
[2023-08-05 09:52:06.513906 INFO   ] utils:print_arguments:21 - dataset_conf:
[2023-08-05 09:52:06.513957 INFO   ] utils:print_arguments:24 -         dataLoader:
[2023-08-05 09:52:06.513995 INFO   ] utils:print_arguments:26 -                 batch_size: 64
[2023-08-05 09:52:06.514031 INFO   ] utils:print_arguments:26 -                 num_workers: 4
[2023-08-05 09:52:06.514066 INFO   ] utils:print_arguments:28 -         do_vad: False
[2023-08-05 09:52:06.514101 INFO   ] utils:print_arguments:28 -         enroll_list: dataset/enroll_list.txt
[2023-08-05 09:52:06.514135 INFO   ] utils:print_arguments:24 -         eval_conf:
[2023-08-05 09:52:06.514169 INFO   ] utils:print_arguments:26 -                 batch_size: 1
[2023-08-05 09:52:06.514203 INFO   ] utils:print_arguments:26 -                 max_duration: 20
[2023-08-05 09:52:06.514237 INFO   ] utils:print_arguments:28 -         max_duration: 3
[2023-08-05 09:52:06.514274 INFO   ] utils:print_arguments:28 -         min_duration: 0.5
[2023-08-05 09:52:06.514308 INFO   ] utils:print_arguments:28 -         noise_aug_prob: 0.2
[2023-08-05 09:52:06.514342 INFO   ] utils:print_arguments:28 -         noise_dir: dataset/noise
[2023-08-05 09:52:06.514374 INFO   ] utils:print_arguments:28 -         num_speakers: 3242
[2023-08-05 09:52:06.514408 INFO   ] utils:print_arguments:28 -         sample_rate: 16000
[2023-08-05 09:52:06.514441 INFO   ] utils:print_arguments:28 -         speed_perturb: True
[2023-08-05 09:52:06.514475 INFO   ] utils:print_arguments:28 -         target_dB: -20
[2023-08-05 09:52:06.514508 INFO   ] utils:print_arguments:28 -         train_list: dataset/train_list.txt
[2023-08-05 09:52:06.514542 INFO   ] utils:print_arguments:28 -         trials_list: dataset/trials_list.txt
[2023-08-05 09:52:06.514575 INFO   ] utils:print_arguments:28 -         use_dB_normalization: True
[2023-08-05 09:52:06.514609 INFO   ] utils:print_arguments:21 - loss_conf:
[2023-08-05 09:52:06.514643 INFO   ] utils:print_arguments:24 -         args:
[2023-08-05 09:52:06.514678 INFO   ] utils:print_arguments:26 -                 easy_margin: False
[2023-08-05 09:52:06.514713 INFO   ] utils:print_arguments:26 -                 margin: 0.2
[2023-08-05 09:52:06.514746 INFO   ] utils:print_arguments:26 -                 scale: 32
[2023-08-05 09:52:06.514779 INFO   ] utils:print_arguments:24 -         margin_scheduler_args:
[2023-08-05 09:52:06.514814 INFO   ] utils:print_arguments:26 -                 final_margin: 0.3
[2023-08-05 09:52:06.514848 INFO   ] utils:print_arguments:28 -         use_loss: AAMLoss
[2023-08-05 09:52:06.514882 INFO   ] utils:print_arguments:28 -         use_margin_scheduler: True
[2023-08-05 09:52:06.514915 INFO   ] utils:print_arguments:21 - model_conf:
[2023-08-05 09:52:06.514950 INFO   ] utils:print_arguments:24 -         backbone:
[2023-08-05 09:52:06.514984 INFO   ] utils:print_arguments:26 -                 embd_dim: 192
[2023-08-05 09:52:06.515017 INFO   ] utils:print_arguments:26 -                 pooling_type: ASP
[2023-08-05 09:52:06.515050 INFO   ] utils:print_arguments:24 -         classifier:
[2023-08-05 09:52:06.515084 INFO   ] utils:print_arguments:26 -                 num_blocks: 0
[2023-08-05 09:52:06.515118 INFO   ] utils:print_arguments:21 - optimizer_conf:
[2023-08-05 09:52:06.515154 INFO   ] utils:print_arguments:28 -         learning_rate: 0.001
[2023-08-05 09:52:06.515188 INFO   ] utils:print_arguments:28 -         optimizer: Adam
[2023-08-05 09:52:06.515221 INFO   ] utils:print_arguments:28 -         scheduler: CosineAnnealingLR
[2023-08-05 09:52:06.515254 INFO   ] utils:print_arguments:28 -         scheduler_args: None
[2023-08-05 09:52:06.515289 INFO   ] utils:print_arguments:28 -         weight_decay: 1e-06
[2023-08-05 09:52:06.515323 INFO   ] utils:print_arguments:21 - preprocess_conf:
[2023-08-05 09:52:06.515357 INFO   ] utils:print_arguments:28 -         feature_method: MelSpectrogram
[2023-08-05 09:52:06.515390 INFO   ] utils:print_arguments:24 -         method_args:
[2023-08-05 09:52:06.515426 INFO   ] utils:print_arguments:26 -                 f_max: 14000.0
[2023-08-05 09:52:06.515460 INFO   ] utils:print_arguments:26 -                 f_min: 50.0
[2023-08-05 09:52:06.515493 INFO   ] utils:print_arguments:26 -                 hop_length: 320
[2023-08-05 09:52:06.515527 INFO   ] utils:print_arguments:26 -                 n_fft: 1024
[2023-08-05 09:52:06.515560 INFO   ] utils:print_arguments:26 -                 n_mels: 64
[2023-08-05 09:52:06.515593 INFO   ] utils:print_arguments:26 -                 sample_rate: 16000
[2023-08-05 09:52:06.515626 INFO   ] utils:print_arguments:26 -                 win_length: 1024
[2023-08-05 09:52:06.515660 INFO   ] utils:print_arguments:21 - train_conf:
[2023-08-05 09:52:06.515694 INFO   ] utils:print_arguments:28 -         log_interval: 100
[2023-08-05 09:52:06.515728 INFO   ] utils:print_arguments:28 -         max_epoch: 30
[2023-08-05 09:52:06.515761 INFO   ] utils:print_arguments:30 - use_model: EcapaTdnn
[2023-08-05 09:52:06.515794 INFO   ] utils:print_arguments:31 - ------------------------------------------------
······
===============================================================================================
Layer (type:depth-idx)                        Output Shape              Param #
===============================================================================================
Sequential                                    [1, 9726]                 --
├─EcapaTdnn: 1-1                              [1, 192]                  --
│    └─Conv1dReluBn: 2-1                      [1, 512, 98]              --
│    │    └─Conv1d: 3-1                       [1, 512, 98]              163,840
│    │    └─BatchNorm1d: 3-2                  [1, 512, 98]              1,024
│    └─Sequential: 2-2                        [1, 512, 98]              --
│    │    └─Conv1dReluBn: 3-3                 [1, 512, 98]              263,168
│    │    └─Res2Conv1dReluBn: 3-4             [1, 512, 98]              86,912
│    │    └─Conv1dReluBn: 3-5                 [1, 512, 98]              263,168
│    │    └─SE_Connect: 3-6                   [1, 512, 98]              262,912
│    └─Sequential: 2-3                        [1, 512, 98]              --
│    │    └─Conv1dReluBn: 3-7                 [1, 512, 98]              263,168
│    │    └─Res2Conv1dReluBn: 3-8             [1, 512, 98]              86,912
│    │    └─Conv1dReluBn: 3-9                 [1, 512, 98]              263,168
│    │    └─SE_Connect: 3-10                  [1, 512, 98]              262,912
│    └─Sequential: 2-4                        [1, 512, 98]              --
│    │    └─Conv1dReluBn: 3-11                [1, 512, 98]              263,168
│    │    └─Res2Conv1dReluBn: 3-12            [1, 512, 98]              86,912
│    │    └─Conv1dReluBn: 3-13                [1, 512, 98]              263,168
│    │    └─SE_Connect: 3-14                  [1, 512, 98]              262,912
│    └─Conv1d: 2-5                            [1, 1536, 98]             2,360,832
│    └─AttentiveStatsPool: 2-6                [1, 3072]                 --
│    │    └─Conv1d: 3-15                      [1, 128, 98]              196,736
│    │    └─Conv1d: 3-16                      [1, 1536, 98]             198,144
│    └─BatchNorm1d: 2-7                       [1, 3072]                 6,144
│    └─Linear: 2-8                            [1, 192]                  590,016
│    └─BatchNorm1d: 2-9                       [1, 192]                  384
├─SpeakerIdentification: 1-2                  [1, 9726]                 1,867,392
===============================================================================================
Total params: 8,012,992
Trainable params: 8,012,992
Non-trainable params: 0
Total mult-adds (M): 468.81
===============================================================================================
Input size (MB): 0.03
Forward/backward pass size (MB): 10.36
Params size (MB): 32.05
Estimated Total Size (MB): 42.44
===============================================================================================
[2023-08-05 09:52:08.084231 INFO   ] trainer:train:388 - 训练数据:874175
[2023-08-05 09:52:09.186542 INFO   ] trainer:__train_epoch:334 - Train epoch: [1/30], batch: [0/13659], loss: 11.95824, accuracy: 0.00000, learning rate: 0.00100000, speed: 58.09 data/sec, eta: 5 days, 5:24:08
[2023-08-05 09:52:22.477905 INFO   ] trainer:__train_epoch:334 - Train epoch: [1/30], batch: [100/13659], loss: 10.35675, accuracy: 0.00278, learning rate: 0.00100000, speed: 481.65 data/sec, eta: 15:07:15
[2023-08-05 09:52:35.948581 INFO   ] trainer:__train_epoch:334 - Train epoch: [1/30], batch: [200/13659], loss: 10.22089, accuracy: 0.00505, learning rate: 0.00100000, speed: 475.27 data/sec, eta: 15:19:12
[2023-08-05 09:52:49.249098 INFO   ] trainer:__train_epoch:334 - Train epoch: [1/30], batch: [300/13659], loss: 10.00268, accuracy: 0.00706, learning rate: 0.00100000, speed: 481.45 data/sec, eta: 15:07:11
[2023-08-05 09:53:03.716015 INFO   ] trainer:__train_epoch:334 - Train epoch: [1/30], batch: [400/13659], loss: 9.76052, accuracy: 0.00830, learning rate: 0.00100000, speed: 442.74 data/sec, eta: 16:26:16
[2023-08-05 09:53:18.258807 INFO   ] trainer:__train_epoch:334 - Train epoch: [1/30], batch: [500/13659], loss: 9.50189, accuracy: 0.01060, learning rate: 0.00100000, speed: 440.46 data/sec, eta: 16:31:08
[2023-08-05 09:53:31.618354 INFO   ] trainer:__train_epoch:334 - Train epoch: [1/30], batch: [600/13659], loss: 9.26083, accuracy: 0.01256, learning rate: 0.00100000, speed: 479.50 data/sec, eta: 15:10:12
[2023-08-05 09:53:45.439642 INFO   ] trainer:__train_epoch:334 - Train epoch: [1/30], batch: [700/13659], loss: 9.03548, accuracy: 0.01449, learning rate: 0.00099999, speed: 463.63 data/sec, eta: 15:41:08

启动VisualDL:visualdl --logdir=log --host 0.0.0.0,VisualDL页面如下:

VisualDL页面

评估模型

训练结束之后会保存预测模型,我们用预测模型来预测测试集中的音频特征,然后使用音频特征进行两两对比,计算EER和MinDCF。

python eval.py

输出类似如下:

······
------------------------------------------------
W0425 08:27:32.057426 17654 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.5, Driver API Version: 11.6, Runtime API Version: 10.2
W0425 08:27:32.065165 17654 device_context.cc:465] device: 0, cuDNN Version: 7.6.
[2023-03-16 20:20:47.195908 INFO   ] trainer:evaluate:341 - 成功加载模型:models/EcapaTdnn_Fbank/best_model/model.pth
100%|███████████████████████████| 84/84 [00:28<00:00,  2.95it/s]
开始两两对比音频特征...
100%|███████████████████████████| 5332/5332 [00:05<00:00, 1027.83it/s]
评估消耗时间:65s,threshold:0.26,EER: 0.14739, MinDCF: 0.41999

推理接口

下面给出了几个常用的接口,更多接口请参考mvector/predict.py,也可以往下看声纹对比声纹识别的例子。

from mvector.predict import MVectorPredictor

predictor = MVectorPredictor(configs='configs/cam++.yml',
                             model_path='models/CAMPPlus_Fbank/best_model/')
# 获取音频特征
embedding = predictor.predict(audio_data='dataset/a_1.wav')
# 获取两个音频的相似度
similarity = predictor.contrast(audio_data1='dataset/a_1.wav', audio_data2='dataset/a_2.wav')

# 注册用户音频
predictor.register(user_name='夜雨飘零', audio_data='dataset/test.wav')
# 识别用户音频
name, score = predictor.recognition(audio_data='dataset/test1.wav')
# 获取所有用户
users_name = predictor.get_users()
# 删除用户音频
predictor.remove_user(user_name='夜雨飘零')

声纹对比

下面开始实现声纹对比,创建infer_contrast.py程序,首先介绍几个重要的函数,predict()函数是可以获取声纹特征,predict_batch()函数是可以获取一批的声纹特征,contrast()函数可以对比两条音频的相似度,register()函数注册一条音频到声纹库里面,recognition()函输入一条音频并且从声纹库里面对比识别,remove_user()函数移除你好。声纹库里面的注册人。我们输入两个语音,通过预测函数获取他们的特征数据,使用这个特征数据可以求他们的对角余弦值,得到的结果可以作为他们相识度。对于这个相识度的阈值threshold,读者可以根据自己项目的准确度要求进行修改。

python infer_contrast.py --audio_path1=audio/a_1.wav --audio_path2=audio/b_2.wav

输出类似如下:

[2023-04-02 18:30:48.009149 INFO   ] utils:print_arguments:13 - ----------- 额外配置参数 -----------
[2023-04-02 18:30:48.009149 INFO   ] utils:print_arguments:15 - audio_path1: dataset/a_1.wav
[2023-04-02 18:30:48.009149 INFO   ] utils:print_arguments:15 - audio_path2: dataset/b_2.wav
[2023-04-02 18:30:48.009149 INFO   ] utils:print_arguments:15 - configs: configs/ecapa_tdnn.yml
[2023-04-02 18:30:48.009149 INFO   ] utils:print_arguments:15 - model_path: models/EcapaTdnn_Fbank/best_model/
[2023-04-02 18:30:48.009149 INFO   ] utils:print_arguments:15 - threshold: 0.6
[2023-04-02 18:30:48.009149 INFO   ] utils:print_arguments:15 - use_gpu: True
[2023-04-02 18:30:48.009149 INFO   ] utils:print_arguments:16 - ------------------------------------------------
······································································
W0425 08:29:10.006249 21121 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.5, Driver API Version: 11.6, Runtime API Version: 10.2
W0425 08:29:10.008555 21121 device_context.cc:465] device: 0, cuDNN Version: 7.6.
成功加载模型参数和优化方法参数:models/EcapaTdnn_Fbank/best_model/model.pth
audio/a_1.wav 和 audio/b_2.wav 不是同一个人,相似度为:-0.09565544128417969

同时还提供了有GUI界面的声纹对比程序,执行infer_contrast_gui.py启动程序,界面如下,分别选择两个音频,点击开始判断,就可以判断它们是否是同一个人。

声纹对比界面

声纹识别

在新闻识别里面主要使用到register()函数和recognition()函数,首先使用register()函数函数来注册音频到声纹库里面,也可以直接把文件添加到audio_db文件夹里面,使用的时候通过recognition()函数来发起识别,输入一条音频,就可以从声纹库里面识别到所需要的说话人。

有了上面的声纹识别的函数,读者可以根据自己项目的需求完成声纹识别的方式,例如笔者下面提供的是通过录音来完成声纹识别。首先必须要加载语音库中的语音,语音库文件夹为audio_db,然后用户回车后录音3秒钟,然后程序会自动录音,并使用录音到的音频进行声纹识别,去匹配语音库中的语音,获取用户的信息。通过这样方式,读者也可以修改成通过服务请求的方式完成声纹识别,例如提供一个API供APP调用,用户在APP上通过声纹登录时,把录音到的语音发送到后端完成声纹识别,再把结果返回给APP,前提是用户已经使用语音注册,并成功把语音数据存放在audio_db文件夹中。

python infer_recognition.py

输出类似如下:

[2023-04-02 18:31:20.521040 INFO   ] utils:print_arguments:13 - ----------- 额外配置参数 -----------
[2023-04-02 18:31:20.521040 INFO   ] utils:print_arguments:15 - audio_db_path: audio_db/
[2023-04-02 18:31:20.521040 INFO   ] utils:print_arguments:15 - configs: configs/ecapa_tdnn.yml
[2023-04-02 18:31:20.521040 INFO   ] utils:print_arguments:15 - model_path: models/EcapaTdnn_Fbank/best_model/
[2023-04-02 18:31:20.521040 INFO   ] utils:print_arguments:15 - record_seconds: 3
[2023-04-02 18:31:20.521040 INFO   ] utils:print_arguments:15 - threshold: 0.6
[2023-04-02 18:31:20.521040 INFO   ] utils:print_arguments:15 - use_gpu: True
[2023-04-02 18:31:20.521040 INFO   ] utils:print_arguments:16 - ------------------------------------------------
······································································
W0425 08:30:13.257884 23889 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.5, Driver API Version: 11.6, Runtime API Version: 10.2
W0425 08:30:13.260191 23889 device_context.cc:465] device: 0, cuDNN Version: 7.6.
成功加载模型参数和优化方法参数:models/ecapa_tdnn/model.pth
Loaded 沙瑞金 audio.
Loaded 李达康 audio.
请选择功能,0为注册音频到声纹库,1为执行声纹识别:0
按下回车键开机录音,录音3秒中:
开始录音......
录音已结束!
请输入该音频用户的名称:夜雨飘零
请选择功能,0为注册音频到声纹库,1为执行声纹识别:1
按下回车键开机录音,录音3秒中:
开始录音......
录音已结束!
识别说话的为:夜雨飘零,相似度为:0.920434

同时还提供了有GUI界面的声纹识别程序,执行infer_recognition_gui.py启动,点击注册音频到声纹库按钮,理解开始说话,录制3秒钟,然后输入注册人的名称,之后可以执行声纹识别按钮,然后立即说话,录制3秒钟后,等待识别结果。删除用户按钮可以删除用户。实时识别按钮可以实时识别,可以一直录音,一直识别。

声纹识别界面

其他版本

打赏作者


打赏一块钱支持一下作者

打赏作者

参考资料

  1. https://github.com/PaddlePaddle/PaddleSpeech
  2. https://github.com/yeyupiaoling/PaddlePaddle-MobileFaceNets
  3. https://github.com/yeyupiaoling/PPASR
  4. https://github.com/alibaba-damo-academy/3D-Speaker
  5. https://github.com/wenet-e2e/wespeaker

voiceprintrecognition-pytorch's People

Contributors

yeyupiaoling avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

voiceprintrecognition-pytorch's Issues

打扰了,问一个问题

我在训练的时候发现数据加载得非常慢,具体来说是每一个num_workers加载需要的时间远远大于训练用时,我不知道是哪里出现了问题,谢谢大佬

预测自己的采集的语音

你好,请问预测自己采集的语音时,需要做什么预处理吗,现在直接用模型预测自己采集的语音时,效果不好

提问

大佬,同一说话人说不同语言识别起来效果是不是比较差的捏

create_data出现问题

好像是在MP3转wav的时候报错,wav = AudioSegment.from_mp3(audio_path)这步,网上查了半天没找出办法,不知道作者是否知道解决办法,谢谢!
错误代码:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

多卡训练错误

我已经更新到develop分支最新版本,但是多卡训练会报错,单卡训练没问题

CUDA_VISIBLE_DEVICES=0,1 torchrun --standalone --nnodes=1 --nproc_per_node=2 train.py

截屏2023-03-09 00 30 59

识别问题

输入一个为注册用户的语音,但是匹配到了声纹库中的一个已注册用户,而且还给出相似度0.998...(情况如下图)。

说明:addio_db中的声纹音频内容都是以注册用户名称开头的,例如 123.wav 表示 注册时录音 “123456” ;机器人识别.wav 表示 注册时录音 "机器人识别"
前提1:只用了2000条音频数据训练+测试,而且更改了训练模型的几个参数,learning_rate=0.1, batch_size=8,num_epoch=10
前提2:我也出现了issue中“关于训练”中 “loss: 17.497463, accuracy: 0.000000”,loss正常但是accuracy全部为0的情况
疑问:请问是什么原因导致这种声纹匹配错误的情况下(明明是一个从未在注册库中的陌生说话人录音,但却匹配到了声纹库中的一个注册用户,还给出了0.99的相似度评价),还给出了0.99的相似度评价?

image

about load audio problem

hello, I have two questions.

  1. why choose librosa.stft() and magphase() as input features? why not MFCC?
  2. why choose '257' as spectrum length? I want to train voxceleb dataset, can you give me some advice on data processing and parameter selection?
    Looking forward to reply.

模型加载问题

请问我用您gpu训练好的模型,在我本地部署(有gpu环境)时能正常加载模型,代码跑的通。
但是把项目代码换到一台无gpu环境的电脑上运行,就出了模型加载问题,与cuda有关。 但是在加载模型之前特地把device改为了cpu,还是出现了一样的保存信息。

请问您遇到过这种问题吗?

训练数据

是拿zhvoice下的所有数据来训练的?检查数据错误速度好慢,
对识别音频去静音处理是怎么实现的?

关于代码

你好博主,可以请教一下metric.py这部分的代码吗?方便的话可以加一个联系方式吗q1374128447

数据集规模

老师您好,请问超大的数据集数据量是多大呀,用了多少小时的数据,我从网上找了差不多所有的带有说话人信息的中文语音数据集,包括cn-celeb、aishell3、4和阿里开源的数据集,大约有2000+小时,想用您的模型训练一下对比一下效果

您好,我在运行这个代码时,报了这个错误,我想问下是什么原因?

[2023-05-02 14:34:01.811351 INFO ] utils:print_arguments:28 - max_epoch: 50 [2023-05-02 14:34:01.811389 INFO ] utils:print_arguments:30 - use_loss: AAMLoss [2023-05-02 14:34:01.811427 INFO ] utils:print_arguments:30 - use_model: Res2Net [2023-05-02 14:34:01.811465 INFO ] utils:print_arguments:31 - ------------------------------------------------ /home/hao/anaconda3/envs/tdnn/lib/python3.8/site-packages/torchaudio/functional/functional.py:594: UserWarning: At least one mel filterbank has all zero values. The value for n_mels(64) may be set too high. Or, the value forn_freqs` (513) may be set too low.
warnings.warn(
[2023-05-02 14:34:04.088952 INFO ] augmentation:_parse_pipeline_from:94 - 数据增强配置:{'type': 'noise', 'aug_type': 'audio', 'params': {'min_snr_dB': 10, 'max_snr_dB': 50, 'repetition': 2, 'noise_dir': 'dataset/noise/'}, 'prob': 0.0}
[2023-05-02 14:34:04.089046 INFO ] augmentation:_parse_pipeline_from:94 - 数据增强配置:{'type': 'resample', 'aug_type': 'audio', 'params': {'new_sample_rate': [8000, 32000, 44100, 48000]}, 'prob': 0.0}
[2023-05-02 14:34:04.089107 INFO ] augmentation:_parse_pipeline_from:94 - 数据增强配置:{'type': 'speed', 'aug_type': 'audio', 'params': {'min_speed_rate': 0.9, 'max_speed_rate': 1.1, 'num_rates': 3}, 'prob': 0.5}
[2023-05-02 14:34:04.089164 INFO ] augmentation:_parse_pipeline_from:94 - 数据增强配置:{'type': 'shift', 'aug_type': 'audio', 'params': {'min_shift_ms': -5, 'max_shift_ms': 5}, 'prob': 0.0}
[2023-05-02 14:34:04.089218 INFO ] augmentation:_parse_pipeline_from:94 - 数据增强配置:{'type': 'volume', 'aug_type': 'audio', 'params': {'min_gain_dBFS': -15, 'max_gain_dBFS': 15}, 'prob': 0.5}
Traceback (most recent call last):
File "/home/hao/VoiceprintRecognition-Pytorch-develop/train.py", line 22, in
trainer.train(save_model_path=args.save_model_path,
File "/home/hao/VoiceprintRecognition-Pytorch-develop/mvector/trainer.py", line 334, in train
self.__setup_model(input_size=self.audio_featurizer.feature_dim, is_train=True)
File "/home/hao/VoiceprintRecognition-Pytorch-develop/mvector/trainer.py", line 119, in __setup_model
backbone = Res2Net(input_size=input_size, **self.configs.model_conf)
TypeError: init() got an unexpected keyword argument 'channels'

Process finished with exit code 1`

咨询

非常棒的开源工作!想请问一下,工业界内成熟的声纹识别方案大概是怎么做的呀

关于训练

你好,我用ST-CMDS-20170001_1-OS这个数据集训练了5个epoch了,准确率一直为0,这是正常的吗?
[2021-09-24 14:11:23.609168] Train epoch 5, batch: 3500/5322, loss: 17.497463, accuracy: 0.000000, eta: 11:55:58
[2021-09-24 14:11:59.211179] Train epoch 5, batch: 3600/5322, loss: 21.458420, accuracy: 0.000000, eta: 11:43:53
[2021-09-24 14:12:34.664167] Train epoch 5, batch: 3700/5322, loss: 18.574211, accuracy: 0.000000, eta: 11:47:35
[2021-09-24 14:13:09.979111] Train epoch 5, batch: 3800/5322, loss: 19.353443, accuracy: 0.000000, eta: 11:51:12
[2021-09-24 14:13:45.611116] Train epoch 5, batch: 3900/5322, loss: 19.091064, accuracy: 0.000000, eta: 11:42:59
[2021-09-24 14:14:20.909075] Train epoch 5, batch: 4000/5322, loss: 24.289619, accuracy: 0.000000, eta: 11:58:24

关于test

请问声纹识别如果想要计算eer和dcf的话有什么工具包吗

博主大大你好,有关特征值和对角余弦问题

$QQD2S 0H}2~JGFOVQK6B37
$D9R R2957OT180$PI)3KC5
博主你好,目前出现了这样一个问题:运行infer_recognition.py时实验最终结果进行声纹识别时无论说话与否都对应的是第一个注册者,开始怀疑模型调用的问题,但是运行infer_contrast.py的时候结果正常,所以排除模型调用及路径问题,又使用pycharm进行分布调试,在代码进行到声纹识别的步骤时,最终dist值没有计算正确,直接显示了1,出现问题的代码如下
feature = infer(path)[0]
for i, person_f in enumerate(person_feature):
dist = np.dot(feature, person_f) / (np.linalg.norm(feature) * np.linalg.norm(person_f))
所以怀疑是否是特征提取的问题或者是dist值计算出错了,请问博主具体的问题出现在哪以及如何去解决,万分感谢!

关于ARCNET

请问RESNET34后面接的那个ARCnet的做法有相关文献资料吗?有点看不明白里面的做法。

训练问题咨询

hello,我换了ubuntu机器在训练模型,目前没有异常,想问下时间的问题:
按照每条日志间隔的时间计算,执行完大概需要40+小时,这个没问题,但我想问下,Train epoch [0/30],时表示这种40+小时的训练需要进行三十次吗?还是说有别的意思?
image

Thanks.

博主,您好

您好,我想问下那个训练的图train/loss这个图的横坐标代表的什么?

关于测试

您好,我想知道您的list放进dataloader或者是您自己的customdataset的时候有打乱顺序吗

关于声音输入的问题

有几个地方想请教下您:

  1. 对声音拼接随机取反这个操作的作用是什么?
  2. 我看了下数据集中,最长的声音11秒多,最短的1秒多,算法中都是随机截取一段2.6秒长的部分,对于较长的输入,利用率是否过低?
  3. 能不能通过让STFT窗口长度和步长自适应输入,从而让STFT输出的维度相同

2个算法很难区分的实例,但是人能容易区分?

作者你好:
我购买了9.9yuan模型并测试了算法,发现效果挺好的。但是我遇到2个女声样本,测试后发现非常难以区分:

-----------  Configuration Arguments -----------
audio_path1: ../ysvoiceprint/voiceprint/zhou-tang/zhou3min-10-16k.wav
audio_path2: ../ysvoiceprint/voiceprint/zhou-tang/tang3min-10-16k.wav
input_shape: (1, 2000, 257)
model_path: models/resnet34.pth
threshold: 0.71
------------------------------------------------
slice: 1099 len: 257 whole: (257, 2001)
slice: 633 len: 257 whole: (257, 2001)
..//voiceprint/zhou-tang/zhou3min-10-16k.wav 和 ..//voiceprint/zhou-tang/tang3min-10-16k.wav 
不是同一个人,相似度为:0.612113

随机再取1.3s来比较:

-----------  Configuration Arguments -----------
audio_path1: ../ysvoiceprint/voiceprint/zhou-tang/zhou3min-10-16k.wav
audio_path2: ../ysvoiceprint/voiceprint/zhou-tang/tang3min-10-16k.wav
input_shape: (1, 320, 257)
model_path: models/resnet34.pth
threshold: 0.71
------------------------------------------------
slice: 381 len: 257 whole: (257, 2001)
slice: 1634 len: 257 whole: (257, 2001)
..//voiceprint/zhou-tang/zhou3min-10-16k.wav 和 ..//voiceprint/zhou-tang/tang3min-10-16k.wav 
不是同一个人,相似度为:0.685574

不管从这2个样本随机采样多少个1.3s, 发现相似度一直很高(0.6~0.7)左右。这是很奇怪的,这种困难的corner case有啥好的区分办法吗? 非常感谢。

附上这2个音频:
2samples-hard.zip

关于训练

您好打扰一下,我想用这个模型在公开数据集上面测试一下效果,但是我在voxcelb1数据集上进行训练的时候train/loss 波动比较大,并且test/acc一直是0,请问是什么原因,voxcelb1说话人好像是有1121个,因为是公开数据集我没有做删除错误音频的操作

训练模型

您好,Git这一边您好像没有上传预训练模型权重,只有一个csdn的链接.csdn那边是要收费吗?

WAV sound durations is always 4 seconds?

Hi, thanks for your work, I have one question, corpus database is always 4 seconds, can I use wav samples with different duration?

I have same samples with 4, 5 and 6 seconds of duration...

训练数据

博主你好,请问是否可以只截取音频的某一特定频率范围的数据去训练呢?

关于测试

我发现您的这个项目中训练时,在验证的时候用的时test list,但是在eval的时候也是用的test去测试模型的效果,是不是在train的时候验证的时候用dev集比较好

请教大佬

"D:\Program Files (x86)\Python\python.exe" E:/0,SHARED/WEB/VoiceprintRecognition-Pytorch-master/infer_recognition.py
Traceback (most recent call last):
File "E:/0,SHARED/WEB/VoiceprintRecognition-Pytorch-master/infer_recognition.py", line 10, in
from data_utils.reader import load_audio, CustomDataset
File "E:\0,SHARED\WEB\VoiceprintRecognition-Pytorch-master\data_utils\reader.py", line 11, in
import librosa
File "D:\Program Files (x86)\Python\lib\site-packages\librosa_init_.py", line 209, in
from . import core
File "D:\Program Files (x86)\Python\lib\site-packages\librosa\core_init_.py", line 5, in
from .convert import * # pylint: disable=wildcard-import
File "D:\Program Files (x86)\Python\lib\site-packages\librosa\core\convert.py", line 7, in
from . import notation
File "D:\Program Files (x86)\Python\lib\site-packages\librosa\core\notation.py", line 8, in
from ..util.exceptions import ParameterError
File "D:\Program Files (x86)\Python\lib\site-packages\librosa\util_init_.py", line 77, in
from .utils import * # pylint: disable=wildcard-import
File "D:\Program Files (x86)\Python\lib\site-packages\librosa\util\utils.py", line 5, in
import scipy.ndimage
File "D:\Program Files (x86)\Python\lib\site-packages\scipy_init_.py", line 119, in
from scipy._lib._ccallback import LowLevelCallable
File "D:\Program Files (x86)\Python\lib\site-packages\scipy_lib_ccallback.py", line 1, in
from . import _ccallback_c
ImportError: DLL load failed: 找不到指定的模块。

为什么我所有的第三方库都安装好了,项目是下载你的,一运行就会报错。

去除噪音干扰

非常感谢分享。
由于训练数据是相对安静,噪音很少的环境中生成的。使用训练的模型进行推理时,噪声干扰影响感觉还是比较大的
想请教一下这个问题应该怎样处理。我的想法是训练时把随机随机加入分贝数不同的各种环境噪音。不知道是否有用?或者还要结合降噪的算法吗?
另外:如果多个人同时说话,有没有什么方法能将不同人的声音进行分离,然后在依次进行识别。
还望不吝赐教!
再次感谢

打扰了,小白请假一个问题

大佬晚上好,我根据require文档安装visualdl2.1.1失败,在网上也没有找到法子,这该怎么办啊?用的Python3.7,pytorch框架

采样率

训练数据和模型的采样率16k。我要推理的数据是电话语音,采样率是8k,我重采样到16k后,发现声纹对比效果很差,不论怎样的两段语音,声纹相似度都比较大,男女对比的相似度有的都能达到0.4。
请问会是什么原因呢?

数据

我发现我处理完的data总共类别只有2531个类,和你的不一样,可能有一些数据解压的有问题,但是类别的增长并不是连续的,请问这个是删除音频方法的原因吗
image

想询问您关于该项目的数据集问题

笔者您好,最近在学习声纹识别,觉得您的项目和好,但是不明白您create_data.py文件中的def get_data_list(infodata_path, list_path, zhvoice_path):这行代码中的三个变量对应的数据是什么,以及不知道如何编写json文件,请问能否将您项目使用的数据集和json文件按照 get_data_list('dataset/zhvoice/text/infodata.json', 'dataset', 'dataset/zhvoice')这个传入格式发给我方便我理解学习 ,十分感谢您。我的邮箱[email protected]

推理预测错误

您好 我请问一下,在使用ecapa_tdnn,模型推理时候,特征提取选择spectrogram,但是得到的特征只是一个值是什么原因呢,并且对比任意两个音频相似度都是1。使用的是下面的预训练模型。
a66545f1c2a39f8ea6527f6bd6e17b2
715806fd505e065ac0ba64c5f0bd3e4

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.