При работе с библиотекой ml5.js качество входных данных напрямую влияет на точность и эффективность моделей машинного обучения. Основные операции — масштабирование, кадрирование и нормализация — позволяют привести данные к виду, оптимальному для обработки и обучения.
Масштабирование применяется для приведения изображений к фиксированным размерам, необходимым для конкретной модели. В ml5.js большинство моделей, особенно те, что основаны на TensorFlow.js, требуют одинаковых размеров входного тензора. Например, модели классификации изображений (MobileNet, KNNClassifier) работают с изображениями размером 224×224 пикселя.
Пример:
let img = createImg('cat.jpg', () => {
img.size(224, 224); // масштабирование изображения
});
Ключевые моменты при масштабировании:
Кадрирование позволяет выделить интересующую область изображения, удаляя лишние части, которые могут создавать шум для модели. В ml5.js кадрирование чаще всего выполняется через Canvas API:
let canvas = createGraphics(224, 224);
canvas.image(img, 0, 0, 224, 224, 50, 50, 200, 200);
// первые 224,224 — размер на канвасе,
// последние 200,200 — область исходного изображения для кадрирования
Принципы кадрирования:
Нормализация приводит значения пикселей к диапазону, который лучше воспринимается нейронной сетью. В ml5.js стандартной практикой является приведение значений в диапазон [0, 1] или [-1, 1], что улучшает сходимость моделей.
Пример нормализации изображения перед подачей в модель:
function normalizeImage(img) {
img.loadPixels();
for (let i = 0; i < img.pixels.length; i += 4) {
img.pixels[i] = img.pixels[i] / 255; // R
img.pixels[i + 1] = img.pixels[i + 1] / 255; // G
img.pixels[i + 2] = img.pixels[i + 2] / 255; // B
// альфа-канал оставляем без изменений
}
img.updatePixels();
}
Важные моменты нормализации:
Для текстовых или табличных данных, используемых в ml5.js (например,
с помощью ml5.neuralNetwork), нормализация и
масштабирование не менее важны. Все входные признаки следует привести к
единому масштабу, чтобы градиенты при обучении не смещались из-за
большой разницы величин.
Пример Min-Max нормализации для числового признака:
function minMaxNormalize(value, min, max) {
return (value - min) / (max - min);
}
Для стандартной нормализации с нулевым средним и единичной дисперсией (z-score):
function zScoreNormalize(value, mean, std) {
return (value - mean) / std;
}
Применение этих методов обеспечивает:
При работе с веб-камерами или микрофонами важно выполнять нормализацию и масштабирование на лету. В ml5.js для этого используют функции обратного вызова, которые получают кадр, нормализуют и подают в модель.
Пример с классификацией видео:
const video = createCapture(VIDEO);
video.size(224, 224);
function gotFrame() {
normalizeVideo(video); // кастомная функция для нормализации
classifier.classify(video, gotResult);
}
function gotResult(error, results) {
if (error) {
console.error(error);
return;
}
console.log(results);
gotFrame(); // продолжаем поток
}
gotFrame();
Такой подход обеспечивает корректную работу модели в реальном времени и минимизирует шум.
Масштабирование, кадрирование и нормализация — базовые, но критически важные этапы подготовки данных в ml5.js. Правильное применение этих техник напрямую влияет на точность моделей и стабильность их работы как с изображениями, так и с табличными или потоковыми данными.