ONNX Runtime Web (ORT Web) предоставляет возможность выполнения
моделей машинного обучения непосредственно в браузере с использованием
JavaScript. Ключевой этап работы с ORT Web — загрузка модели. Библиотека
поддерживает несколько способов загрузки: из URL, из
ArrayBuffer, через File API и из строки Base64. Каждое из
этих решений имеет свои особенности и сценарии применения.
Использование URL является самым распространённым способом интеграции модели, особенно когда она размещена на сервере или CDN.
Пример загрузки:
import * as ort from 'onnxruntime-web';
async function loadModelFromURL(url) {
const session = await ort.InferenceSession.create(url);
return session;
}
Особенности:
ArrayBuffer позволяет работать с бинарными данными
напрямую, что полезно при предварительной обработке или хранении моделей
в IndexedDB.
Пример загрузки:
async function loadModelFromArrayBuffer(buffer) {
const session = await ort.InferenceSession.create(buffer);
return session;
}
// Использование Fetch API для получения ArrayBuffer
const response = await fetch('model.onnx');
const buffer = await response.arrayBuffer();
const session = await loadModelFromArrayBuffer(buffer);
Особенности:
File API позволяет загружать модели, выбранные пользователем локально
через <input type="file">. Это удобно для
интерактивных приложений, где пользователь сам предоставляет модель.
Пример загрузки:
const inputElement = document.getElementById('fileInput');
inputElement.addEventListener('change', async (event) => {
const file = event.target.files[0];
const arrayBuffer = await file.arrayBuffer();
const session = await ort.InferenceSession.create(arrayBuffer);
});
Особенности:
Base64 позволяет хранить модель в виде строки, что может быть удобно для встраивания в исходный код или передачи через JSON.
Пример загрузки:
function base64ToArrayBuffer(base64) {
const binaryString = atob(base64);
const len = binaryString.length;
const bytes = new Uint8Array(len);
for (let i = 0; i < len; i++) {
bytes[i] = binaryString.charCodeAt(i);
}
return bytes.buffer;
}
async function loadModelFromBase64(base64) {
const buffer = base64ToArrayBuffer(base64);
const session = await ort.InferenceSession.create(buffer);
return session;
}
Особенности:
ArrayBuffer может занимать
больше времени и памяти при больших моделях.| Метод | Основное применение | Преимущества | Недостатки |
|---|---|---|---|
| URL | Размещение на сервере или CDN | Простота, поддержка CORS | Требуется доступ к серверу |
| ArrayBuffer | Динамическая загрузка, кэширование | Гибкость, совместимость с IndexedDB | Необходима предварительная загрузка |
| File API | Пользовательские локальные файлы | Безопасно, интерактивно | Требуется пользовательский ввод |
| Base64 | Встраивание в код или JSON | Удобно для фронтенда, легко сериализуется | Высокие затраты памяти и конвертация |
ArrayBuffer.Каждый способ интеграции требует асинхронного подхода и правильного управления сессией ONNX Runtime Web, что обеспечивает стабильность и производительность при выполнении моделей в браузере.