using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using System; using System.Collections.Generic; namespace ZeroLevel.ML.DNN { public abstract class SSDNN : IDisposable { protected readonly InferenceSession _session; public SSDNN(string modelPath, int deviceId) { var so = SessionOptions.MakeSessionOptionWithCudaProvider(deviceId); so.RegisterOrtExtensions(); so.LogSeverityLevel = OrtLoggingLevel.ORT_LOGGING_LEVEL_FATAL; so.GraphOptimizationLevel = GraphOptimizationLevel.ORT_ENABLE_ALL; so.ExecutionMode = ExecutionMode.ORT_PARALLEL; _session = new InferenceSession(modelPath, so); } protected void Extract(IDictionary> input, Action>> inputHandler) { var container = new List(); foreach (var pair in input) { container.Add(NamedOnnxValue.CreateFromTensor(pair.Key, pair.Value)); } using (var output = _session.Run(container)) { var result = new Dictionary>(); foreach (var o in output) { result.Add(o.Name, o.AsTensor()); } inputHandler.Invoke(result); } } public void Dispose() { _session?.Dispose(); } } }