ONNX

Parent: ai_keywords

ONNX 百科解释

核心定义

ONNX(Open Neural Network Exchange) 是由微软、Facebook(Meta)等联合发起的开放神经网络交换格式,旨在建立深度学习模型的互操作标准。它将训练好的模型(如 PyTorch、TensorFlow)转化为统一的计算图中间表示,实现跨框架、跨硬件的无缝部署与推理。ONNX 不仅定义了模型结构(protobuf 序列化),还规定了算子集(Opset)和数据类型,是医疗 AI 落地中连接科研与临床的“数字胶水”。

关键技术点

  1. 计算图标准化
    ONNX 使用静态图(Directed Acyclic Graph)描述模型,节点为算子(如 Conv、BatchNorm),边为张量。这一抽象层解耦了训练框架与推理引擎,允许将复杂的临床模型(如 3D UNet)从 PyTorch 直接导出为 .onnx 文件。

  2. 算子集版本控制
    每个 ONNX 版本(如 opset 21)定义了支持的算子列表。通过算子升级与兼容策略,确保新框架导出的模型可在旧推理端运行。这对需要长期维护的临床系统(如脑电分析平台)至关重要。

  3. 量化与优化
    ONNX Runtime 支持 INT8/FP16 量化、图优化(算子融合、常量折叠)以及动态形状推理。在资源受限的床旁设备(如便携脑电图机)上,可将模型体积压缩 4×,推理延迟降低 2-3×,同时保持诊断精度。

  4. 异构后端适配
    通过 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 解决方案

  1. 将 PyTorch 模型导出为 ONNX(opset 19),定义动态 batch 与序列长度,适应不同 EEG 采样时长。
  2. 使用 ONNX Runtime 的 TensorRT EP 优化服务器端推理(FP16 量化,延迟降低 60%),同时用 OpenVINO EP 加速 Intel 硬件上的床旁监测(量化至 INT8,精度损失 < 0.5% AUC)。
  3. 在云平台通过 NuGet 包 统一部署,无需重写推理代码。最终将模型从“科研原型”转化为“临床工具”,实现跨院区多中心验证。

该框架已被纳入首都医科大学 “脑科学与类脑研究” 重点专项,支持超过 2000 例患者的实时脑电监测。通过 ONNX 的互操作性,神经电生理团队可以直接复用医院现有的 INFINITT PACS 系统的 GPU 资源,而无需更换硬件。