Загрузка модели по URL

ml5.js предоставляет высокоуровневый интерфейс для работы с моделями машинного обучения в браузере на JavaScript. Одной из ключевых возможностей является загрузка кастомных моделей через URL, что позволяет использовать модели, обученные вне среды ml5.js, и интегрировать их в веб-приложения.


Основные принципы

Загрузка модели по URL реализуется через методы, специфичные для каждого типа модели. Общая схема следующая:

  1. Подготовка модели Модель должна быть сохранена в формате, поддерживаемом ml5.js (например, TensorFlow.js формат .json и веса .bin). Если используется модель, обученная в Python с TensorFlow, её необходимо конвертировать с помощью tensorflowjs_converter.

  2. Указание URL URL может быть абсолютным (с внешнего сервера) или относительным (локально, в структуре проекта). Важно обеспечить корректный доступ к файлам модели через CORS, если они загружаются с внешнего источника.

  3. Инициализация модели Для загрузки используется объект соответствующей модели. Например:

    const classifier = ml5.imageClassifier('URL_к_модели/model.json', modelLoaded);

    Здесь modelLoaded — функция обратного вызова, которая срабатывает после успешной загрузки модели.


Работа с обратными вызовами

ml5.js использует асинхронный подход. Функция обратного вызова позволяет убедиться, что модель готова к использованию перед началом инференса.

function modelLoaded() {
  console.log('Модель успешно загружена!');
}

При работе с большими моделями может возникнуть задержка, поэтому часто используют индикаторы загрузки или промисы:

ml5.imageClassifier('URL_к_модели/model.json')
  .then(classifier => {
    console.log('Модель готова к работе');
  })
  .catch(error => {
    console.error('Ошибка загрузки модели:', error);
  });

Особенности разных типов моделей

  1. Классификаторы изображений (imageClassifier) Поддерживают загрузку кастомных моделей и предобученных моделей, таких как MobileNet. Можно передавать URL напрямую, и ml5.js автоматически загружает веса и структуру сети.

  2. Сегментация изображений (imageSegmenter) При использовании кастомных моделей важно убедиться, что формат модели соответствует требованиям ml5.js: выходной слой должен выдавать сегментационные карты в ожидаемом формате.

  3. Распознавание текста (charRNN) Для текстовых моделей необходимо передавать путь к JSON-файлу с конфигурацией сети и весами, которые предварительно были преобразованы в формат TensorFlow.js.

  4. PoseNet и другие модели для видео При загрузке с URL важно указывать не только модель, но и конфигурацию детектора (например, architecture, outputStride), чтобы инференс выполнялся корректно.


Практические рекомендации

  • Проверка формата: все файлы модели должны быть доступны по URL и иметь правильную структуру (JSON + BIN). Ошибка в структуре приведёт к сбоям при загрузке.
  • CORS: при загрузке модели с внешнего сервера необходимо включить поддержку CORS, иначе браузер заблокирует запрос.
  • Асинхронная работа: загрузка может занимать значительное время. Использование промисов или async/await повышает читаемость кода.
  • Оптимизация: для веб-приложений важно минимизировать размер модели и количество загружаемых весов, чтобы ускорить загрузку и снизить нагрузку на клиент.

Пример интеграции кастомного классификатора

let classifier;
let img;

function preload() {
  img = loadImage('example.jpg');
}

function setup() {
  createCanvas(400, 400);
  classifier = ml5.imageClassifier('https://example.com/model/model.json', () => {
    console.log('Кастомная модель загружена');
    classifyImage();
  });
}

function classifyImage() {
  classifier.classify(img, (error, results) => {
    if (error) {
      console.error(error);
    } else {
      console.log('Результаты классификации:', results);
    }
  });
}

В этом примере создаётся простое приложение, загружающее кастомную модель с внешнего URL и классифицирующее локальное изображение.


Поддержка версий моделей

ml5.js поддерживает загрузку моделей как старых версий TensorFlow.js, так и новых. Важно учитывать:

  • Модели, обученные на более старых версиях TensorFlow, могут требовать конвертации.
  • Каждая модель должна содержать метаданные, необходимые ml5.js для определения слоёв и форматов входных/выходных данных.

Заключение по использованию URL

Загрузка модели по URL позволяет легко интегрировать кастомные и сторонние модели в веб-приложения без необходимости локальной сборки. Ключевым моментом является корректное указание пути к JSON-файлу модели, поддержка CORS и асинхронная работа с обратными вызовами или промисами. Такой подход открывает возможность динамически менять модели и использовать предобученные сети, расширяя функциональность приложения на базе ml5.js.