在 C# 中使用 YoloV5 进行对象检测

Object detection using YoloV5 in C#

我是 ML 新手,正在尝试使用 C# 程序中的 YoloV5 模型进行推理。我知道 github 端口,但想使用 torch 而不是 ML.NET。我找到了 PythonNET nuget 包,这段代码有效:

using System;
using System.Threading.Tasks;
using Python.Runtime;

namespace Utilities.ML
{
    public class ObjectDetection
    {
        public static void Detect(string url)
        {
            Runtime.PythonDLL = @"C:\Python38\python38.dll";
            using (Py.GIL())
            {
                dynamic torch = Py.Import("torch");
                dynamic model = torch.hub.load("ultralytics/yolov5", "yolov5s");
                dynamic img = url;
                dynamic results = model(img).pandas().xyxy[0].to_json();
                var str = results.ToString(); //Contains bounding box coords and class names in json format.
            }
        }
    }
}

问题是每次我调用这个函数时,模型都会被加载。这是一个昂贵的操作,我想知道在第一次调用 Detect() 时加载模型对象是否是一个坏主意。

此外,对于我要实现的目标来说,这是一个糟糕的解决方案吗?我没有很多 Python 经验,但我想另一种解决这个问题的方法是托管一个本地主机 REST API,我的 C# 应用程序可以将请求发送到?

将此作为答案发布给任何正在寻找在 C# 中使用 YOLOv5 的好方法的人,这不需要处理 python,因为它使用的是 ML.Net:

github.com/mentalstack/yolov5-net