需借助ONNX Runtime的.NET API实现ONNX模型推理:先安装Microsoft.ML.OnnxRuntime(GPU版需额外装Gpu包并配CUDA),再用InferenceSession加载模型,依InputMetadata准备NCHW格式float[]输入,通过OrtValue封装后调用Run执行推理,最后提取输出结果并处理常见兼容性问题。

如果您希望在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[]。










