ML.Net: модель ONNX с несколькими выходами - плохое время вывода

Я хочу сделать вывод для модели Onnx, которая имеет один входной тензор и несколько выходных тензоров (с разными размерами) с ML.Net и onnxruntime. Я использовал.GetColumn, чтобы получить желаемый результат. Чтобы получить все результаты, я попробовал два разных подхода:

1) foreach + вызов.GetColumn несколько раз:

foreach (var output in ModelOutput)
{
    IEnumerable<float[]> column = scoredData.GetColumn<float[]>(output);
    all = all.Concat(column);                              
}

2) Объединить выходные данные в один тензор (при определении моего конвейера):

.Append(mlContext.Transforms.ApplyOnnxModel(modelFile: modelLocation, outputColumnNames: ModelOutput, inputColumnNames: ModelInput))
.Append(mlContext.Transforms.Concatenate("all_outs", ModelOutput));

Оба подхода приводят к очень плохому времени вывода. Например, моей модели требуется 250 мс для одного выходного тензора и 2500 мс для десяти тензоров. Время вывода умножается в зависимости от количества выходов. При использовании той же модели в скрипте Python мне требуется менее 100 мс, чтобы собрать все выходные тензоры в один список!

Мои вопросы:

  • Есть ли другой способ получить несколько выходов в ML.Net?
  • Почему умножается время вывода?

0 ответов

Другие вопросы по тегам