Конвертация моделей TensorFlow и Keras для использования в ml5.js

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


Подготовка моделей TensorFlow/Keras

Модели, созданные в TensorFlow (TF) или Keras, хранятся в двух основных форматах:

  1. HDF5 (.h5) — традиционный формат Keras, содержащий архитектуру модели, веса и конфигурацию оптимизатора.
  2. SavedModel — современный формат TensorFlow, включающий директорию с метаданными, графом вычислений и весами.

Для работы с ml5.js необходим формат TensorFlow.js, который представляет собой JSON-файл с весами, разделёнными на бинарные файлы.

Этапы подготовки:

  1. Проверка модели на корректность работы в среде TensorFlow или Keras.
  2. Очистка модели от ненужных слоёв или компонентов, не поддерживаемых в браузере (например, специфических операций, требующих GPU).
  3. Сохранение модели в формате, совместимом с конвертацией в TensorFlow.js.

Установка инструментов для конвертации

Конвертация моделей осуществляется с помощью официального инструмента TensorFlow.js Converter. Он доступен как пакет npm:

npm install -g @tensorflow/tfjs-converter

Дополнительно рекомендуется установить TensorFlow для Python, если требуется конвертация из Keras:

pip install tensorflow

Конвертация моделей Keras

Для моделей Keras в формате .h5 процесс конвертации состоит из нескольких шагов.

Пример команды для конвертации:

tensorflowjs_converter \
    --input_format=keras \
    model.h5 \
    web_model/
  • --input_format=keras указывает исходный формат.
  • model.h5 — путь к файлу модели.
  • web_model/ — директория, куда будут сохранены файлы для использования в ml5.js.

После конвертации создаётся файл model.json и несколько бинарных файлов весов (group1-shard1of1.bin и т.д.).

Особенности:

  • Все пользовательские слои должны быть либо стандартными Keras-слоями, либо реализованными через tf.layers.
  • Функции активации и регуляризации должны поддерживаться TensorFlow.js.

Конвертация моделей TensorFlow SavedModel

Для моделей TensorFlow SavedModel команда будет выглядеть так:

tensorflowjs_converter \
    --input_format=tf_saved_model \
    --output_format=tfjs_graph_model \
    saved_model/ \
    web_model/
  • --output_format=tfjs_graph_model генерирует формат графа, оптимальный для inference в браузере.
  • В отличие от Keras, графовые модели позволяют сохранить сложные вычислительные цепочки, но требуют больше ресурсов при загрузке.

Интеграция моделей в ml5.js

После конвертации модель становится доступной для использования в ml5.js через соответствующие классы:

  • ml5.neuralNetwork() — для кастомных моделей, обученных или импортированных из TensorFlow.js.
  • ml5.imageClassifier(), ml5.poseNet(), ml5.soundClassifier() — для специализированных предобученных моделей, если их архитектура совпадает с конвертируемой моделью.

Пример использования конвертированной модели Keras:

const options = {
    task: 'classification',
    debug: true
};

const classifier = ml5.neuralNetwork(options);

classifier.load('web_model/model.json', () => {
    console.log('Модель успешно загружена');
});

После загрузки доступны методы classify(), predict(), addData() и train() для работы с данными в браузере.


Оптимизация моделей для работы в браузере

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

  1. Размер модели — крупные модели (>50 МБ) загружаются медленно. Рекомендуется использовать методы квантования:
tensorflowjs_converter \
    --input_format=keras \
    --quantize_float16 \
    model.h5 \
    web_model/
  1. Поддержка операций — некоторые операции TensorFlow не поддерживаются в TensorFlow.js, следует заранее проверить граф модели с помощью tfjs-layers или tfjs-converter.

  2. Асинхронная загрузка — ml5.js загружает модели асинхронно, поэтому вызовы к load() и predict() должны учитывать промисы или колбэки.


Проверка корректности конвертации

После конвертации важно убедиться, что модель:

  • Загружается без ошибок в браузере.
  • Дает предсказания, сравнимые с результатами в исходной среде TensorFlow/Keras.
  • Не требует ресурсов, превышающих возможности целевого устройства.

Для отладки можно использовать TensorFlow.js DevTools или включить debug: true при создании экземпляра ml5.neuralNetwork().


Совместимость версий

Для успешной конвертации следует синхронизировать версии TensorFlow/Keras с TensorFlow.js:

  • Keras ≥ 2.3 и TensorFlow ≥ 2.0 хорошо конвертируются в TensorFlow.js ≥ 3.0.
  • Для устаревших моделей рекомендуется обновление до совместимых версий или переподготовка модели.

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