Как увеличить размер датасета изображений для обучения модели?

«Как увеличить размер датасета изображений для обучения модели?» — вопрос из категории Компьютерное зрение, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

1. Аугментация данных (Data Augmentation) Это мой основной подход. Я использую случайные, но реалистичные преобразования исходных изображений, которые сохраняют смысл метки. В PyTorch это выглядит так:

from torchvision import transforms

train_transform = transforms.Compose([
    transforms.RandomHorizontalFlip(p=0.5),
    transforms.RandomRotation(degrees=15),
    transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2),
    transforms.RandomResizedCrop(size=224, scale=(0.8, 1.0)),
    transforms.ToTensor(),
])

2. Генеративные модели для синтетических данных Для задач с острым дефицитом данных я экспериментировал с генеративными моделями. Например, использовал предобученные Diffusion модели (например, Stable Diffusion) с контролем через текстовые промпты для генерации изображений нужного класса. Это требует тонкой настройки и валидации качества сгенерированных изображений.

3. Создание синтетических данных через рендеринг В проекте по детекции промышленных объектов мы использовали Blender для рендеринга 3D-моделей деталей на различных фонах, при разном освещении и ракурсах. Это дало нам полностью контролируемый и размеченный датасет.

Ключевые принципы:

  • Сохранение семантики: Аугментация не должна менять класс объекта (например, вертикальный flip для цифры '6' превратит её в '9').
  • Баланс классов: Увеличиваю датасет с учетом дисбаланса, чтобы не усугублять его.
  • Контроль качества: Всегда проверяю визуально часть сгенерированных данных и отслеживаю, не падает ли качество модели на валидации после их добавления.