# WeNet-Ort ## 论文 `WeNet: Production Oriented Streaming and Non-streaming End-to-End Speech Recognition Toolkit` - https://arxiv.org/pdf/2102.01547.pdf ## 模型结构 WeNet是一种hybird连接主义时间分类(CTC)/注意力架构,以transformer或conformer作为编码器和注意力解码器来重新存储CTC假设。为了在统一的模型中实现流和非流,以及使用了一种基于动态块的注意力策略,该策略允许自注意力以随机长度集中在正确的上下文上。 ![img](./Doc/images/wenet1.PNG) ## 算法原理 底层堆栈完全基于PyTorch及其生态系统。中间的堆栈由两部分组成。开发研究模型时,TorchScript用于开发模型,Torchaudio用于动态特征提取,分布式数据并行(DDP)用于分布式训练,torch实时(JIT)用于模型导出,PyTorch量化用于模型量化,LibTorch用于生产运行时。LibTorch产品用于托管生产模型,旨在支持各种硬件和平台,如CPU、GPU(CUDA)Linux、Android和iOS。顶部堆栈显示了对WeNet中生产管道的典型研究 ![img](./Doc/images/wenet2.PNG) ## 环境配置 ### Docker(方法一) 拉取镜像: ``` docker pull image.sourcefind.cn:5000/dcu/admin/base/migraphx:4.3.0-ubuntu20.04-dtk24.04.1-py3.10 ``` 创建并启动容器,安装相关依赖: ``` docker run --shm-size 16g --network=host --name=wenet_onnxruntime -v /opt/hyhal:/opt/hyhal:ro --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $PWD/wenet_onnxruntime:/home/wenet_onnxruntime -it /bin/bash # 激活dtk source /opt/dtk/env.sh ``` ### Dockerfile(方法二) 此处提供dockerfile的使用方法 ``` cd ./docker docker build --no-cache -t wenet_onnxruntime:2.0 . docker run --shm-size 16g --network=host --name=wenet_onnxruntime -v /opt/hyhal:/opt/hyhal:ro --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $PWD/wenet_onnxruntime:/home/wenet_onnxruntime -it /bin/bash ``` ## 数据集 下载Aishell数据集:[Aishell](http://113.200.138.88:18080/aidatasets/project-dependency/aishell/) ``` AISHELL_data/ | wav | speaker001 | 000001.wav 000002.wav ... speaker002 ... ... transcript | transcript001.txt transcript002.txt ... ``` ## 推理 ### C++版本推理 本次采用经wenet模型完成问题语音识别任务,首先需要下载[模型](http://113.200.138.88:18080/aimodels/findsource-dependency/wenet_onnxruntime)至Resouce/models/,下面介绍如何运行C++代码示例,C++示例的详细说明见Doc目录下的Tutorial_Cpp.md。 #### 构建工程 ``` cd /home/wenet_onnxruntime export LD_LIBRARY_PATH=$PWD/openfst-1.7.6/src/lib:$LD_LIBRARY_PATH mkdir build && cd build cmake .. make install ``` #### 设置推理参数 ``` cd /home/wenet_onnxruntime export GLOG_logtostderr=1 export GLOG_v=2 wav_path=./Resource/BAC009S0764W0344.wav onnx_dir=./Resource/models units=./Resource/units.txt ``` #### 运行示例 ``` # 进入wenet onnxruntime工程根目录 cd /home/wenet_onnxruntime # 执行示例程序 ./build/Src/bin/decoder_main --onnx_dir $onnx_dir --wav_path $wav_path --unit_path $units 2>&1 | tee log.txt ``` ## result ``` test Final result: 脚踝和小腿的能力变弱 Decoded 3091ms audio taken 466ms. Total: decoded 3091ms audio taken 466ms. RTF: 0.1508 ``` ### 精度 无 ## 应用场景 ### 算法类别 语音识别 ### 热点应用行业 制造,金融,交通,教育 ## 源码仓库及问题反馈 - https://developer.hpccube.com/codes/modelzoo/wenet_onnxruntime ## 参考资料 - https://github.com/wenet-e2e/wenet - https://wenet.org.cn/wenet/