Аугментация данных: больше пользы из тех же картинок
Данных всегда не хватает. Аугментация бесплатно превращает одну картинку во множество — и делает сеть устойчивее.
Аугментация данных (data augmentation) — создание новых обучающих примеров из имеющихся путём преобразований, не меняющих класс объекта.
Зачем это нужно
Нейросети жадны до данных, а размечать картинки дорого. Аугментация решает проблему хитро: из одной фотографии кошки делают десятки вариантов — отражённую, чуть повёрнутую, обрезанную, темнее, светлее. Кошка осталась кошкой, но для сети это новые примеры. Эффект двойной:
- Борьба с переобучением: сеть не «зубрит» конкретные снимки, а учит обобщённый образ.
- Инвариантность: сеть привыкает узнавать объект под разными углами, освещением, в разном положении — как в реальном мире.
Типичные преобразования
| Преобразование | Чему учит |
| горизонтальное отражение | объект узнаётся зеркально |
| поворот на небольшой угол | устойчивость к наклону камеры |
| случайный кроп/масштаб | объект может быть ближе/дальше, не в центре |
| сдвиг яркости/контраста | разное освещение |
| добавление шума | устойчивость к зернистости |
Отражение и яркость руками
Покажем два простейших преобразования на маленькой «картинке»: горизонтальный флип (зеркало) и сдвиг яркости.
img = [
[10, 20, 30],
[40, 50, 60],
[70, 80, 90],
]
def hflip(m):
return [list(reversed(row)) for row in m]
def brighten(m, delta):
return [[min(255, p + delta) for p in row] for row in m]
print("Исходник:")
for r in img: print(r)
print("Отражение по горизонтали:")
for r in hflip(img): print(r)
print("Ярче на 30:")
for r in brighten(img, 30): print(r)
Вывод:
Исходник: [10, 20, 30] [40, 50, 60] [70, 80, 90] Отражение по горизонтали: [30, 20, 10] [60, 50, 40] [90, 80, 70] Ярче на 30: [40, 50, 60] [70, 80, 90] [100, 110, 120]
Из одной матрицы мы получили две новые — и обе по-прежнему «та же картинка» по смыслу. Так из небольшого датасета получают в разы больше обучающих примеров.
Важная оговорка
Преобразование не должно менять смысл! Горизонтальный флип безопасен для кошки, но опасен для цифр и букв: отражённая «6» превратится в нечто, похожее на «9», а зеркальная «b» — на «d». Аугментацию подбирают под задачу: для рукописных цифр не отражают, для медицины не искажают пропорции патологий.
Итог
- Аугментация создаёт новые примеры преобразованиями, не меняющими класс.
- Борется с переобучением и учит инвариантности к ракурсу, свету, положению.
- Типичные приёмы: отражение, поворот, кроп, сдвиг яркости, шум.
- Нельзя менять смысл: флип ломает цифры и буквы — выбирать под задачу.