重庆专业的网站建设公司,网站pv多少可以,深圳专门做写字楼的网站,完整的社群营销方案WeSpeaker正式更新C部署链路#xff0c;推理引擎使用OnnxRuntime#xff0c;支持从语音中提取Speaker Embedding信息#xff0c;代码详见WeSpeaker/runtime[1]。
Libtorch和onnx的选择? Speaker Embedding提取任务流程简单#xff0c;并且声纹模型#xff08;如ResNet\E…WeSpeaker正式更新C部署链路推理引擎使用OnnxRuntime支持从语音中提取Speaker Embedding信息代码详见WeSpeaker/runtime[1]。
Libtorch和onnx的选择? Speaker Embedding提取任务流程简单并且声纹模型如ResNet\ECAPA-TDNN)相对简单只需简单几行代码即可导出Onnx模型 Libtorch包过大并且使用过程中需要和pytorch的版本一致OnnxRuntime相对轻便只需12M左右
故采用OnnxRuntime推理引擎欢迎贡献基于其它推理引擎的代码。
整体概括
整体包含四部分frontend、speaker、utils、bin frontend
用于计算fbank特征该部分代码复用WeNet-frontend[2]支持读取wav文件计算fbank特征。
speaker
包含主要的推理代码 speaker_model.h: 定义基类 SpeakerModel便于实现对不同推理引擎的支持。 onnx_speaker_model.cc/h继承基类SpeakerModel基于OnnxRuntime推理引擎。 speaker_engine.cc /h: 实现SpeakerEngine类供外部调用
int EmbeddingSize();返回Embedding的大小用于推理前申请空间。
void ExtractFeature(const int16_t* data, int data_size,std::vectorstd::vectorstd::vectorfloat* chunks_feat);提取fbank特征如果SamplesPerChunk0, 对整个句子提取特征否则分块计算特征块大小为SamplesPerChunk。 data输入数据的地址数据类型为int16 data_size: 输入数据的长度 chunks_feat: 输出特征大小为[n, T, D]
void ExtractEmbedding(const int16_t* data, int data_size,std::vectorfloat* avg_emb);输入音频数据提取Embedding特征。注意对每个chunk提取embedding最终取平均输出。 data: 输入数据地址数据类型为int16 data_size: 输入数据的长度 avg_emb: 输出embedding特征
float CosineSimilarity(const std::vectorfloat emb1,const std::vectorfloat emb2)计算两个embedding之间的余弦相似度得分。
utils
包含辅助函数比如WriteToFile、ReadToFile将embedding信息写入文件或读取文件。
bin
提供两个示例。
1、asv_main.cc: 计算两条语音的相似度
export GLOG_logtostderr1
export GLOG_v2
onnx_diryour_model_dir
./build/bin/asv_main \--enroll_wav wav1_path \--test_wav wav2_path \--threshold 0.5 \--speaker_model_path $onnx_dir/final.onnx2、extract_emb_main.cc: 批量提取embedding并保存到txt文件中同时计算RTF
export GLOG_logtostderr1
export GLOG_v2
wav_scpyour_test_wav_scp
onnx_diryour_model_dir
embed_outyour_embedding_txt
./build/bin/extract_emb_main \--wav_list $wav_scp \--result $embed_out \--speaker_model_path $onnx_dir/final.onnx--SamplesPerChunk 80000 # 5sbenchmark
1、RTF num_threads 1 SamplesPerChunk 80000 CPU: Intel(R) Xeon(R) Platinum 8160 CPU 2.10GHz Model[3]ParamsRTFECAPA-TDNN (C512)6.19 M0.018351ECAPA-TDNN (C1024)14.65 M0.041724RepVGG-TINY-A06.26 M0.055117ResNet-346.63 M0.060735ResNet-15219.88 M0.179379ResNet-22123.86 M0.267511ResNet-29328.69 M0.364011
2、结果一致性
使用voxceleb测试模型为resnet-34
Modelvox-Ovox-Evox-HResNet-34-pt0.8140.9331.679ResNet-34-onnx0.8140.9331.679欢迎大家使用WeSpeaker服务于各种下游任务也欢迎社区的贡献和宝贵建议 参考资料
[1] WeSpeaker/runtime: https://github.com/wenet-e2e/wespeaker/tree/master/runtime/onnxruntime
[2] WeNet-frontend: https://github.com/wenet-e2e/wenet/tree/main/runtime/core/frontend
[3] Model: https://github.com/wenet-e2e/wespeaker/blob/master/docs/pretrained.md