ONNX Runtime Web (ORT Web) — это высокопроизводительная библиотека для запуска моделей в формате ONNX непосредственно в браузере с использованием JavaScript. Она предоставляет интерфейс для выполнения предобученных нейронных сетей на стороне клиента, обеспечивая низкую задержку и независимость от серверной инфраструктуры. Важной особенностью является поддержка нескольких бэкендов выполнения: WebAssembly (WASM) и WebGPU, что позволяет гибко балансировать между производительностью и совместимостью.
Ключевые классы:
OrtSession — объект сессии для загрузки и выполнения
модели.InferenceSession — старый синоним, в современных
версиях используется OrtSession.Tensor — структура для представления входных и выходных
данных модели.Автоэнкодеры — это тип нейронных сетей, предназначенных для обучения компактного представления данных и последующего восстановления исходного сигнала. Основная задача при работе с ними — подготовка и нормализация данных.
Основные шаги:
Приведение к числовому формату. Все входные
признаки должны быть представлены числами типа
float32.
Нормализация. Для изображений часто используется
масштабирование пикселей в диапазон [0,1] или
стандартизация по среднему и стандартному отклонению.
Формирование тензоров. Для передачи в ORT Web
создаётся объект Tensor:
const inputTensor = new ort.Tensor('float32', dataArray, [batchSize, featureSize]);Сессия создаётся асинхронно:
const session = await ort.InferenceSession.create('autoencoder.onnx', {
executionProviders: ['wasm'], // или 'webgpu' для ускорения на GPU
});
Параметр executionProviders позволяет выбирать движок
выполнения. wasm обеспечивает совместимость со всеми
браузерами, webgpu обеспечивает значительное ускорение на
современных устройствах.
После подготовки данных и загрузки модели входной тензор передаётся в
метод run сессии:
const feeds = { input: inputTensor };
const results = await session.run(feeds);
const reconstructed = results.output;
feeds — объект, где ключи соответствуют именам входов
модели.results — объект с ключами, соответствующими выходам
модели.reconstructed — восстановленные данные после
прохождения через автоэнкодер.Принцип работы основан на том, что автоэнкодер хорошо восстанавливает данные, похожие на обучающую выборку, и плохо — аномальные. Для выявления аномалий используется пороговое значение ошибки восстановления.
Этапы:
Вычисление ошибки восстановления:
const mse = reconstructed.data.reduce((sum, val, i) => sum + (val - inputTensor.data[i])**2, 0) / inputTensor.data.length;Сравнение с порогом:
mse выше установленного значения, данные считаются
аномальными.run.Float32Array вместо массивов JavaScript значительно
ускоряет конвертацию в тензоры.Автоэнкодеры могут поддерживать различные размеры входных данных. ORT Web позволяет динамически формировать тензоры:
const batchSize = 10;
const featureSize = dynamicLength; // длина может меняться
const dynamicTensor = new ort.Tensor('float32', dataArray, [batchSize, featureSize]);
Важно удостовериться, что модель обучена на входах с переменной длиной или использует padding.
Для практического анализа аномалий полезно визуализировать разницу между входом и восстановленным выходом. Для изображений это можно делать с помощью canvas:
const diff = inputPixel - reconstructedPixel;
ctx.putImageData(new ImageData(diffArray, width, height), 0, 0);
Это позволяет интуитивно оценить локализацию аномалий, например, на изображениях промышленных объектов или медицинских снимках.