Загрузка ранее сохранённой модели

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


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

В ml5.js модель можно сохранить после обучения с помощью метода save(). Сохранение создаёт папку или файл (в зависимости от типа модели), включающий:

  • Архитектуру модели – описание слоёв и их параметров.
  • Веса модели – численные параметры, полученные в процессе обучения.
  • Конфигурацию обучения – параметры оптимизатора и метрики (для некоторых типов моделей).

После сохранения модель становится доступной для загрузки и повторного использования через метод load().


Формат сохранённой модели

В зависимости от типа модели формат файлов может различаться. Основные типы:

  1. ImageClassifier – классификатор изображений.
  2. PoseNet – детектор поз.
  3. Regression – модель регрессии для числовых данных.
  4. TextClassifier – классификатор текста.

Сохраняемая модель обычно включает файлы:

  • model.json – структура модели.
  • weights.bin – веса модели.
  • metadata.json – дополнительные данные (опционально).

Файлы должны быть размещены в доступной директории сервера или на публичном URL, если загрузка происходит с веб-страницы.


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

Для загрузки ранее сохранённой модели используется соответствующий конструктор класса с указанием пути к файлу модели. Примеры:

1. Загрузка ImageClassifier

let classifier;

function preload() {
  classifier = ml5.imageClassifier('models/myImageModel/model.json');
}

Здесь 'models/myImageModel/model.json' — путь к сохранённой модели. После загрузки можно использовать методы classify() для предсказаний.

2. Загрузка PoseNet

let poseNet;

function setup() {
  createCanvas(640, 480);
  const video = createCapture(VIDEO);
  video.hide();

  poseNet = ml5.poseNet(video, 'models/myPoseNet/', modelReady);
}

function modelReady() {
  console.log('PoseNet загружен');
  poseNet.on('pose', gotPoses);
}

Для PoseNet путь указывается к папке с моделью. После загрузки можно подписаться на событие pose для обработки предсказаний.


Асинхронная загрузка

Метод загрузки возвращает Promise, что позволяет обрабатывать модель после полной загрузки:

ml5.imageClassifier('models/myImageModel/model.json')
  .then(classifier => {
    console.log('Модель загружена');
    classifier.classify(someImage, (err, results) => {
      if (err) {
        console.error(err);
      } else {
        console.log(results);
      }
    });
  });

Использование промисов предотвращает ошибки, связанные с попыткой работы с моделью до завершения её загрузки.


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

  1. Совместимость версий Модель, сохранённая в одной версии ml5.js или TensorFlow.js, может не корректно загружаться в другой версии. Рекомендуется сохранять информацию о версии библиотеки вместе с моделью.

  2. Оптимизация загрузки Для крупных моделей целесообразно хранить веса отдельно и загружать их через CDN, чтобы ускорить загрузку и уменьшить нагрузку на сервер.

  3. Обработка ошибок В процессе загрузки возможны ошибки: неправильный путь к файлу, повреждённые данные или несовместимость формата. Для их обработки используют конструкцию try/catch или catch в промисах.

ml5.imageClassifier('models/myImageModel/model.json')
  .then(classifier => {
    console.log('Модель успешно загружена');
  })
  .catch(error => {
    console.error('Ошибка загрузки модели:', error);
  });

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

  • Для крупных проектов рекомендуется структурировать модели по папкам, чтобы различать версии и типы моделей.
  • Сохранять метаданные, включающие дату создания, описание и параметры обучения, чтобы облегчить поддержку и обновление моделей.
  • Использовать preload() в p5.js для гарантии того, что модель загружена до начала работы с визуальными элементами.

Загрузка ранее сохранённой модели в ml5.js обеспечивает повторное использование обученных моделей, сокращает время запуска приложений и позволяет интегрировать машинное обучение в веб-проекты с минимальными усилиями.