PaddleSpeech C++ Runtime 部署 U2/U2++ 流式 ASR:wenetspeech 静态模型推理与 CER 评测实战
人工智能语音音频NLP媒体生成【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/paddlepaddle/PaddleSpeech点击查看免费下载本文基于 PaddleSpeech 仓库中 runtime/examples/u2pp_ol/wenetspeech/README.md 部署示例展开介绍如何用 PaddleSpeech 的 C 引擎SpeechX Runtime加载 WenetSpeech asr1 配方导出的 U2/U2 静态模型完成 wav 与特征两种输入的流式识别并计算 AISHELL-1 测试集上的 CER同时结合 run.sh、local/ 下的各解码脚本与 path.sh深入剖析每一步的底层二进制、关键参数chunk、receptive_field_length、subsampling_rate 等与量化/WFST 解码的扩展用法。示例定位与模型来源该目录是 U2/U2 流式模型的 C 部署示例对应训练配方位于 examples/wenetspeech/asr1。原文档明确了模型形态这里使用的是export导出的静态static模型即训练侧先将动态图模型导出为可被 C 侧 Paddle Inference 加载的静态形态部署侧不再依赖 Python 训练框架。README 给出的定位信息可以概括为三点目标演示如何用 u2/u2 模型识别wav并计算CER测试数据使用 AISHELL-1 作为测试集模型获取run.sh会自动下载导出的静态模型模型下载地址在run.sh中定义。从 run.sh 的源码看stage 0 会下载三组资源资源文件说明U2 静态模型asr1_chunk_conformer_u2pp_wenetspeech_static_1.3.0.model.tar.gzfp32 静态模型解压后含export.jit、mean_std.json、unit.txtU2 量化模型asr1_chunk_conformer_u2pp_wenetspeech_static_quant_1.3.0.model.tar.gz量化静态模型用于量化推理单条测试音频zh.wav生成data/wav.scputt1 wav 绝对路径AISHELL 测试集aishell_test.zip解压后生成data/test/并构造data/aishell_test.scp其中aishell_test.scp的构造方式是先realpath列出全部 wav再用awk提取不含目录和扩展名的 utt id最后paste两列生成utt_id wav_path格式的 scp 文件见 run.sh。运行环境与二进制定位path.sh运行任何 stage 之前都需要先 source 环境脚本. path.shpath.sh 的核心逻辑通过ENGINE_ROOT$PWD/../../../反推到 runtime 仓库根目录即 runtime/期望编译产物位于build/Linux/x86_64/engine/asrSPEECHX_BUILD若目录不存在会报错提示请确保项目编译成功将以下 bin 目录加入PATHengine/asr/nnet、engine/asr/decoder、engine/common/frontend/audio、engine/asr/recognizer以及 openfst 的fstbin/lmbin若 run.sh 检测到SPEECHX_BUILD不存在会自动cd $SPEECHX_ROOT bash build.sh触发一次编译。因此本示例的前提是已经按 runtime/README.md 完成了 runtime 工程的 CMake 编译且PADDLE_LIB_PATH指向对应版本 PaddlePaddle 的推理库。整体执行流程run.sh stage 划分README 给出的标准执行顺序是# 0. 下载数据集和模型 ./run.sh --stop_stage 0 # 1. 处理 cmvn 并计算特征fbank ./run.sh --stage 1 --stop_stage 1 # 2. 使用特征fbank输入解码 ./run.sh --stage 2 --stop_stage 2 # 3. 使用 wav 输入解码u2_recognizer_main ./run.sh --stage 3 --stop_stage 3需要注意当前仓库中的 run.sh 与早期 README 的 stage 编号存在演进差异。当前版本中 stage 1/2/3 实际调用的是stage1→ local/recognizer.shwav 输入解码fp32 静态模型stage2→ local/recognizer_quant.shwav 输入解码量化模型stage3→ local/recognizer_wfst.shwav 输入 WFST 图解码。而 README 中处理 cmvn 并计算特征的步骤对应保留下来的 local/feat.sh./local/feat.sh --stage 1 --stop_stage 1也就是说README 描述的是先离线算 fbank 再解码的两段式流程当前 run.sh 则把重心放在了 wav 直接输入与量化/WFST 变体上。两者互补feat.sh 产出fbank.ark/scp后可交给u2_nnet_main做纯网络前向解码见下文。特征计算与 cmvnfeat.shlocal/feat.sh 使用compute_fbank_main并行计算流式 fbank 特征compute_fbank_main \ --num_bins 80 \ --cmvn_file$model_dir/mean_std.json \ --streaming_chunk36 \ --wav_rspecifierscp:$data/split${nj}/JOB/${aishell_wav_scp} \ --feature_wspecifierark,scp:$data/split${nj}/JOB/fbank.ark,$data/split${nj}/JOB/fbank.scp关键参数说明--num_bins 8080 维 mel 滤波 bank与 U2/U2 模型输入维度一致--cmvn_filemean_std.json模型目录随附的均值/方差文件README 提到的convert cmvn 文件格式即指训练侧的 cmvn 统计需要转换为该 json 形态供 C 前端加载--streaming_chunk36以 36 帧为一个 chunk 计算模拟流式分块场景保证离线特征与流式推理时的分块方式一致输出fbank.ark/fbank.scp是 Kaldi 风格的特征容器/索引对后续u2_nnet_main直接以ark,t:读取。脚本先用local/split_data.sh把 scp 切成nj20份再由utils/run.pl做多作业并行。wav 输入解码recognizer.sh这是 README Decoding using wav input 对应的核心流程。local/recognizer.sh 调用recognizer_main全量参数如下recognizer_main \ --use_fbanktrue \ --num_bins80 \ --cmvn_file$model_dir/mean_std.json \ --model_path$model_dir/export.jit \ --word_symbol_table$model_dir/unit.txt \ --nnet_decoder_chunk16 \ --receptive_field_length7 \ --subsampling_rate4 \ --wav_rspecifierscp:$data/split${nj}/JOB/${aishell_wav_scp} \ --result_wspecifierark,t:$data/split${nj}/JOB/result_recognizer.ark参数逐项解析参数示例值含义--use_fbanktrue由 C 侧前端从 wav 在线计算 fbank否则读离线特征--num_bins80mel 滤波数--cmvn_filemean_std.json特征归一化统计文件--model_pathexport.jit导出的静态模型文件--word_symbol_tableunit.txt词表/单元表用于将输出 id 映射为字符--nnet_decoder_chunk16解码器每次喂给网络的 chunk 大小帧与 U2/U2 的 chunk 式流式解码约定一致--receptive_field_length7流式解码时因卷积感受野需要额外延迟的帧数用于对齐能出结果的边界--subsampling_rate4CNN 下采样倍率决定特征帧到时间步的缩放--wav_rspecifierscp:file输入 scp每行utt_id wav 路径--result_wspecifierark,t:file.ark解码结果输出关于输入 scp 的格式README 给出了样例对应 AISHELL 测试集BAC009S0764W0121 /workspace/PaddleSpeech/runtime/examples/u2pp_ol/wenetspeech/data/test/S0764/BAC009S0764W0121.wav BAC009S0764W0122 /workspace/PaddleSpeech/runtime/examples/u2pp_ol/wenetspeech/data/test/S0764/BAC009S0764W0122.wav只识别单条 wav时只需自行构造两行式的 scpkey path/to/wav/file然后给u2_recognizer_main/recognizer_main指定--wav_rspecifier即可其余 flag 的含义可运行u2_recognizer_main --help查看README 建议的自查方式。解码完成后脚本把 20 份分片的result_recognizer.ark合并为exp/aishell_recognizer并调用utils/compute-wer.py --char1以字符级对齐计算 CERutils/compute-wer.py --char1 --v1 $text $exp/aishell_recognizer $exp/aishell.recognizer.err其中$text是 AISHELL 的data/test/text参考文本。量化模型解码recognizer_quant.shlocal/recognizer_quant.sh 与 recognizer.sh 结构完全相同差异仅有两处模型目录换成asr1_chunk_conformer_u2pp_wenetspeech_static_quant_1.3.0.model/且--model_path$model_dir/export量化模型的文件名是export而 fp32 版本是export.jit结果输出到独立的recognizer.quant.rsl.ark并单独计算一份aishell.recognizer.quant.err。这样可以在同一测试集上直接对比 fp32 与量化模型的 CER 损失验证量化对精度的影响。WFST 解码扩展recognizer_wfst.shlocal/recognizer_wfst.sh 在 wav 输入的基础上叠加了 WFST 语言图约束。相比 recognizer.sh 的增量--graph_path$lang_dir/TLG.fst \ --word_symbol_table$lang_dir/words.txt \ --rescoring_weight0.0 \ --acoustic_scale2语言包目录data/lang_test/内含TLG.fst与words.txt脚本在图不存在时会自动下载预编译的中文 ngram 图包tlg.zip如果想自己构建图README 指向 local/run_build_tlg.sh该脚本会调用 ngram 训练流程相关工具脚本见 local/aishell_train_lms.sh--acoustic_scale控制声学模型与语言模型的对齐权重示例中取 2。离线特征解码u2_nnet_mainnnet.sh对应 README Decoding using feature input 的底层实现是 local/nnet.shu2_nnet_main \ --model_path$model_dir/export.jit \ --vocab_path$model_dir/unit.txt \ --feature_rspecifierark,t:${data}/split${nj}/JOB/fbank.ark \ --nnet_decoder_chunk16 \ --receptive_field_length7 \ --subsampling_rate4 \ --acoustic_scale1.0 \ --nnet_encoder_outs_wspecifierark,t:$exp/encoder_outs.ark \ --nnet_prob_wspecifierark,t:$exp/logprobs.ark它与recognizer_main的区别在于输入是 feat.sh 产出的离线fbank.ark同时会额外落盘 encoder 输出encoder_outs.ark与词表概率logprobs.ark便于调试与离线分析网络中间状态。可以推断这条路径适合验证特征口径是否一致即离线 fbank 与 wav 在线 fbank 的等价性。评测结果与注意事项各配置下的测试集结果请见 RESULTS.mdREADME 将其作为唯一结果入口模型文件名中的1.3.0标识了对应的 PaddleSpeech 模型版本run.sh的下载 URL 与本地文件名必须一致解压失败时优先检查网络与该 tag 是否匹配README 中的 stage 编号1cmvn/特征、2特征解码、3wav 解码与当前 run.sh 的 stage 映射1wav 解码、2量化、3WFST存在版本演进差异实操时建议以 run.sh 中实际的脚本调用关系为准并按需单独执行local/feat.sh完成特征口径准备所有解码均为多作业并行默认nj20最终结果合并后统一计算字符级错误率CER保证评测可复现。赞分享人工智能语音音频NLP媒体生成【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/paddlepaddle/PaddleSpeech点击查看免费下载相关推荐PaddleSpeech SpeechX 实战U2/U2/DeepSpeech2 模型的 C 流式 ASR 部署指南PaddleSpeech SpeechX 实战U2/U2/DeepSpeech2 模型的 C 流式 ASR 部署指南 SpeechX 是 Paddle人工智能语音音频NLP媒体生成PaddleSpeech 基于 SpeechXruntime的 U2/U2 流式 ASR C 工业部署实战指南PaddleSpeech 基于 SpeechXruntime的 U2/U2 流式 ASR C 工业部署实战指南 PaddleSpeech 仓库中的人工智能语音音频NLP媒体生成PaddleSpeech Runtime 示例指南在 C 引擎上运行 U2/U2 流式 ASR 解码与 CER 评测PaddleSpeech Runtime 示例指南在 C 引擎上运行 U2/U2 流式 ASR 解码与 CER 评测 本文围绕 runtime/exa人工智能语音音频NLP媒体生成上一篇Awesome-Chinese-LLM 中文开源大模型选型指南从底座模型到垂直微调用一份清单筛出可部署方案下一篇PocketPal AI开发终极指南从零构建移动端AI助手应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

CodeCombat AP CSP 课程 Unit 1 单元测验解析:协作编程、变量命名与信源可信度评估

CodeCombat AP CSP 课程 Unit 1 单元测验解析:协作编程、变量命名与信源可信度评估

游戏开发教育前端后端 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat 点击查看 免费下载 本指南围绕 CodeCombat AP Computer Science Principles 课程中 Unit 1(Who is a Compu…

2026/9/25 3:41:55 阅读更多 →
Pyro 概率分布系统全解:PyTorch 封装、自定义分布、变换与约束的完整指南

Pyro 概率分布系统全解:PyTorch 封装、自定义分布、变换与约束的完整指南

人工智能机器学习深度学习概率编程 【免费下载链接】pyro Deep universal probabilistic programming with Python and PyTorch 项目地址: https://gitcode.com/gh_mirrors/py/pyro 点击查看 免费下载 Pyro(Deep universal probabilistic programming w…

2026/9/25 3:41:55 阅读更多 →
Dart SDK Kernel IR 文本格式详解:从 AST 到可读文本的打印与解析

Dart SDK Kernel IR 文本格式详解:从 AST 到可读文本的打印与解析

编程语言编译器语言运行时标准库开发工具 【免费下载链接】sdk The Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more. 项目地址: https://gitcode.com/gh_mirrors/sdk1/sdk 点击查看 免费下载 本指南以 pkg/kernel/lib/te…

2026/9/25 3:41:55 阅读更多 →

最新新闻

PaddleSpeech WaveFlow 声码器实战指南:基于 LJSpeech 数据集的预处理、训练与波形合成

PaddleSpeech WaveFlow 声码器实战指南:基于 LJSpeech 数据集的预处理、训练与波形合成

人工智能语音音频NLP媒体生成 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation …

2026/9/25 4:30:28 阅读更多 →
Coda Automation 实操指南:通过 Rube MCP 与 Composio Coda 工具包自动化 Coda 文档与数据操作

Coda Automation 实操指南:通过 Rube MCP 与 Composio Coda 工具包自动化 Coda 文档与数据操作

AI 技能AI 插件 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,445 agentic skills. Includes CLI, local MCP, catalog, …

2026/9/25 4:30:28 阅读更多 →
Kubernetes 管理 Agent:从容器编排到 Agent 编排的实践指南

Kubernetes 管理 Agent:从容器编排到 Agent 编排的实践指南

上个月我所在的团队正式把第四个业务Agent接进了生产环境。结果不到两周,我就开始怀念以前只用管普通微服务的日子——Agent不只是多几个接口那么简单,它有状态、要调工具、会跟人闲聊式地来回对话,还会莫名其妙把自己跑挂。就在我对着一堆乱…

2026/9/25 4:30:28 阅读更多 →
PaddleSpeech TransformerTTS 特征归一化实战:深入解析 normalize 模块与完整数据流水线

PaddleSpeech TransformerTTS 特征归一化实战:深入解析 normalize 模块与完整数据流水线

人工智能语音音频NLP媒体生成 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation …

2026/9/25 4:30:27 阅读更多 →
AstronAgent 一体化部署实战:Casdoor 认证 + RagFlow 知识库 + RPA 全栈启动指南

AstronAgent 一体化部署实战:Casdoor 认证 + RagFlow 知识库 + RPA 全栈启动指南

人工智能AI AgentAgent 编排RPA后端前端企业应用 【免费下载链接】astron-agent Enterprise-grade, commercial-friendly agentic workflow platform for building next-generation SuperAgents. 项目地址: https://gitcode.com/gh_mirrors/as/astron-agent 点击查看…

2026/9/25 4:30:27 阅读更多 →
Windows管理员权限失效原因与提权全路径解析

Windows管理员权限失效原因与提权全路径解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 4:29:27 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →