Аугментация данных для изображений

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

Основные принципы аугментации

  1. Геометрические преобразования

    • Поворот (rotation): изменение ориентации изображения на случайный угол.
    • Масштабирование (scaling): увеличение или уменьшение размеров объекта внутри изображения.
    • Смещение (translation): смещение изображения по осям X и Y для создания вариаций положения объекта.
    • Отражение (flip/mirroring): зеркальное отображение изображения по горизонтали или вертикали.
  2. Изменения цвета и освещенности

    • Регулировка яркости и контрастности: изменение интенсивности пикселей для имитации различных условий освещения.
    • Изменение оттенка и насыщенности: позволяет модели быть устойчивой к различным цветовым условиям.
  3. Добавление шума и фильтров

    • Шум Гаусса или соль-перец: помогает модели обучаться на более реалистичных и «шумных» данных.
    • Размытие и резкость (blur/sharpen): добавление фильтров для симуляции разной фокусировки камеры.

Использование ml5.js для аугментации изображений

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

  1. Загрузка изображения
let img;
function preload() {
  img = loadImage('image.jpg');
}
  1. Геометрическая трансформация через Canvas
function rotateImage(angle) {
  createCanvas(img.width, img.height);
  translate(width / 2, height / 2);
  rotate(angle);
  imageMode(CENTER);
  image(img, 0, 0);
}
  1. Изменение цвета и яркости
function adjustBrightness(factor) {
  img.loadPixels();
  for (let i = 0; i < img.pixels.length; i += 4) {
    img.pixels[i] = img.pixels[i] * factor;     // Red
    img.pixels[i + 1] = img.pixels[i + 1] * factor; // Green
    img.pixels[i + 2] = img.pixels[i + 2] * factor; // Blue
  }
  img.updatePixels();
  image(img, 0, 0);
}
  1. Случайная аугментация Для повышения разнообразия данных целесообразно комбинировать несколько методов: поворот, отражение, изменение цвета. Такой подход позволяет значительно увеличить размер обучающего набора без необходимости сбора новых изображений.

Влияние аугментации на обучение моделей

  • Уменьшение переобучения: разнообразие данных заставляет нейросеть лучше обобщать, снижая зависимость от конкретных примеров.
  • Стабильность прогнозов: модели становятся менее чувствительными к случайным изменениям угла, масштаба или освещенности.
  • Увеличение точности при малых датасетах: при ограниченном наборе данных аугментация фактически умножает количество примеров, что улучшает обучение.

Советы по организации аугментации в ml5.js

  • Использовать Canvas для всех геометрических трансформаций.
  • Применять случайные значения параметров (угол, масштаб, яркость) при каждой итерации.
  • Хранить исходные изображения отдельно, чтобы иметь возможность создавать новые варианты на лету.
  • Комбинировать аугментацию с нормализацией изображений перед подачей в модель ml5.js (например, ml5.imageClassifier).

Пример интеграции с моделью классификации

let classifier;
function setup() {
  createCanvas(400, 400);
  classifier = ml5.imageClassifier('MobileNet', modelReady);
}

function modelReady() {
  console.log('Модель загружена');
  augmentAndClassify(img);
}

function augmentAndClassify(image) {
  let angle = random(-PI / 6, PI / 6);
  rotateImage(angle);
  adjustBrightness(random(0.8, 1.2));
  
  classifier.classify(image, (err, results) => {
    if (err) console.error(err);
    console.log(results);
  });
}

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

Аугментация данных является важным инструментом при работе с изображениями и ml5.js предоставляет достаточные возможности для её реализации в связке с функционалом HTML5 Canvas и встроенными методами обработки пикселей.