Zipformer ONNX 流式推理避坑指南【免费下载链接】sherpa-onnxSpeech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Support embedded systems, Android, iOS, HarmonyOS, Raspberry Pi, RISC-V, RK NPU, Axera NPU, Ascend NPU, x86_64 servers, websocket server/client, support 12 programming languages项目地址: https://gitcode.com/GitHub_Trending/sh/sherpa-onnx用 Sherpa-onnx 在本地跑流式识别时如果你跳过上层封装、直接对 Zipformer ONNX 模型做 ONNX 推理多半会先撞上这样一行Required inputs missing。别慌模型文件没坏——你只是漏传了一整组缓存输入。修好之后你会发现这套特征 缓存的喂法其实非常固定。⚡ 先说结论报错不是 bug是输入不全Required inputs missing几乎都发生在同一个场景调用session.Run时只传了特征张量x。Zipformer 流式 encoder 的完整输入清单是x加上每个 encoder 层的 7 组cached_*张量少传任何一组onnxruntime 都会直接拒收。换句话说x只是入口之一。类比缓存状态是上一段音频留给模型的记忆流式识别像人做速记听到新句子时大脑不会把前面的内容重新听一遍而是接着刚才听到哪儿继续往下记。Zipformer 同理——cached_key、cached_val存着注意力已经算过的内容cached_avg、cached_len记录均值与长度统计cached_conv1、cached_conv2留着卷积模块的尾巴。这份记忆让模型收到新音频块时无需重算历史。你可以把它理解成模型的滚动工作区每轮结束都要整体刷新。输入张量对照表以 batch1 为例流式 encoder 各输入及取值差异如下输入张量形状首次推理后续推理x[1, T, 80]当前块的 Mel 特征新一块的特征cached_len每层一个[1, 1]0上一轮的对应输出cached_avg每层一个[1, 1, D]全 0上一轮的对应输出cached_key每层一个[1, L, 1, D_attn]全 0上一轮的对应输出cached_val / cached_val2每层各一[1, L, 1, D_attn/2]全 0上一轮的对应输出cached_conv1 / cached_conv2每层各一[1, 1, D, K-1]全 0上一轮的对应输出其中 D 是 encoder 层维度L 是左上下文长度K 是卷积模块核宽全部能从模型 metadata 里读到不用背。 流式推理缓存传递四步走清零记忆开局按上表形状给所有cached_*造全零张量这就是模型的初始记忆。喂入特征把当前块的 Mel 特征传给x连同各组缓存一起Run。取走新记忆输出第 0 项是编码结果其余各项与缓存输入严格一一对应直接收下作为下一轮输入。滚动循环新记忆进缓存槽下一块音频进来重复第 2、3 步直到整段音频说完。 高频翻车点输出顺序别手排除第 0 项外的输出和缓存输入严格一一对应手动乱序拼接会在下一轮直接炸形状。缓存不更新或跨流复用一直拿旧缓存算结果会越推越漂拿 A 音频流的缓存去算 B 音频从第一句就错。形状靠猜层数、D_attn、K 以模型 metadata 为准先读 metadata 再建零张量80 维特征来自 fbank 默认配置别手改。性能与工程化点到为止实时采集时让音频块大小和特征提取窗口对齐凑够定长帧就推一轮避免半帧空转cached_*体积不大全程留在内存里即可没必要落盘encoder、decoder、joiner 三个 session 相互独立多路音频各建一套模型实例避免跨流干扰。下一步从 Python API 走向 C 源码先用python-api-examples/下的在线解码示例把整条链路跑通确认音频与模型配置没问题想深挖时直接读 online-zipformer-transducer-model.ccGetEncoderInitStates就是清零记忆的参考实现RunEncoder则是喂特征 取新记忆的完整写法。读源码时对照本文的输入张量对照表逐项核对形状理解会快很多。【免费下载链接】sherpa-onnxSpeech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Support embedded systems, Android, iOS, HarmonyOS, Raspberry Pi, RISC-V, RK NPU, Axera NPU, Ascend NPU, x86_64 servers, websocket server/client, support 12 programming languages项目地址: https://gitcode.com/GitHub_Trending/sh/sherpa-onnx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考