ML.NET调用Azure Custom Vision导出的ONNX模型预测结果偏差大如何解决
问题修复建议
优先修复像素归一化与通道顺序配置
Azure Custom Vision导出的ONNX目标检测模型默认要求输入像素值归一化到[0, 1]区间,你当前代码直接输出0-255原始像素值,和模型训练时的预处理逻辑完全不匹配,这是结果差异最大的诱因。同时Custom Vision模型默认使用RGB通道顺序,你当前配置的ABGR顺序本身就是错误的。
调整ExtractPixels配置如下:.Append(mlContext.Transforms.ExtractPixels( colorsToExtract: ImagePixelExtractingEstimator.ColorBits.Rgb, orderOfExtraction: ImagePixelExtractingEstimator.ColorsOrder.RGB, scale: 1.0f / 255, // 新增归一化参数 interleavePixelColors: false, // 输出CHW维度顺序,匹配ONNX输入要求 outputColumnName: MLObjectDetectionSettings.InputTensorName))修正图像缩放逻辑
你当前使用的ResizingKind.Fill会直接拉伸图像导致物体形变,而Custom Vision平台默认预处理逻辑为等比缩放+边缘填充,和平台预处理逻辑不匹配会直接导致检测精度下降。修改ResizeImages配置:.ResizeImages( resizing: ImageResizingEstimator.ResizingKind.IsoPad, // 替换Fill为等比缩放补边 outputColumnName: MLObjectDetectionSettings.InputTensorName, imageWidth: MLObjectDetectionSettings.ImageWidth, imageHeight: MLObjectDetectionSettings.ImageHeight, inputColumnName: nameof(MLObjectDetectionInputData.Image))核对输出张量解析逻辑
需确认MLObjectDetectionSettings.OutputTensorName和ONNX模型实际输出的张量名完全一致,Custom Vision导出的目标检测ONNX默认输出4组张量:detected_boxes、detected_scores、detected_classes、num_detections,你需要分别绑定四个输出列,而非仅绑定单个输出张量。同时解析结果时需添加置信度过滤(建议阈值≥0.5)和非极大值抑制(NMS)逻辑,过滤重复、低置信度的检测框。校验输入图像格式
WPF原生BitmapSource默认格式为PBgra32,传入ML.NET前建议先转换为Rgb24格式,避免透明度通道干扰像素提取结果。
内容的提问来源于stack exchange,提问作者block chain
相关产品推荐
相关产品推荐

