Brain.js — это библиотека на JavaScript для создания и обучения нейронных сетей прямо в браузере или на Node.js. Она предоставляет простой и интуитивный API для работы с различными типами сетей: от простых полносвязных до рекуррентных. ml5.js — высокоуровневая библиотека машинного обучения для браузера, построенная поверх TensorFlow.js. Она ориентирована на удобство использования и предоставляет готовые модели для классификации изображений, генерации текста, распознавания поз и других задач.
Совместное использование Brain.js и ml5.js позволяет сочетать гибкость настройки нейросетей с удобством доступа к готовым моделям и инструментам для работы с данными.
Для работы в браузере подключение осуществляется через CDN:
<script src="https://cdn.jsdelivr.net/npm/brain.js@2.0.0-beta.2/dist/brain-browser.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/ml5@latest/dist/ml5.min.js"></script>
Для Node.js используется установка через npm:
npm install brain.js ml5
И подключение в коде:
const brain = require('brain.js');
const ml5 = require('ml5');
Одной из ключевых задач при совместной работе Brain.js и ml5.js является подготовка и нормализация данных. Brain.js ожидает данные в виде объектов или массивов чисел, обычно от 0 до 1. Ml5.js, в свою очередь, часто возвращает данные в более сложных структурах (например, координаты ключевых точек на изображении или вероятности классов). Для передачи данных из ml5.js в Brain.js необходимо привести их к подходящему формату.
Пример нормализации координат позы из ml5.js для использования в Brain.js:
const poseNet = ml5.poseNet(video, modelLoaded);
poseNet.on('pose', (results) => {
if (results.length > 0) {
const keypoints = results[0].pose.keypoints.map(k => ({
x: k.position.x / video.width,
y: k.position.y / video.height
}));
const input = keypoints.flatMap(k => [k.x, k.y]);
// input готов для передачи в Brain.js
}
});
После нормализации данных можно создавать нейросеть Brain.js.
Наиболее часто используется NeuralNetwork для задач
классификации и recurrent.LSTM для работы с
последовательными данными.
Пример создания простой сети для классификации поз:
const net = new brain.NeuralNetwork({
hiddenLayers: [20, 20],
activation: 'relu'
});
// Формирование обучающих примеров
const trainingData = poses.map(pose => ({
input: pose.keypoints.flatMap(k => [k.x / video.width, k.y / video.height]),
output: { [pose.label]: 1 }
}));
net.train(trainingData, {
iterations: 2000,
log: true,
logPeriod: 100
});
Особенности тренировки:
iterations задаёт количество проходов обучения.log и logPeriod позволяют отслеживать
прогресс обучения.Ml5.js предоставляет готовые модели для извлечения признаков, которые
затем можно подать в Brain.js. Например, использование
ml5.featureExtractor для генерации признаков
изображения:
const featureExtractor = ml5.featureExtractor('MobileNet', modelLoaded);
const classifier = featureExtractor.classification();
function modelLoaded() {
console.log('Feature extractor готов');
}
// Подготовка данных для Brain.js
classifier.addImage(video, 'class1', () => {});
classifier.addImage(video, 'class2', () => {});
После извлечения признаков из ml5.js можно преобразовать их в числовой массив и использовать в качестве входа для сети Brain.js, создавая кастомные классификаторы или комбинированные модели.
Можно комбинировать модели следующим образом:
Такой подход позволяет разгружать ml5.js от обучения сложных моделей и использовать Brain.js для тонкой настройки, пользовательской логики или прогнозирования в реальном времени.
Для задач анализа временных последовательностей (например, жесты
руки, аудиосигналы) лучше использовать recurrent.LSTM в
Brain.js:
const lstm = new brain.recurrent.LSTM();
const trainingData = sequences.map(seq => ({
input: seq.input.map(v => v / maxValue),
output: seq.label
}));
lstm.train(trainingData, {
iterations: 1000,
log: true
});
Преимущества LSTM:
Ml5.js может быть источником таких последовательностей (например, координаты движений или аудио-фреймы), что делает интеграцию удобной и мощной.
При работе с ml5.js и Brain.js одновременно важно учитывать:
Комбинация Brain.js и ml5.js идеально подходит для:
Подобная архитектура позволяет использовать сильные стороны каждой библиотеки: ml5.js для извлечения сложных признаков и Brain.js для гибкой настройки и дополнительного обучения с пользовательскими данными.