YOLOv7 在 ML.NET 中使用 ONNX 檢測對象

本文介紹如何在 ML.NET 中使用 YOLOv7 的 ONNX 模型來檢測圖像中的對象。

什么是 YOLO

YOLO(You Only Look Once)是一種先進的實時目標檢測系統。它是一個在COCO數據集上預訓練的物體檢測架構和模型系列,其版本也是在不斷優化更新。2022年7月,YOLOv7 來臨。官方版的YOLOv7相同體量下比YOLOv5 精度更高,速度更快。

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

ce70fa660ecaef3a76e0e51455959311.png

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?目錄看到樣例圖片的預測結果:

8d3495abfa654a853053f21215a3a4b2.png

預測結果

示例和參考

微軟官方提供了?在 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281355.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281355.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281355.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue中render: h = h(App)的含義

原文地址&#xff1a;Explanation for render: h > h(App) please 翻譯如下&#xff1a; render: h > h(App) 是下面內容的縮寫&#xff1a; render: function (createElement) {return createElement(App); }進一步縮寫為(ES6 語法)&#xff1a; render (createElem…

NppFTP小插件的使用

大家在Linux系統中配置運行環境時&#xff0c;一定會遇到相關配置文件的修改&#xff0c;雖說在Linux系統中可以使用vi,vim的命令進行文本編輯&#xff0c;但是操作起來還是沒有在Windows系統中用的爽&#xff0c;特別是操作大文本量的文件時。Notepad里提供了一個小插件&#…

『實戰』使用Excel催化劑二維碼功能批量生成帶不同圖案二維碼。

熟悉Excel催化劑的老讀者都知道&#xff0c;每逢圖書大促&#xff0c;筆者都會向出版社申請優惠碼優惠券來惠及廣大粉絲。當然公眾號上幫出版社推薦圖書&#xff0c;會有傭金回報&#xff0c;這也是筆者唯一能接受的推廣方式。公眾號自創立以來&#xff0c;沒有接過軟文&#x…

springboot ElasticSearch 簡單的全文檢索高亮

前陣子和張三豐聊天提到了es。這次正好有機會學習并使用 首先引入依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> 配置文件 spring.data.…

JavaScriptSerializer類 對象序列化為JSON,JSON反序列化為對象

JavaScriptSerializer 類由異步通信層內部使用&#xff0c;用于序列化和反序列化在瀏覽器和 Web 服務器之間傳遞的數據。說白了就是能夠直接將一個C#對象傳送到前臺頁面成為javascript對象。要添加System.Web.Extensions.dll的引用。該類位于System.Web.Script.Serialization命…

nodejs 實踐:express 最佳實踐(六) express 自省獲得所有的路由

nodejs 實踐&#xff1a;express 最佳實踐(六) express 自省獲得所有的路由 某些情況下&#xff0c;你需要知道你的應用有多少路由&#xff0c;這在 express 中沒有方法可以。因此我這邊曲線了一下&#xff0c;做成了一個函數進行處理。遍歷所有的方法進行處理。 代碼 const _ …

使用vue組件搭建網頁應用

使用vue組件搭建網頁應用搭建開發環境開發組件搭建開發環境 搭建一個 vue 項目最快的方式就是使用 vue cli 腳手架進行初始化&#xff0c;包含了所有完整的依賴及開發配置。 首先全局安裝 vue cli&#xff0c;打開 cmd 命令提示符 或者 power shell&#xff0c;輸入以下命令&…

重新整理 .net core 實踐篇 —linux上排查問題實用工具 [外篇]

前言介紹下面幾個工具:Lldbcreatedumpdotnet-dumpdotnet-gcdumpdotnet-symbolProcdump該文的前置篇為:https://www.cnblogs.com/aoximin/p/16839812.html獻給初學者&#xff0c;這篇就只介紹下看下日志和lldb&#xff0c;畢竟東西太多了。正文我以官網的例子作為演示&#xff1…

Office 365離線安裝

Office 365除了可以在線安裝外&#xff0c;還可以進行離線安裝&#xff0c;但激活還是需要連接互聯網的喲首先下載Office部署工具https://www.microsoft.com/en-us/download/details.aspx?id49117 下載文件后&#xff0c;運行自解壓縮可執行文件&#xff0c;其中包含 Office 部…

reduceByKey和groupByKey區別與用法

2019獨角獸企業重金招聘Python工程師標準>>> 在Spar看中&#xff0c;我們知道一切的操作都是基于RDD的。在使用中&#xff0c;RDD有一種非常特殊也是非常實用的format——pair RDD&#xff0c;即RDD的每一行是&#xff08;key, value&#xff09;的格式。這種格式很…

python自動化測試-D6-學習筆記之一(常用模塊補充datetime模塊)

# datetime 模塊import datetimeprint(datetime.datetime.today()) #當前日期&#xff0c;到秒 打印結果&#xff1a;2018-01-21 10:23:46.034410print(datetime.datetime.now()) # 當前日期&#xff0c;到秒 打印結果&#xff1a;2018-01-21 10:23:46.034410print(datetime.d…

Vue如何在data中正確引入圖片路徑

方法一&#xff1a;將圖片資源放入項目 /static 目錄下&#xff0c;使用絕對或相對路徑引用即可 // 文件結構 |-- src | |-- components | | |-- banner.vue |-- static | |-- images | | |-- pic.jpg<template><div id"banner"><img :s…

軟件工程的第一性原理丨SmartIDE

作者&#xff1a;徐磊原文地址&#xff1a;https://smartide.cn/zh/blog/2022-1022-software-engineering/徐磊英捷創軟科技&#xff08;北京&#xff09;有限公司創始?/?席架構師 / CEO / SmartIDE開源項?創始?。微軟最有價值專家MVP&#xff0c;微軟區域技術總監&#xf…

排序算法之快速排序詳解

一、算法介紹 快速排序&#xff1a;快速排序的基本思想是通過一次排序將等待的記錄分成兩個獨立的部分&#xff0c;其中一部分記錄的關鍵字小于另一部分的關鍵字。C部分的快速排序一直持續到整個序列被排序。 任取一個元素 (如第一個) 為中心提出所有小于它的元素&#xff0c;并…

openstack 中國聯盟公開課參會總結

主流趨勢 1. openstack defcore 互操作性認證。打通不同的openstack 廠商之間的連接2. 首批OpenStack管理員認證(COA)將于2016年進行3. 混合云應用廣泛 Cloud Broker,cascading openstack 云連接器4. DevOps5. 虛擬桌面6. Storage 方面&#xff0c;Ceph和Glusterfs 7. Network…

bzoj1088[SCOI2005]掃雷Mine

1088: [SCOI2005]掃雷Mine Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4284 Solved: 2552[Submit][Status][Discuss]Description 相信大家都玩過掃雷的游戲。那是在一個n*m的矩陣里面有一些雷&#xff0c;要你根據一些信息找出雷來。萬圣節到了&#xff0c;“余”人國流…

Re:從零開始的Vue項目搭建

Re&#xff1a;從零開始的Vue項目搭建初始的終結與結束的開始Nodejs項目的簡單測試從零開始webpack開發模式webpack編譯打包后記初始的終結與結束的開始 最開始接觸vue項目搭建是從vue-cli開始&#xff0c;模板式操作&#xff0c;一鍵搞定&#xff0c;幾乎可以無縫進入代碼開發…

在數據庫插入帶小數點數據的問題

想在mysql插入以下數據設計表的時候沒有注意,之前都用的int,這次換成了double,但是插入第一條3.50的時候數據庫顯示為:查了之后知道是設計表的時候沒有注意小數點的設置轉載于:https://juejin.im/post/5c0f61bb6fb9a049ea38cbe9

oracle 11g 創建 job 20

15-10-19 23:48:04分類&#xff1a; Oracle--創建一次執行的匿名塊任務&#xff0c;成功調用一次后job消失BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name > my_new_job2, job_type > PLSQL_BLOCK, job_action &g…

Jzoj5317 Func

f(1)1 f(2x)f(x) f(2x1)f(x)f(x1) 給出n<10^6&#xff0c;求:所有的i滿足f(i)n 第一道類歐算法 我們考慮一個性質 f(2x1)f(x)f(x1)f(2x)f(2x2) 所以&#xff0c;顯然有f(2x1)>f(2x) f(2x1)>f(2x2) 那么現在我們知道了f(2x1),自然考慮枚舉一個f(2x) 可以按照以下形式…