카테고리 없음
Segmentation학습 > Onnx > C# - (4) C# inference
카멜레온개발자
2022. 9. 29. 18:59
1. Console 프로젝트를 만든다
2. Nuget 프로젝트에서 OnnxRuntime을 다운받는다
3. OpencvSharp관련 프로젝트도 다운 받는다
4. https://github.com/singetta/OnnxSample/tree/main/OnnxSample/Yolov5 경로의 3개의 cs파일을 다운 받아 프로젝트에 포함시킨다
5. 프로젝트 빌드 속성을 다음과 같이 수정
6. YoloDetector.cs 파일의 생성자 부분을 다음과 같이 바꾼다
public YoloDetector(string model_path)
{
#region 추가
OrtCUDAProviderOptions ortCUDAProviderOptions = new OrtCUDAProviderOptions();
var providerOptionsDict = new Dictionary<string, string>();
providerOptionsDict["cudnn_conv_use_max_workspace"] = "1";
ortCUDAProviderOptions.UpdateOptions(providerOptionsDict);
var option = SessionOptions.MakeSessionOptionWithCudaProvider(ortCUDAProviderOptions);
option.LogSeverityLevel = OrtLoggingLevel.ORT_LOGGING_LEVEL_VERBOSE;
#endregion
#region 주석처리
/*
var option = new SessionOptions();
option.GraphOptimizationLevel = GraphOptimizationLevel.ORT_ENABLE_ALL;
option.ExecutionMode = ExecutionMode.ORT_SEQUENTIAL;
*/
#endregion
sess = new InferenceSession(model_path, option);
imageFloat = new Mat();
debugImage = new Mat();
MinConfidence = 0.2f;
NmsThresh = 0.4f;
}
7. Inference 프로그램은 다음과 같다(Program.cs)
using OnnxSample.Yolov5;
using OpenCvSharp;
using System;
namespace OnnxSegmInference
{
internal class Program
{
static void Main(string[] args)
{
var dataSizeY = 384;
var dataSizeX = 480;
var detector = new YoloDetector("segmbin_best_mode.onnx")
{
imgSize = new Size(dataSizeX, dataSizeY),
MinConfidence = 0.5f
};
using (var image = Cv2.ImRead("0001TP_008550.png"))
{
var inspImage = image.Resize(new Size(dataSizeX, dataSizeY));
DateTime dtBeg = DateTime.Now;
var result = detector.objectSegmentation(inspImage);
Cv2.NamedWindow("SOURCE", WindowFlags.Normal);
Cv2.ImShow("SOURCE", inspImage);
for (int i=0; i<result.Count; i++)
{
using (var dispImage1 = new Mat(new Size(dataSizeX, dataSizeY), MatType.CV_8UC3))
{
Cv2.CvtColor(result[0], dispImage1, ColorConversionCodes.GRAY2BGR);
Cv2.NamedWindow("RESULT" + (i+1).ToString(), WindowFlags.Normal);
Cv2.ImShow("RESULT" + (i + 1).ToString(), dispImage1);
}
}
Cv2.WaitKey();
}
}
}
}
8. onnx파일과 데이터 이미지 파일을 같은 폴더에 두고 실행을 하면 다음의 결과를 볼 수 있다