C#适配yolov26目标检测

张开发
2026/4/13 8:22:40 15 分钟阅读

分享文章

C#适配yolov26目标检测
C#部署yolo26-det工业场景C#调用yolo26目标检测方法yolo系列更新到26版本工业界适配yolo26后处理小细节private ListResults YoloV26Detection(DisposableNamedOnnxValue[] onnxvalue, int W, int H) { ConcurrentBagResults pResults new ConcurrentBagResults(); var outputShape _inferenceSession.OutputMetadata.First().Value.Dimensions; var inputShape _inferenceSession.InputMetadata.First().Value.Dimensions; var result_det onnxvalue[0].AsTensorfloat().ToArray(); Mat result_data new Mat(outputShape[1], outputShape[2], MatType.CV_32F, result_det); var (w, h) (W, H); var (xGain, yGain) (modelMeta.Width / (float)w, modelMeta.Height / (float)h); var gain Math.Min(xGain, yGain); var (xPad, yPad) ((modelMeta.Width - w * gain) / 2, (modelMeta.Height - h * gain) / 2); Parallel.For(0, outputShape[1], i { float x1 result_data.Atfloat(i, 0); float y1 result_data.Atfloat(i, 1); float x2 result_data.Atfloat(i, 2); float y2 result_data.Atfloat(i, 3); float score result_data.Atfloat(i, 4); float classId result_data.Atfloat(i, 5); if (score modelMeta.Confidence) { float xMin ((x1 - xPad) / gain); float yMin ((y1 - yPad) / gain); float xMax ((x2 - xPad) / gain); float yMax ((y2 - yPad) / gain); xMin Clamp(xMin, 0, w - 0); yMin Clamp(yMin, 0, h - 0); xMax Clamp(xMax, 0, w - 1); yMax Clamp(yMax, 0, h - 1); string label modelMeta.Labels[(int)classId]; var prediction new Results() { Score (float)score, PRType PRType.Detection, Class_Name label, DectRect new Rect((int)xMin, (int)yMin, (int)(xMax - xMin), (int)(yMax - yMin)), }; pResults.Add(prediction); } }); return pResults.ToList(); }注意前处理和之前的v8 v11等通用区别在于output V26输出结构为[x1,y1,x2,y2,score,class_id]与之前的[x, y, w, h, obj_conf, class_1, class_2, …, class_80]有差异

更多文章