Аугментация изображений — это процесс искусственного увеличения объёма тренировочного датасета путём применения разнообразных трансформаций к исходным изображениям. В TensorFlow.js аугментация может применяться как на этапе подготовки данных, так и динамически во время обучения модели, что позволяет повышать её устойчивость к вариациям входных данных и улучшать обобщающую способность.
Для работы с изображениями в TensorFlow.js основными структурами
данных являются tf.Tensor и
tf.data.Dataset. Изображения чаще всего
представлены в виде тензоров размерности
[высота, ширина, каналы], где каналы соответствуют
компонентам цвета (RGB).
Загрузка изображений выполняется с помощью
tf.browser.fromPixels(), которая
конвертирует HTML-элемент <img> или
<canvas> в тензор. Например:
const imgElement = document.getElementById('image');
const imgTensor = tf.browser.fromPixels(imgElement).toFloat().div(tf.scalar(255));
Нормализация значений в диапазон [0, 1] является
стандартной практикой для работы с нейронными сетями.
Геометрическая аугментация включает изменения положения, ориентации и размера изображения. Основные операции:
Поворот (Rotation) Используется функция
tf.image.rotateWithOffset, позволяющая
вращать изображение на произвольный угол (в радианах).
const radians = Math.PI / 6; // 30 градусов
const rotated = tf.image.rotateWithOffset(imgTensor, radians, 0, 0);Масштабирование и изменение размера (Resize,
Zoom) Функции
tf.image.resizeBilinear и
tf.image.resizeNearestNeighbor позволяют
изменять размеры изображений с сохранением пропорций или с обрезкой.
const resized = tf.image.resizeBilinear(imgTensor, [128, 128]);Отражение и перевороты (Flip, Mirror)
tf.image.flipLeftRight —
горизонтальное отражениеtf.image.flipUpDown — вертикальное
отражениеconst flipped = tf.image.flipLeftRight(imgTensor);Сдвиг (Translation) Для сдвига изображения
применяются операции tf.image.translate
через аффинные матрицы. Это позволяет сдвигать изображение по X и Y
координатам без потери данных.
Аугментация не ограничивается геометрией; она включает изменения цветовых характеристик, что повышает устойчивость моделей к различным условиям освещения:
Изменение яркости (Brightness)
const brighter = tf.image.adjustBrightness(imgTensor, 0.2);Контраст (Contrast)
const contrastImg = tf.image.adjustContrast(imgTensor, 1.5);Насыщенность (Saturation)
const saturated = tf.image.adjustSaturation(imgTensor, 2.0);Гамма-коррекция (Gamma) Для нелинейной коррекции яркости:
const gammaAdjusted = tf.pow(imgTensor, tf.scalar(0.8));Для реальной тренировки модели аугментации комбинируются. В TensorFlow.js это можно реализовать как цепочку функций:
function augmentImage(imgTensor) {
return tf.tidy(() => {
let result = imgTensor;
result = tf.image.flipLeftRight(result);
result = tf.image.adjustBrightness(result, Math.random() * 0.3 - 0.15);
result = tf.image.adjustContrast(result, 0.5 + Math.random());
const angle = (Math.random() - 0.5) * Math.PI / 4;
result = tf.image.rotateWithOffset(result, angle, 0, 0);
return result;
});
}
Использование tf.tidy() освобождает
память после выполнения каждой трансформации, что критично при работе с
большим количеством изображений.
Для повышения эффективности аугментация выполняется на
лету во время обучения через
tf.data.Dataset.map():
const dataset = tf.data.generator(imageGenerator)
.map(({xs, ys}) => {
return {xs: augmentImage(xs), ys};
})
.batch(32);
Это позволяет создавать неограниченное количество вариаций изображений без необходимости хранить их на диске.
TensorFlow.js предоставляет мощный набор функций для аугментации изображений, охватывающих геометрию, цветовые характеристики и динамическую обработку на этапе обучения. Правильное применение этих инструментов значительно улучшает обобщающую способность нейронных сетей, снижает переобучение и повышает точность предсказаний на реальных данных.