前言
在目標檢測一文中,我們學習了如何處理Onnx模型,并的到目標檢測結果,在此基礎上,本文實現(xiàn)基于.Net平臺的實例分割任務。
執(zhí)行YoloV8的分割任務后可以得到分割.pt模型。由于Python基本不用于工業(yè)軟件的部署,最終還是希望能在.Net平臺使用訓練好的模型進行預測。我們可以將.pt文件轉換成.onnx格式的網(wǎng)絡模型,然后使用Microsoft.ML.OnnxRuntime讀取、運行模型進行預測。
預測結果
使用環(huán)境
NETFramework
- .Net6.0
Nuget
- Microsoft.ML.OnnxRuntime.Gpu (1.15.1)
- OpenCvSharp4(4.7.0.20230115)
- OpenCvSharp4.Extensions (4.7.0.20230115)
- OpenCvSharpExtension (2.0.0.2)
model
測試使用coco128數(shù)據(jù)集訓練生成的模型:
yolov8n-seg.onnx
模型下載地址:yolov8n-seg.onnx
解決方案
預測結果類
/// <summary>
/// segment result
/// </summary>
public class SegPrediction
{
/// <summary>
/// label
/// </summary>
public SegClass? Label { get; init; }
/// <summary>
/// Box
/// </summary>
public Rect Rectangle { get; init; }
/// <summary>
/// score
/// </summary>
public float Score { get; set; }
/// <summary>
/// orginal mask 32
/// </summary>
public Mat Mask { get; set; }
/// <summary>
/// rgb mask
/// </summary>
public Mat RgbMask { get; set; }
}
實例分割類
與Detect任務不同的是,Segment任務的模型會輸出兩個張量,一個是detect的檢測結果,另一個是分割Mask的概率。如下圖所示:
ParseOutput方法主要是解析這兩個輸出結果。
其中:
output0
張量大?。篬1,116,8400],1表示batch,116 = 4 + 80 + 32;4表示預測Box的[x,y,cx,cy],80是80類的預測置信度,32是mask的大小。
output1
張量大?。篬1,32,160,160],輸出的是32張160*160的Mat。
將兩個輸出結果糅合在一起,即得到了預測結果。文章來源:http://www.zghlxwxcb.cn/news/detail-493246.html
注意
第一次使用需加載模型至Device,所以推理時間較長,之后運行效率大大提高,建議部署在自己項目中時,可在項目初始化時先推理一張demo圖片。文章來源地址http://www.zghlxwxcb.cn/news/detail-493246.html
到了這里,關于基于.Net6使用YoloV8的分割模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!