ONNX Runtime Web (ORT Web) предоставляет возможность запускать модели машинного обучения непосредственно в браузере или в Node.js, используя высокопроизводительные механизмы выполнения. Важной частью работы с моделью является понимание структуры её входов и выходов, а также их характеристик. Метаданные сессии позволяют получить эту информацию.
inputNamesСвойство inputNames сессии содержит массив строк с
именами всех входов модели. Эти имена соответствуют именам, заданным при
экспорте модели в формат ONNX.
Пример использования:
const session = await ort.InferenceSession.create('model.onnx');
console.log(session.inputNames);
// Вывод: ['input_1', 'input_2']
Особенности:
feeds для метода session.run().outputNamesСвойство outputNames возвращает массив строк с именами
всех выходов модели. Это необходимо для корректного получения
результатов после выполнения инференса.
Пример использования:
console.log(session.outputNames);
// Вывод: ['output_scores', 'output_labels']
Особенности:
results, возвращаемого
session.run(feeds).inputMetadatainputMetadata представляет собой объект, где ключами
являются имена входов модели, а значениями — объекты с подробной
информацией о каждом входе.
Пример структуры inputMetadata:
{
'input_1': {
name: 'input_1',
type: 'tensor(float32)',
dimensions: [1, 3, 224, 224],
isRequired: true
},
'input_2': {
name: 'input_2',
type: 'tensor(int64)',
dimensions: [1],
isRequired: false
}
}
Ключевые поля:
name — имя входа модели.type — тип данных входного тензора, например
tensor(float32) или tensor(int64).dimensions — массив чисел, описывающий форму тензора.
Элемент null может означать динамический размер.isRequired — булево значение, указывающее, обязателен
ли вход для успешного выполнения инференса.Применение:
feeds.session.run().Объединение всех трёх свойств (inputNames,
outputNames, inputMetadata) позволяет
создавать универсальные функции инференса для разных моделей:
async function runModel(session, inputData) {
const feeds = {};
for (const name of session.inputNames) {
if (!inputData[name]) {
throw new Error(`Не передан входной тензор: ${name}`);
}
feeds[name] = inputData[name];
}
const results = await session.run(feeds);
const output = {};
for (const name of session.outputNames) {
output[name] = results[name];
}
return output;
}
Преимущества подхода:
feeds по метаданным
модели.Модели ONNX могут иметь динамические размеры входов
(null в dimensions). Метаданные позволяют
определить, какие размеры необходимо задать:
const metadata = session.inputMetadata['input_1'];
const shape = metadata.dimensions.map(dim => dim === null ? batchSize : dim);
const inputTensor = new ort.Tensor('float32', inputArray, shape);
inputMetadata позволяет корректно
формировать тензоры с динамическими размерностями.Метаданные сессии в ONNX Runtime Web — это фундаментальный инструмент
для безопасного и универсального взаимодействия с моделями.
inputNames, outputNames и
inputMetadata позволяют программно управлять вводом и
выводом, динамически адаптироваться к разным моделям и минимизировать
ошибки при формировании данных для инференса.