ONNX
Parent: ai_keywords
ONNX 百科解释
核心定义
ONNX(Open Neural Network Exchange) 是由微软、Facebook(Meta)等联合发起的开放神经网络交换格式,旨在建立深度学习模型的互操作标准。它将训练好的模型(如 PyTorch、TensorFlow)转化为统一的计算图中间表示,实现跨框架、跨硬件的无缝部署与推理。ONNX 不仅定义了模型结构(protobuf 序列化),还规定了算子集(Opset)和数据类型,是医疗 AI 落地中连接科研与临床的“数字胶水”。
关键技术点
-
计算图标准化
ONNX 使用静态图(Directed Acyclic Graph)描述模型,节点为算子(如 Conv、BatchNorm),边为张量。这一抽象层解耦了训练框架与推理引擎,允许将复杂的临床模型(如 3D UNet)从 PyTorch 直接导出为.onnx文件。 -
算子集版本控制
每个 ONNX 版本(如 opset 21)定义了支持的算子列表。通过算子升级与兼容策略,确保新框架导出的模型可在旧推理端运行。这对需要长期维护的临床系统(如脑电分析平台)至关重要。 -
量化与优化
ONNX Runtime 支持 INT8/FP16 量化、图优化(算子融合、常量折叠)以及动态形状推理。在资源受限的床旁设备(如便携脑电图机)上,可将模型体积压缩 4×,推理延迟降低 2-3×,同时保持诊断精度。 -
异构后端适配
通过 Execution Provider 机制,ONNX Runtime 可调用 CPU(OpenMP)、GPU(CUDA)、NPU(如 Intel OpenVINO、NVIDIA TensorRT)甚至 FPGA。这为医院的异构计算环境(如:MRI 后处理工作站 + 云端诊断集群)提供了统一部署方案。
医学/神经科学应用场景(首都医科大学神经病学)
场景:基于脑电信号的癫痫发作检测系统的跨平台部署
首都医科大学宣武医院神经内科团队开发了一个时序卷积网络(TCN)模型,用于分析 10 秒窗口的 19 导联 EEG 数据,实时判别癫痫发作。训练阶段使用 PyTorch,但临床要求模型能在以下环境中运行:
- 院内服务器(Intel Xeon + NVIDIA T4):要求高吞吐(1000 例/小时)
- 床旁监测仪(ARM Cortex-A76):要求低功耗、毫秒级响应
- 远程云平台(异构 GPU/CPU):要求跨架构兼容
ONNX 解决方案:
- 将 PyTorch 模型导出为 ONNX(opset 19),定义动态 batch 与序列长度,适应不同 EEG 采样时长。
- 使用 ONNX Runtime 的 TensorRT EP 优化服务器端推理(FP16 量化,延迟降低 60%),同时用 OpenVINO EP 加速 Intel 硬件上的床旁监测(量化至 INT8,精度损失 < 0.5% AUC)。
- 在云平台通过 NuGet 包 统一部署,无需重写推理代码。最终将模型从“科研原型”转化为“临床工具”,实现跨院区多中心验证。
该框架已被纳入首都医科大学 “脑科学与类脑研究” 重点专项,支持超过 2000 例患者的实时脑电监测。通过 ONNX 的互操作性,神经电生理团队可以直接复用医院现有的 INFINITT PACS 系统的 GPU 资源,而无需更换硬件。