C# ONNX模型推理方法 C#如何使用ONNX Runtime加载和运行AI模型

来源:这里教程网 时间:2026-02-21 17:40:20 作者:

如果您希望在C#环境中执行ONNX格式的AI模型推理,需借助ONNX Runtime提供的.NET API完成模型加载、输入准备与结果获取。以下是实现此目标的具体方法:

一、安装ONNX Runtime NuGet包

ONNX Runtime官方提供了适用于.NET平台的托管库,必须通过NuGet引入对应版本以支持CPU或GPU推理。选择与项目目标框架兼容的包是运行模型的前提。

1、在Visual Studio中右键点击解决方案资源管理器中的项目,选择“管理NuGet包”。

2、切换到“浏览”选项卡,搜索Microsoft.ML.OnnxRuntime并安装最新稳定版。

3、若需GPU加速,额外安装Microsoft.ML.OnnxRuntime.Gpu,并确保系统已部署CUDA和cuDNN环境。

二、创建InferenceSession并加载ONNX模型文件

ONNX Runtime通过InferenceSession类封装模型加载与执行逻辑,该对象初始化时会解析模型结构、分配内存并验证算子兼容性。

1、使用using语句声明并实例化InferenceSession,传入本地ONNX文件路径。

2、捕获OnnxRuntimeException异常,检查模型是否损坏或存在不支持的opset版本。

3、调用session.InputMetadata属性确认输入张量名称、形状及数据类型,为后续数据准备提供依据。

三、构造并填充模型输入张量

ONNX模型对输入数据的维度、类型和内存布局有严格要求,必须按InputMetadata中定义的shape与ElementType生成匹配的Array或Memory对象。

1、根据InputMetadata中指定的维度创建float[]数组,例如new float[1 * 3 * 224 * 224]用于RGB图像输入。

2、将原始图像数据归一化至[0.0f, 1.0f]区间,并按NCHW顺序填入数组。

3、使用OrtValue.CreateTensor方法将数组包装为ONNX Runtime可识别的输入值对象。

四、执行模型推理并提取输出结果

InferenceSession.Run方法触发实际计算流程,将输入张量送入模型图并返回包含所有输出节点值的OrtValue集合,其顺序与模型导出时定义一致。

1、构建InputContainer字典,键为模型输入名称(来自InputMetadata.Key),值为对应的OrtValue对象。

2、调用session.Run(inputContainer),返回OutputContainer对象。

3、通过outputContainer.First().Value.GetValue()提取首个输出张量的托管数组。

五、处理常见兼容性问题

部分ONNX模型因导出工具差异或opset升级可能引发类型不匹配、动态轴未绑定或缺失预处理节点等问题,需针对性干预。

1、若报错“Invalid argument: Input tensor format not supported”,检查输入tensor是否误用NHWC而非NCHW布局。

2、若出现“Node is not implemented”,确认ONNX Runtime版本是否支持模型所用opset,必要时降级模型或升级运行时。

3、对于含String类型输入/输出的模型,改用OrtValue.CreateStringTensor并传入string[]而非float[]。

相关推荐