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?
- Почему умножается время вывода?