Аномалия детекция и автоэнкодеры

ONNX Runtime Web (ORT Web) — это высокопроизводительная библиотека для запуска моделей в формате ONNX непосредственно в браузере с использованием JavaScript. Она предоставляет интерфейс для выполнения предобученных нейронных сетей на стороне клиента, обеспечивая низкую задержку и независимость от серверной инфраструктуры. Важной особенностью является поддержка нескольких бэкендов выполнения: WebAssembly (WASM) и WebGPU, что позволяет гибко балансировать между производительностью и совместимостью.

Ключевые классы:

  • OrtSession — объект сессии для загрузки и выполнения модели.
  • InferenceSession — старый синоним, в современных версиях используется OrtSession.
  • Tensor — структура для представления входных и выходных данных модели.

Подготовка данных для автоэнкодеров

Автоэнкодеры — это тип нейронных сетей, предназначенных для обучения компактного представления данных и последующего восстановления исходного сигнала. Основная задача при работе с ними — подготовка и нормализация данных.

Основные шаги:

  1. Приведение к числовому формату. Все входные признаки должны быть представлены числами типа float32.

  2. Нормализация. Для изображений часто используется масштабирование пикселей в диапазон [0,1] или стандартизация по среднему и стандартному отклонению.

  3. Формирование тензоров. Для передачи в 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 — восстановленные данные после прохождения через автоэнкодер.

Аномалия детекция с автоэнкодерами

Принцип работы основан на том, что автоэнкодер хорошо восстанавливает данные, похожие на обучающую выборку, и плохо — аномальные. Для выявления аномалий используется пороговое значение ошибки восстановления.

Этапы:

  1. Вычисление ошибки восстановления:

    const mse = reconstructed.data.reduce((sum, val, i) => sum + (val - inputTensor.data[i])**2, 0) / inputTensor.data.length;
  2. Сравнение с порогом:

    • Если mse выше установленного значения, данные считаются аномальными.
    • Порог подбирается на основе распределения ошибок на нормальных данных.

Оптимизация производительности

  1. Выбор бэкенда: WebGPU обеспечивает многократное ускорение при работе с большими моделями.
  2. Пакетная обработка (batching): Обработка нескольких входов одновременно снижает накладные расходы на вызовы run.
  3. Формат входных данных: Использование Float32Array вместо массивов JavaScript значительно ускоряет конвертацию в тензоры.
  4. Подгрузка модели заранее: Асинхронная загрузка модели при старте приложения минимизирует задержку при первом вызове.

Работа с динамическими размерами входа

Автоэнкодеры могут поддерживать различные размеры входных данных. 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);

Это позволяет интуитивно оценить локализацию аномалий, например, на изображениях промышленных объектов или медицинских снимках.

Использование ORT Web в реальном времени

  • Поддержка Web Workers позволяет выполнять инференс в отдельном потоке, не блокируя UI.
  • Для потоковых данных (например, с видеокамер) можно формировать тензоры на лету и выполнять детекцию с минимальной задержкой.
  • Асинхронная архитектура ORT Web хорошо сочетается с обработкой событий браузера, поддерживая интерактивные панели для отображения ошибок.

Совместимость и ограничения

  • WebAssembly поддерживается всеми современными браузерами, WebGPU — только в последних версиях Chrome, Edge, Safari.
  • Размер моделей ограничен ресурсами клиента; большие автоэнкодеры могут требовать упрощения архитектуры или сжатия модели.
  • Не поддерживаются все типы ONNX операций; при конвертации моделей важно проверять совместимость с ORT Web.