Запуск моделей TensorFlow.js на сервере Node.js
Этот пост является четвертым из моей серии о AutoML Vision Edge в Google Cloud. В публикации будет рассказано об использовании Tensorflow.js
моделей на NodeJS
серверах. Если вы до сих пор не следите за серией AutoML Vision Edge, вот некоторые итоги:
Мы начали эту серию с изучения того, как можно обучить и запустить логический вывод на готовой к работе модели машинного обучения за несколько часов с помощью AutoML Google Cloud.
В первом посте мы использовали формат .tflite
, предоставленный AutoML, для выполнения вывода на устройстве.
Во втором посте мы использовали Python для выполнения вывода в формате TF Saved Model, доступном нам как .pb
файл.
В третьем посте мы использовали формат tf.js
, а также загрузили и запустили модель прямо в браузере.
В этом посте мы узнаем, как использовать формат Tf.js
модели AutoML на сервере, а не в браузере. Если вы новичок в этой серии, я бы порекомендовал пройти часть 1 серии, прежде чем читать дальше.
TensorFlow.js с Node.js
TensorFlow.js был расширен для работы на Node.js с использованием библиотеки расширений под названием tfjs-node
. Это позволяет использовать TensorFlow.js в серверных приложениях JavaScript без использования Python.
Если вы занимаетесь веб-разработкой или работаете над мобильным приложением, использующим серверы Node.js, вы можете легко использовать AutoML с tfjs-node
для обучения и выполнения логического вывода в своем приложении. Это удалит любые дополнительные зависимости, такие как изменение языка на Python (или поиск дополнительного разработчика Python для завершения проекта). И клиент, и сервер могут быть написаны на JavaScript, а модели машинного обучения также могут быть выведены на стороне сервера.
Поддержка Node.js в AutoML нигде должным образом не документирована. Этот пост поможет вам понять и использовать пакет
tfjs-node
с моделями кромок на основе AutoML.
Подробнее об этом можно узнать здесь.
TensorFlow.js и Node.js с AutoML
Чтобы использовать модели AutoML в Node.js, первым делом необходимо установить все необходимые пакеты.
Шаг 1. Установка пакетов
npm init npm install @tensorflow/tfjs-node @tensorflow/tfjs-automl
Шаг 2: Включение всех пакетов в начало файла:
const tf = require("@tensorflow/tfjs-node"); const automl = require("@tensorflow/tfjs-automl"); const fs = require("fs"); const path = require('path');
В модели TensorFlow.js, как мы видели в предыдущем сообщении блога, есть много файлов .bin
, а также файл model.json
.
Шаг 3. Загрузка модели и файла словаря
tf.js
также требуется dictionary
файл, в котором мы определили классы для модели классификации. Файл словаря доступен в формате экспортированной модели tf.js
:
const loadDictionary = modelUrl => { const lastIndexOfSlash = modelUrl.lastIndexOf("/"); const prefixUrl = lastIndexOfSlash >= 0 ? modelUrl.slice(0, lastIndexOfSlash + 1) : ""; const dictUrl = `${prefixUrl}dict.txt`; const text = fs.readFileSync(dictUrl, { encoding: "utf-8" }); return text.trim().split("\n"); };
Мы будем использовать tf.loadGraphModel()
из tensorflow/tfjs-node
. Функция загрузит все файлы моделей или .bin
файлы, используя model.json
файлы.
Функция возвращает Promise<tf.GraphModel>
, , который является направленным ациклическим графом, построенным на основе SavedModel
GraphDef
, и позволяет нам выполнять вывод:
const [model, dict] = await Promise.all([tf.loadGraphModel(`file://${modelUrl}`), loadDictionary(modelUrl) ]);
Как только цепочка Promise
предоставит нам переменные model
и dict
, мы можем передать их функции AutoML ImageClassificationModel
, как показано ниже:
const loadImageClassification = async modelUrl => { const [model, dict] = await Promise.all([ tf.loadGraphModel(`file://${modelUrl}`), loadDictionary(modelUrl) ]); return new automl.ImageClassificationModel(model, dict); };
Шаг 4: Выполнение вывода для входного изображения
Перед выполнением вывода нам нужно убедиться, что мы предоставляем правильный формат модели. В этом случае наша модель принимает трехмерный тензор Uint8Array. Вы можете использовать Netron
, чтобы узнать формат ввода, поддерживаемый нашей моделью.
const decodeImage = imgPath => { const imgSrc = fs.readFileSync(imgPath); const arrByte = Uint8Array.from(Buffer.from(imgSrc)); return tf.node.decodeImage(arrByte); }; const main = async()=>{ await loadImageClassification(modelURL); return await model.classify(decodedImage); }
Наконец, мы напишем нашу main
функцию, которая будет вызывать нашу loadModelClassification
функцию. А затем мы запустим model.classify
, который является методом вывода для декодированного изображения.
Теперь мы можем вызвать весь скрипт, как показано ниже:
let output = await main() .then((val)=>{ return val }).catch(console.log); console.log(output);
Результатом будет объект JavaScript, содержащий метки из файла словаря с соответствующими вероятностями:
{"daisy": 0.12, "lotus": 99.88}
Заключение
В этой публикации мы увидели, как можно использовать TensorFlow.js
формат краевой модели, предоставляемый AutoML, на Node.js
серверах. Хотя в Интернете очень мало документации по этому поводу, выполнение вышеуказанных шагов также дает впечатляющие результаты на сервере.
Статья 3 и статья 4 [этот пост] этой серии снимают любые ограничения на использование формата TF.js на стороне клиента или на стороне сервера.
В следующих статьях этой серии мы узнаем о других форматах, поддерживаемых AutoML, и их соответствующих сценариях использования.
Если вам понравилась статья, пожалуйста, хлопните в ладоши. Совет. Ваши 50 хлопков сделают мой день лучше!
Хотите узнать больше обо мне? Пожалуйста, загляните на мой сайт. Если вы хотите получать обновления, подписывайтесь на меня в Twitter и Medium. Если что-то неясно или вы хотите что-то указать, оставьте комментарий ниже.
Примечание редактора. Heartbeat - это онлайн-публикация и сообщество, созданное авторами и посвященное предоставлению первоклассных образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.
Являясь независимой редакцией, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.
Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее создавать лучшие модели машинного обучения.