Syntidata
Главная / Блог / 3D-моделирование / Процедурная генерация сцен для датасетов

Процедурная генерация сцен для датасетов

3D-моделирование

Вручную собрать сто сцен реально, десять тысяч — нет. Процедурная генерация задаёт правила, по которым компьютер сам строит разнообразные сцены. Рассказываем, как это устроено и где подводные камни.

Процедурная генерация сцен для датасетов

Идея процедурной генерации

Процедурная генерация означает, что сцену создаёт не художник по одной, а программа по набору правил и параметров. Вы описываете, из чего состоит мир: какие объекты в нём бывают, как они могут располагаться, какое у них распределение размеров, цветов и состояний, как стоит камера и какой свет. Затем программа берёт случайные значения из этих распределений и строит сцену за сценой.

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

Главное преимущество — масштаб без пропорционального роста труда. Основные усилия уходят на подготовку ассетов и правил, после чего стоимость очередной тысячи кадров стремится к стоимости машинного времени. Именно поэтому технология раскрывается сильнее всего на датасетах больших размеров, о чём мы писали в статье Экономика синтетических данных: где реальная экономия.

Из чего состоит процедурный конвейер

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

  1. Библиотека ассетов. 3D-модели целевых объектов, объектов-помех, фоновых элементов, а также материалы и HDRI-окружения.
  2. Генератор раскладки. Определяет, сколько объектов будет в сцене, где они стоят и как повёрнуты.
  3. Физический слой. Роняет объекты, даёт им улечься и устояться, исключает проникновения друг в друга.
  4. Слой внешнего вида. Выбирает материалы, цвета, износ, загрязнения.
  5. Свет и камера. Выбирает окружение, источники и положение виртуальной камеры.
  6. Рендер и выгрузка разметки. Строит изображение и вместе с ним маски, рамки, карты глубины, ключевые точки.
  7. Контроль качества. Автоматические проверки и выборочный просмотр.

Каждый слой параметризован, и параметры вынесены в конфигурационные файлы. Это позволяет воспроизводить любую сцену по её зерну (seed) и безопасно менять отдельные части, не ломая остальное.

Как размещать объекты

Размещение — самая содержательная часть, потому что именно оно определяет, насколько сцены похожи на реальные.

Равномерный случайный разброс

Простейший вариант: объекты кидаются в случайные позиции в заданной области. Подходит для хаотичных сцен вроде кучи деталей в контейнере, но выглядит неправдоподобно, если в реальности есть структура.

Размещение по правилам

Для структурированных сред нужны правила: товары лежат на полках рядами и фейсингами, детали на конвейере идут с интервалом и в определённой ориентации, автомобили стоят вдоль дороги. Правила задают сетки, линии, допуски и вероятность отклонений. Реальность никогда не идеальна, поэтому в правила закладывают шум: сдвиг, наклон, пропуски, перепутанный порядок.

Размещение с физикой

Для сваленных, лежащих и падающих объектов используют физический движок. Объекты сбрасываются на поверхность и ложатся так, как легли бы в реальности: на устойчивую грань, друг на друга, частично перекрывая. Такие сцены дают естественные перекрытия и контакты, которые трудно получить ручной расстановкой.

Размещение на основе статистики

Если у заказчика есть реальные снимки, по ним оценивают распределения: сколько объектов в кадре в среднем, насколько плотно они лежат, какие ракурсы преобладают. Процедурная сцена затем подгоняется под эти числа. Так датасет получает сходство с реальностью на уровне статистики, а не только внешнего вида.

Рандомизация: что менять и в каких пределах

Смысл процедурной генерации в разнообразии, но разнообразие должно быть осмысленным. Мы делим параметры на группы.

ГруппаЧто варьируем
ОбъектыМодель, масштаб в допустимых пределах, цвет, износ, состояние
РасположениеЧисло, плотность, ориентация, перекрытия
ОкружениеФоновые поверхности, объекты-помехи, мусор, надписи
ОсвещениеОкружение, яркость, температура, жёсткие тени
КамераВысота, угол, фокусное расстояние, шум, размытие, искажения

Общее правило: чем меньше мы знаем о боевых условиях, тем шире должны быть диапазоны. Если же условия известны точно, диапазоны сужают вокруг реальных значений и добавляют небольшую долю экстремальных. Подробный разбор логики такого подхода — в статье Доменная рандомизация на практике.

Распространённая ловушка: независимая рандомизация

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

Объекты-помехи и негативные примеры

Хороший датасет содержит не только целевые объекты. Детектор должен научиться отличать нужное от похожего. Поэтому в сцену добавляют:

  • похожие, но нецелевые предметы (другая модификация детали, соседний товар, имитация дефекта, который дефектом не является);
  • случайный мусор и посторонние предметы;
  • сцены вообще без целевых объектов, для обучения распознавать пустоту;
  • частично видимые объекты на краю кадра.

Доля негативных кадров обычно составляет от пяти до двадцати процентов, а точное значение подбирается экспериментально. Слишком большая доля делает модель осторожной, слишком малая — приводит к ложным срабатываниям. Эта тема связана с редкими случаями и дисбалансом, о чём мы писали в статье Редкие объекты: как обучить модель на том, чего почти не бывает.

Автоматическая разметка из сцены

Огромное преимущество процедурной генерации в том, что разметка получается как побочный продукт. Программа знает про каждый объект всё: его класс, положение, форму, видимость. Поэтому вместе с изображением выгружаются:

  • маски — точные контуры каждого экземпляра, с учётом перекрытий;
  • ограничивающие рамки — вычисленные из масок или из геометрии;
  • карты глубины — расстояние до каждой точки;
  • ключевые точки — проекции опорных точек модели;
  • метаданные — степень видимости, ориентация, идентификатор экземпляра.

Ошибок разметки здесь нет по построению, но есть особенности. Нужно решить, как трактовать сильно перекрытые объекты: оставлять ли в разметке экземпляр, видимый на несколько процентов. Разумное правило — отбрасывать объекты с видимой долей ниже порога, согласованного с условиями боевой задачи. Подробнее о форматах и правилах — на странице разметки.

Контроль качества сгенерированных данных

Процедурный конвейер способен массово производить как хорошие кадры, так и брак. Пропустить дефект сцены проще, чем кажется: объекты внутри стены, камера в пустоте, чёрные кадры, пересвет. Мы встраиваем в конвейер многоуровневую проверку.

  1. Автоматические фильтры. Отбраковка кадров по яркости, контрасту, доле пустых пикселей, числу видимых объектов, наличию пересечений геометрии.
  2. Статистика по партии. Гистограммы числа объектов, размеров, положений, яркости. Они сразу показывают перекос, например неожиданно мало объектов у краёв кадра.
  3. Выборочный просмотр. Человек просматривает сетку случайных кадров. Десять минут просмотра выявляют проблемы, которые не поймала автоматика.
  4. Проверка на реальных данных. Модель, обученная на пилотной партии, оценивается на реальной выборке, а ошибки показывают, чего не хватает в сценах.

Как строить итоговую проверку целиком, разобрано в статье Как проверить качество синтетического датасета.

Итерации: как сходится процесс

Процедурный проект практически никогда не завершается с первой попытки, и это нормально. Рабочий цикл выглядит так:

  1. Собрать минимальные ассеты и простые правила, сгенерировать небольшую пилотную партию.
  2. Обучить модель и оценить её на реальной контрольной выборке.
  3. Разобрать ошибки: что модель не находит, что путает, при каких условиях.
  4. Скорректировать правила: добавить недостающие ракурсы, фоны, помехи, расширить диапазоны.
  5. Сгенерировать расширенную партию, повторить.

Две-четыре итерации обычно достаточно, чтобы выйти на уровень, пригодный для эксплуатации. Решающее преимущество подхода в том, что каждая итерация дёшева: правки вносятся в конфигурацию, а не в тысячи изображений вручную.

Практический совет: начинайте с узкого и простого мира и усложняйте его по мере появления ошибок. Попытка с самого начала смоделировать всё разнообразие реальности приводит к громоздкому конвейеру, в котором трудно найти причину ошибок.

Что нужно от заказчика

Чтобы запустить процедурную генерацию, нам обычно достаточно трёх вещей:

  • описание целевых объектов и классов: чертежи, CAD-модели, фотографии образцов или хотя бы эскиз для объектов, которых ещё нет в природе;
  • несколько реальных кадров из боевых условий (даже десяти-двадцати достаточно) для понимания фона, света и ракурсов;
  • параметры камеры и требования к выходу: разрешение, формат разметки, нужные слои.

Остальное мы берём на себя: от подготовки ассетов до выгрузки в нужном формате. Общую схему сотрудничества можно посмотреть на странице как мы работаем.

Если у вас есть задача, для которой не хватает реальных данных или их разметка слишком дорога, напишите на [email protected]. Мы подготовим тестовый датасет, чтобы вы могли оценить подход на практике.


Читайте также