ML. Net: модель ONNX с несколькими выходами - плохое время вывода - PullRequest
1 голос
/ 18 марта 2020

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

1) foreach + call .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?
  • Почему умножено время вывода?
...