前言:有感于早些年前学习语音时,在Kaldi庞大的框架和脚本里挣扎了很久,而且对于深度学习模型训练、推理、部署、优化等也困惑了很久,现如今有时间,就想实现一套最简单的自包含方案,系统的说明一套语音服务从训练到部署的全套流程,方便新人学习,也是为社区做一点贡献。考虑到语音识别领域有了Wenet这么优秀的项目,但声纹识别方向好像还没这样的方案,所以就以声纹识别为准了,声纹模型可能不是最新,最终性能肯定也不是最好,但是如果能把各个部分都讲清楚,系统能独立的工作,目的就达到了。
1. 目标
OpenSpeaker是一个完全独立并开源的说话人识别项目,它提供了包括数据准备、模型训练、多平台部署和模型优化等说话人识别的全部流程,同时会有说话人识别验证,说话人性别识别等多个功能,旨在开源这套可以一键训练部署的声纹识别方案,方便大家学习交流。
2. 怎么做
提到深度学习,很多人第一印象就是收集数据,训练模型,测试效果,但实际工作中,在此之外还涉及到许多部署、优化的工作,比如什么设备平台,能提供多少资源,最终RTF要限制到多少,都是我们要认真考虑的。因此,我在实现本方案时,在训练测试之外,也会更多的关注部署和优化,在每个方向都有多个小目标,也方便大家对比学习,预期会包含以下几个部分:

整个框架如上图所示,具体来说:
- 数据整理部分会优先以VoxCeleb数据集为准,它是SpeechBrain中声纹的默认数据集,也是VoxSRC比赛的默认数据集,以此为基础可以更好的横向对比。此外,还会指出现有的公开语音数据集,更多的数据更好的效果。
- 模型训练会以SpeechBrain框架为基础,它的结构简单,新人学习友好,使用和修改都很方便。然后会实现一个Colab的文件,方便没有GPU的同学一键训练一个声纹模型。最后针对本地的训练,尝试通过分布式训练提升模型训练速度。
- 模型转换部分会介绍LibTorch、OnnxRuntime以及其他部署框架,讲解它们的使用方法,对比它们的性能优劣。
- 设备部署部分会将当前模型部署到不同的平台,主要是Linux系统,但是在X86,ARM等不同架构之间有很多细节工作需要完善,其次还会支持GPU的推理,包括Nvidia和Mali等,可以看到有GPU的话模型推理速度会快很多,最后有时间的话也会增加Android下的Demo。
- 模型优化是一个更广泛的方向,它既包括现有模型在性能指标上的优化,也包括为特定平台部署时的性能优化,在此之前,还需要做一些性能评估的工作来指导最终的优化方向,最后会以量化、稀疏化等通用的模型压缩方法压缩当前的模型,使得更利于推理部署。
3. 已完成
Talk is cheap,show me your code!
目前其实已经完成了一些工作,包括开源了一个预训练的模型,下载代码之后可以一键编译并执行,直观的看到声纹识别的结果,项目地址:
https://github.com/zycv/OpenSpeaker
但是,上面的工作只是0.1版本,它只有Linux下的部署推理,模型训练以及优化等很多工作都没做,后期会在此基础上逐渐添加,此处先Release出来,欢迎大家Star!我也会在本专栏里讲解进度及遇到的问题,欢迎订阅支持。
文章来源知乎,本文作者:蘑菇炖提莫
