Top AI Repos — open-source AI, indexed and scored
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
使用Tensorflow实现声纹识别
| Date | Stars |
|---|---|
| 2026-07-24 | 336 |
| 2026-07-25 | 336 |
| 2026-07-28 | 336 |
| 2026-07-30 | 336 |
| 2026-08-06 | 336 |
Today
— stars today
This week
— stars this week
This month
— stars this month
Momentum
0.0
growth rate 0.00%/day
# 前言 本章介绍如何使用Tensorflow实现简单的声纹识别模型,首先你需要熟悉音频分类,没有了解的可以查看这篇文章[《基于Tensorflow实现声音分类》](https://blog.doiduoyi.com/articles/1587654005620.html) 。基于这个知识基础之上,我们训练一个声纹识别模型,通过这个模型我们可以识别说话的人是谁,可以应用在一些需要音频验证的项目。不同的是本项目使用了ArcFace Loss,ArcFace loss:Additive Angular Margin Loss(加性角度间隔损失函数),对特征向量和权重归一化,对θ加上角度间隔m,角度间隔比余弦间隔在对角度的影响更加直接。 **建议你使用这个版本 [VoiceprintRecognition-Pytorch](https://github.com/yeyupiaoling/VoiceprintRecognition-Pytorch) 或者 [VoiceprintRecognition-PaddlePaddle](https://github.com/yeyupiaoling/VoiceprintRecognition-PaddlePaddle) ,本项目已不维护。** **欢迎大家扫码入知识星球或者QQ群讨论,知识星球里面提供项目的模型文件和博主其他相关项目的模型文件,也包括其他一些资源。** <div align="center"> <img src="https://yeyupiaoling.cn/zsxq.png" alt="知识星球" width="400"> <img src="https://yeyupiaoling.cn/qq.png" alt="QQ群" width="400"> </div> 使用环境: - Python 3.8 - Tensorflow 2.13.0 - Ubuntu 18.04 or Windows 10 # 模型下载 | 数据集 | 类别数量 | threshold | EER | 下载地址 | |:-------------------------------------------------------------------:|:----:|:---------:|:-------:|:--------:| | [zhvoice](https://aistudio.baidu.com/aistudio/datasetdetail/133922) | 2798 | 0.06820 | 0.06789 | 加入知识星球获取 | # 安装环境 1. 安装Tensorflow,如果已经安装过Tensorflow,测无需再次安装。 ```shell pip install tensorflow==2.13.0 -i https://pypi.tuna.tsinghua.edu.cn/simple ``` 如果安装麻烦,也可以使用Docker容器,但要提前安装[安装 NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)。 ```shell sudo docker pull tensorflow/tensorflow:2.13.0-gpu sudo docker run -itd --gpus all --name tensorflow -v $PWD/:/workspace/ tensorflow/tensorflow:2.13.0-gpu sudo docker exec -it tensorflow /bin/bash ``` 2. 安装其他依赖库,命令如下。 ```shell pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple ``` 2. 如果需要安装pyaudio,请用conda命令安装,pip安装很难成功,命令如下。 ```shell conda install pyaudio ``` # 创建数据 本教程笔者使用的是[zhvoice](https://aistudio.baidu.com/aistudio/datasetdetail/133922) ,这个数据集经过处理,一共有2798个人的训练数据,91个人的评估数据,有80W+条语音数据。如果读者有其他更好的数据集,可以混合在一起使用,但要用python的工具模块aukit处理音频,降噪和去除静音。 首先是创建一个数据列表,数据列表的格式为`<语音文件路径\t语音分类标签>`,创建这个列表主要是方便之后的读取,也是方便读取使用其他的语音数据集,语音分类标签是指说话人的唯一ID,不同的语音数据集,可以通过编写对应的生成数据列表的函数,把这些数据集都写在同一个数据列表中。 在`create_data.py`创建数据列表,在创建数据列表之后,可能有些数据的是错误的,所以我们要检查一下,将错误的数据删除。执行下面程序完成数据准备。 ```shell python create_data.py ``` 执行上面的程序之后,会生成以下的数据格式,如果要自定义数据,参考如下数据列表,前面是音频的相对路径,后面的是该音频对应的说话人的标签,就跟分类一样。 ``` dataset/zhvoice/zhaishell/S0002/BAC009S0002W0129.mp3 1104 dataset/zhvoice/zhaishell/S0002/BAC009S0002W0130.mp3 1104 dataset/zhvoice/zhaishell/S0002/BAC009S0002W0131.mp3 1104 dataset/zhvoice/zhaishell/S0002/BAC009S0002W0132.mp3 1104 dataset/zhvoice/zhaishell/S0002/BAC009S0002W0133.mp3 1104 dataset/zhvoice/zhaishell/S0002/BAC009S0002W0134.mp3 1104 dataset/zhvoice/zhaishell/S0002/BAC009S0002W0135.mp3 1104 dataset/zhvoice/zhaishell/S0002/BAC009S0002W0136.mp3 1104 dataset/zhvoice/zhaishell/S0002/BAC009S0002W0137.mp3 1104 dataset/zhvoice/zhaishell/S0002/BAC009S0002W0138.mp3 1104 ``` # 数据读取 有了上面创建的数据列表和均值标准值,就可以用于训练读取。主要是把语音数据转换短时傅里叶变换的幅度谱,使用librosa可以很方便计算音频的特征,如梅尔频谱的API为`librosa.feature.melspectrogram()`,输出的是numpy值,可以直接用PaddlePaddle训练和预测。跟梅尔频谱同样很重要的梅尔倒谱(MFCCs)更多用于语音识别中,对应的API为`librosa.feature.mfcc()`。在本项目中使用的API分别是`librosa.stft()`和`librosa.magphase()`。在训练时,使用了数据增强,如随机翻转拼接,随机裁剪。经过处理,最终得到一个`257*257`的短时傅里叶变换的幅度谱。 ```python wav, sr_ret = librosa.load(audio_path, sr=sr) linear = librosa.stft(extended_wav, n_fft=n_fft, win_length=win_length, hop_length=hop_length) linear_T = linear.T mag, _ = librosa.magphase(linear_T) mag_T = mag.T freq, freq_time = mag_T.shape spec_mag = mag_T[:, :spec_len] mean = np.mean(spec_mag, 0, keepdims=True) std = np.std(spec_mag, 0, keepdims=True) spec_mag = (spec_mag - mean) / (std + 1e-5) ``` # 训练模型 创建`train.py`开始训练模型,使用的是经过修改过的`resnet34`模型,数据输入层设置为`[None, 1, 257, 257]`,这个大小就是短时傅里叶变换的幅度谱的shape,如果读者使用了其他的语音长度,也需要修改这个值。每训练一轮结束之后,执行一次模型评估,计算模型的准确率,以观察模型的收敛情况。同样的,每一轮训练结束保存一次模型,分别保存了可以恢复训练的模型参数,也可以作为预训练模型参数。还保存预测模型,用于之后
Excerpt of 8,575 characters
Read on GitHubWould you bet a product on this? Bounded 0–100 and slow moving.
matched fp:26542c5ac7ecdeb8, topic:tensorflow