我是ML的新手,我试图从c#程序中使用YoloV5模型进行推断。我知道github端口,但想使用火炬而不是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:Python38python38.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#应用程序可以向其发送请求。
张贴这个作为一个答案,任何人正在寻求一个好方法使用YOLOv5在c#中,不需要处理python,因为它是使用ML.Net:
github.com/mentalstack/yolov5-net