声纹识别解决方案¶
本文介绍了一个基于PyTorch的声纹识别系统,该系统采用EcapaTdnn模型作为核心架构,支持多种音频预处理、数据增强、模型训练和评估方法,可实现声纹对比和声纹识别功能。
目录¶
安装依赖¶
pip install -r requirements.txt
requirements.txt包含以下依赖:
- torch>=1.7.0
- torchaudio>=0.7.0
- librosa>=0.8.0
- scikit-learn>=0.23.2
- visualdl>=2.0.0
- sounddevice>=0.4.0
- soundfile>=0.10.3
- pyaudio>=0.2.11
- matplotlib>=3.3.4
- tqdm>=4.56.0
准备数据¶
本项目使用CN-Celeb数据集作为示例,您可以通过以下步骤准备数据:
- 下载CN-Celeb数据集到本地。
- 执行
create_data.py生成训练列表和测试列表:
python create_data.py
- (可选)创建噪声数据文件夹并添加背景噪声音频:
mkdir dataset/noise
# 将噪声音频文件放入dataset/noise文件夹
数据格式示例(train_list.txt):
dataset/CN-Celeb/wav/id12345/recording1.wav 12345
dataset/CN-Celeb/wav/id12345/recording2.wav 12345
dataset/CN-Celeb/wav/id67890/recording3.wav 67890
模型训练¶
使用train.py训练模型,可通过修改配置文件(如configs/ecapa_tdnn.yml)调整模型参数:
python train.py --configs=configs/ecapa_tdnn.yml
配置文件说明¶
# 数据集配置
dataset_conf:
train_list: dataset/train_list.txt
test_list: dataset/test_list.txt
sample_rate: 16000
num_workers: 4
batch_size: 64
min_duration: 0.5
max_duration: 10
# 预处理配置
preprocess_conf:
feature_method: MelSpectrogram # 支持:MelSpectrogram, Spectrogram, MFCC, Fbank
method_args:
n_fft: 512
n_mels: 64
hop_length: 160
win_length: 400
f_min: 20
f_max: 16000
# 数据增强配置
augment_conf:
noise_aug: True
speed_perturb: True
volume_aug: True
# 损失函数配置
loss_conf:
use_loss: AAMLoss
margin: 0.2
scale: 32
# 模型配置
model_conf:
backbone: EcapaTdnn
embd_dim: 192
num_blocks: 4
# 优化器配置
optimizer_conf:
optimizer: Adam
lr: 0.001
weight_decay: 1e-5
# 训练配置
train_conf:
max_epoch: 30
log_interval: 100
val_interval: 5
save_model_path: models/ecapa_tdnn
训练日志与可视化¶
训练过程中会自动记录日志,可通过VisualDL查看训练过程:
visualdl --logdir=log --host=0.0.0.0
评估模型¶
训练完成后,使用eval.py评估模型性能:
python eval.py --configs=configs/ecapa_tdnn.yml
输出示例:
成功加载模型:models/ecapa_tdnn/best_model/model.pth
开始两两对比音频特征...
评估消耗时间:65s,threshold:0.26,EER: 0.14739, MinDCF: 0.41999
声纹对比¶
使用infer_contrast.py对比两段音频的相似度:
python infer_contrast.py --audio_path1=audio/a_1.wav --audio_path2=audio/b_2.wav
输出示例:
audio/a_1.wav 和 audio/b_2.wav 不是同一个人,相似度为:-0.09565544128417969
声纹识别¶
使用infer_recognition.py实现声纹识别功能:
python infer_recognition.py
功能说明:
- 0: 注册音频到声纹库
- 1: 执行声纹识别
- 2: 实时识别
- 3: 删除用户
- 4: 退出程序
其他版本¶
- Tensorflow:VoiceprintRecognition-Tensorflow
- PaddlePaddle:VoiceprintRecognition-PaddlePaddle
- Keras:VoiceprintRecognition-Keras
参考资料¶
- https://github.com/PaddlePaddle/PaddleSpeech
- https://github.com/yeyupiaoling/PaddlePaddle-MobileFaceNets
- https://github.com/yeyupiaoling/PPASR
- https://github.com/alibaba-damo-academy/3D-Speaker
如有任何问题或需要进一步帮助,请随时联系作者。