Whisper 是一个开源的深度学习语音识别模型,由 OpenAI 开发,它能够实现实时、多语言的语音识别,并支持跨多种环境和设备的灵活部署。本例程对Whisper官方开源仓库中的算法进行移植,使之能在SOPHON BM1684X上进行推理。
- 支持BM1684X(x86 PCIe、SoC)
- 支持FP16(BM1684X)模型编译和推理
- 支持基于SAIL推理的Python例程
该模型目前只支持在1684X上运行,已提供编译好的bmodel,同时,您需要准备用于测试的数据集。
本例程在scripts
目录下提供了相关模型和数据的下载脚本download.sh
。
# 安装unzip,若已安装请跳过
sudo apt install unzip
chmod -R +x scripts/
./scripts/download.sh
下载的模型包括:
./models
├── BM1684X
│ ├── bmwhisper_base_1684x_f16.bmodel # whisper-medium模型,模型参数量为769 M
│ ├── bmwhisper_medium_1684x_f16.bmodel # whisper-small模型,模型参数量为244 M
│ └── bmwhisper_small_1684x_f16.bmodel # whisper-base模型,模型参数量为74 M
└── onnx # whisper的onnx原始模型
├── decoder_loop_with_kvcache_base_5beam_448pad.onnx
├── decoder_loop_with_kvcache_medium_5beam_448pad.onnx
├── decoder_loop_with_kvcache_small_5beam_448pad.onnx
├── decoder_main_with_kvcache_base_5beam_448pad.onnx
├── decoder_main_with_kvcache_medium_5beam_448pad.onnx
├── decoder_main_with_kvcache_small_5beam_448pad.onnx
├── decoder_post_base_5beam_448pad.onnx
├── decoder_post_medium_5beam_448pad.onnx
├── decoder_post_small_5beam_448pad.onnx
├── encoder_base_5beam_448pad.onnx
├── encoder_medium_5beam_448pad.onnx
├── encoder_small_5beam_448pad.onnx
├── kvcache_rearrange_base_5beam_448pad.onnx
├── kvcache_rearrange_medium_5beam_448pad.onnx
├── kvcache_rearrange_small_5beam_448pad.onnx
├── logits_decoder_base_5beam_448pad.onnx
├── logits_decoder_medium_5beam_448pad.onnx
└── logits_decoder_small_5beam_448pad.onnx
下载的数据包括:
./datasets
|── aishell_S0764 # 从aishell数据集中抽取的用于测试的音频文件
| └── *.wav
├── aishell_S0764.list # 从aishell数据集的文件列表
├── ground_truth.txt # 从aishell数据集的预测真实值
└── test # 测试使用的音频文件
└── demo.wav
此部分请参考Whisper模型的导出与编译
首先,参考Python例程推理要测试的数据集,生成预测结果至result路径,注意修改数据集(datasets/aishell_S0764)和相关参数。
然后,使用tools
目录下的eval_aishell.py
脚本,将测试生成的txt文件与测试集标签txt文件进行对比,计算出语音识别的评价指标,命令如下:
# 请根据实际情况修改程序路径和txt文件路径
python3 tools/eval_aishell.py --char=1 --v=1 datasets/ground_truth.txt python/result > online_wer
cat online_wer | grep "Overall"
在aishell数据集上,精度测试结果如下:
测试平台 | 测试程序 | 测试模型 | WER |
---|---|---|---|
SE7-32 | whisper.py | bmwhisper_base_1684x_f16.bmodel | 17.80% |
SE7-32 | whisper.py | bmwhisper_small_1684x_f16.bmodel | 9.44% |
SE7-32 | whisper.py | bmwhisper_medium_1684x_f16.bmodel | 5.88% |
测试说明:
- 在使用的模型相同的情况下,wer在不同的测试平台上是相同的。
- 由于SDK版本之间的差异,实测的wer与本表有1%以内的差值是正常的。
测试平台 | 测试程序 | 测试模型 | Preprocess time(ms) | Inference time(ms) |
---|---|---|---|---|
SE7-32 | whisper.py | bmwhisper_base_1684x_f16.bmodel | 247.61 | 61.70 |
SE7-32 | whisper.py | bmwhisper_small_1684x_f16.bmodel | 268.22 | 179.44 |
SE7-32 | whisper.py | bmwhisper_medium_1684x_f16.bmodel | 300.66 | 451.54 |
测试说明:
- 该性能使用datasets/test/demo.wav音频进行测试,计算后得出平均每秒音频所需推理时间。
- whisper模型的预处理主要包括加载语音,特征提取等,推理后的结果可直接转换为自然语言,时间可忽略不计,因此无后处理部分时间统计。
- 性能测试结果具有一定的波动性,实测结果与该表结果有误差属正常现象,建议多次测试取平均值。
- BM1684X SoC的主控处理器为8核 ARM A53 42320 DMIPS @2.3GHz。