Аугментация данных является ключевым инструментом для повышения устойчивости и точности нейронных сетей, особенно когда исходные обучающие данные ограничены. В библиотеке ConvNetJS для JavaScript аугментация выполняется преимущественно на уровне ввода изображений и вектора признаков, что позволяет моделям видеть разнообразные варианты входных данных без необходимости увеличивать исходный датасет вручную.
1. Геометрические преобразования
Сдвиг (Translation): Изменение положения объекта в пределах изображения.
Поворот (Rotation): Вращение изображения на угол θ.
Масштабирование (Scaling): Увеличение или уменьшение размеров изображения.
resize для объектов типа
Vol.2. Отражение и зеркалирование (Flipping)
Array.reverse или прямую манипуляцию Vol
массивом.3. Шум и искажения
addNoise(σ)
объекта Vol, где σ — стандартное отклонение шума.4. Изменение яркости, контрастности и насыщенности
Для работы с цветными изображениями важно учитывать вариативность условий освещения.
Реализуется прямым масштабированием значений пикселей:
pixel[i] = pixel[i] * contrast + brightnessOffset;Такой подход позволяет сети устойчиво классифицировать объекты при разных условиях освещения.
Создание Vol для изображения
var imgVol = new convnetjs.Vol(width, height, depth);
imgVol.setFromImage(imageElement);
Геометрическая аугментация
// Поворот на случайный угол в пределах [-15°, 15°]
var angle = (Math.random() * 30 - 15) * Math.PI / 180;
var rotatedVol = imgVol.rotate(angle);
// Сдвиг на случайные смещения dx и dy
var dx = Math.floor(Math.random() * 5 - 2);
var dy = Math.floor(Math.random() * 5 - 2);
var shiftedVol = imgVol.translate(dx, dy);
Добавление шума
imgVol.addNoise(0.05); // σ = 0.05
Комбинация аугментаций
Vol.ConvNetJS поддерживает генерацию аугментированных данных в процессе обучения. Для этого создаются функции-обработчики данных, которые динамически создают новые экземпляры Vol при каждой итерации обучения:
function augmentData(vol) {
var newVol = vol.clone();
if(Math.random() > 0.5) newVol = newVol.flipX();
newVol.addNoise(0.03);
return newVol;
}
for(var i=0;i
Преимущество такого подхода — модель видит практически неограниченное количество уникальных вариаций исходного датасета, что повышает обобщающую способность сети.
Объект Vol — это многомерный массив с формой
[width, height, depth], используемый ConvNetJS для хранения
входных данных, весов и активаций. Для аугментации важно:
clone(), чтобы сохранить исходные
данные нетронутыми.[0,1].