Alles funktioniert ziemlich gut, aber ich möchte die Inferenz beschleunigen auf der C#-Seite mithilfe von Tasks oder Threads auf einer CPU. Ich habe keine GPU zur Verfügung.
Wenn ich den Code auf einem einzelnen Bild ausführe, beträgt die Gesamtzeit auf meinem PC etwa 200 ms, bei der Ausführung auf 30 Bildern erhalte ich etwa 900- 1000 ms.
Hier ist der interessante Code (ich habe ein eigenständiges Repo erstellt, um das Problem zu reproduzieren, es befindet sich auf meinem Github).
Code: Select all
private static void RunInferenceOnImages(List inputs)
{
var tasks = new List();
foreach (var image in inputs)
{
var input = new List() {
NamedOnnxValue.CreateFromTensor("float_input", image),
};
Task task = Task.Run(() => RunInference(modelPath, input));
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
foreach (var task in tasks)
{
var output = task.Result;
}
}
static int RunInference(string modelPath, List inputs)
{
using var session = new InferenceSession(modelPath);
using var results = session.Run(inputs);
var scores = results.First().AsTensor();
return (int)scores[0];
}