YOLOv7 在 ML.NET 中使用 ONNX 检测对象

目录

什么是 YOLO

ONNX 模型

执行预测

示例和参考

References


 

什么是 YOLO

YOLO(You Only Look Once)是一种先进的实时目标检测系统。它是一个在COCO数据集上预训练的物体检测架构和模型系列,其版本也是在不断优化更新。2022年7月,YOLOv7 来临。官方版的YOLOv7相同体量下比YOLOv5 精度更高,速度更快。

论文地址:https://arxiv.org/abs/2207.02696

Yolov7

ONNX 模型

开放神经网络交换 (ONNX) 是 AI 模型的开放源代码格式。ONNX 支持框架之间的互操作性,常见的机器学习框架都支持该模型的使用。

YOLOv7 的模型我们可以从一作 Chien-Yao Wang 的仓库获取:https://github.com/WongKinYiu/yolov7。在 Releases v0.1 中提供的 onnx 不能直接使用,我们需要下载预训练的 yolov7.pt 然后克隆项目,使用导出工具自行导出 onnx 模型。

python export.py --weights=yolov7.pt --grid --simplify

导出完成我们就可以得到 yolov7.onnx ,你也可以直接前往 CSDN 下载我分享的文件[1]。

执行预测

1.首先创建控制台应用程序,选择 .NET 6 作为要使用的框架。2.安装 Microsoft.ML.OnnxTransformer NuGet 包3.YOLOv7 整体结构与 YOLOv5 极其相似,我们可以直接使用 Yolov5Net NuGet 包里的分析器来处理模型输出。

剩下的工作,我们只需要编写执行预测的代码即可:

static readonly string assetsPath = GetAbsolutePath(@"../../../assets");
static readonly string modelFilePath = Path.Combine(assetsPath, "Model", "yolov7.onnx");
static readonly string imagesFolder = Path.Combine(assetsPath, "images");
static readonly string outputFolder = Path.Combine(assetsPath, "images", "output");

private static void Main(string[] args)
{
    if (!Directory.Exists(outputFolder))
    {
        Directory.CreateDirectory(outputFolder);
    }
    var imgs = Directory.GetFiles(imagesFolder).Where(filePath => Path.GetExtension(filePath) == ".jpg");

    using var scorer = new YoloScorer<YoloCocoP5Model>(modelFilePath);

    foreach (var imgsFile in imgs)
    {
        using var image = Image.FromFile(imgsFile);
        List<YoloPrediction> predictions = scorer.Predict(image);
        using var graphics = Graphics.FromImage(image);
        foreach (var prediction in predictions)
        {
            double score = Math.Round(prediction.Score, 2);

            graphics.DrawRectangles(new Pen(prediction.Label.Color, 3),
                new[] { prediction.Rectangle });

            var (x, y) = (prediction.Rectangle.X - 3, prediction.Rectangle.Y - 23);

            graphics.DrawString($"{prediction.Label.Name} ({score})",
                new Font("Consolas", 16, GraphicsUnit.Pixel), new SolidBrush(prediction.Label.Color),
                new PointF(x, y));
        }

        image.Save(Path.Combine(outputFolder, $"result{DateTime.Now.Ticks}.jpg"));
    }
}

/// <summary>
/// 获取程序启动目录
/// </summary>
/// <param name="relativePath">之下的某个路径</param>
/// <returns></returns>
private static string GetAbsolutePath(string relativePath)
{
    FileInfo _dataRoot = new FileInfo(typeof(Program).Assembly.Location);
    string assemblyFolderPath = _dataRoot.Directory!.FullName;

    string fullPath = Path.Combine(assemblyFolderPath, relativePath);

    return fullPath;
}

完整的代码样例见:https://github.com/sangyuxiaowu/ml_yolov7

编写完成执行,然后我们就可以在 assets/images/output 目录看到样例图片的预测结果:

预测结果

示例和参考

微软官方提供了 在 ML.NET 中使用 ONNX 检测对象[2] 的更详细的教程,包含训练和预测,感兴趣的同学可前往查阅。

References

[1] CSDN 下载我分享的文件: https://download.csdn.net/download/marin1993/86912472
[2] 在 ML.NET 中使用 ONNX 检测对象: https://learn.microsoft.com/zh-cn/dotnet/machine-learning/tutorials/object-detection-onnx

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
YOLOv5是一个基于深度学习目标检测算法,它能够实时准确地检测图像或视频的多个对象。而ML.NETMicrosoft开发的一个机器学习框架,它可以帮助开发者在自己的应用程序使用机器学习模型。在YOLOv5和ML.NET的结合,我们可以利用YOLOv5的目标检测能力,结合ML.NET的开发框架,来构建一个可以实时检测目标的应用程序。 首先,我们需要使用YOLOv5训练好的模型,该模型能够识别出多个不同类型的物体。然后,我们可以使用ML.NET将该模型集成到我们的应用程序。 在使用ML.NET时,我们可以使用C#或F#等编程语言来编写我们的应用程序。ML.NET提供了一套API和工具,使得我们可以加载YOLOv5模型并调用它进行实时目标检测。我们可以通过指定输入图像或视频来进行预测,模型将返回检测到的物体的位置和类别等信息。 通过结合YOLOv5和ML.NET,我们可以轻松地构建一个高性能的目标检测应用程序。我们可以将其应用于许多领域,例如智能监控、自动驾驶、工业检测等。同时,由于ML.NET的开发框架相对简单易用,即使对于没有机器学习经验的开发者来说,也可以快速上手使用和调试。 总而言之,YOLOv5和ML.NET的结合为我们提供了一个强大的工具,使我们能够构建出实时准确的目标检测应用程序。它们为我们提供了更多机会来应用深度学习技术,促进了人工智能在各个领域的发展。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值