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

Идея процедурной генерации
Процедурная генерация означает, что сцену создаёт не художник по одной, а программа по набору правил и параметров. Вы описываете, из чего состоит мир: какие объекты в нём бывают, как они могут располагаться, какое у них распределение размеров, цветов и состояний, как стоит камера и какой свет. Затем программа берёт случайные значения из этих распределений и строит сцену за сценой.
Подход пришёл из игровой индустрии, где так создают ландшафты и подземелья, и из кино, где процедурно собирают толпы и города. Для задач компьютерного зрения он оказался идеальным: нам нужна не одна великолепная картинка, а выборка из огромного пространства возможных картинок. Правила превращают этот перебор в конвейер.
Главное преимущество — масштаб без пропорционального роста труда. Основные усилия уходят на подготовку ассетов и правил, после чего стоимость очередной тысячи кадров стремится к стоимости машинного времени. Именно поэтому технология раскрывается сильнее всего на датасетах больших размеров, о чём мы писали в статье Экономика синтетических данных: где реальная экономия.
Из чего состоит процедурный конвейер
Типичная архитектура включает несколько слоёв, и каждый решает свою задачу.
- Библиотека ассетов. 3D-модели целевых объектов, объектов-помех, фоновых элементов, а также материалы и HDRI-окружения.
- Генератор раскладки. Определяет, сколько объектов будет в сцене, где они стоят и как повёрнуты.
- Физический слой. Роняет объекты, даёт им улечься и устояться, исключает проникновения друг в друга.
- Слой внешнего вида. Выбирает материалы, цвета, износ, загрязнения.
- Свет и камера. Выбирает окружение, источники и положение виртуальной камеры.
- Рендер и выгрузка разметки. Строит изображение и вместе с ним маски, рамки, карты глубины, ключевые точки.
- Контроль качества. Автоматические проверки и выборочный просмотр.
Каждый слой параметризован, и параметры вынесены в конфигурационные файлы. Это позволяет воспроизводить любую сцену по её зерну (seed) и безопасно менять отдельные части, не ломая остальное.
Как размещать объекты
Размещение — самая содержательная часть, потому что именно оно определяет, насколько сцены похожи на реальные.
Равномерный случайный разброс
Простейший вариант: объекты кидаются в случайные позиции в заданной области. Подходит для хаотичных сцен вроде кучи деталей в контейнере, но выглядит неправдоподобно, если в реальности есть структура.
Размещение по правилам
Для структурированных сред нужны правила: товары лежат на полках рядами и фейсингами, детали на конвейере идут с интервалом и в определённой ориентации, автомобили стоят вдоль дороги. Правила задают сетки, линии, допуски и вероятность отклонений. Реальность никогда не идеальна, поэтому в правила закладывают шум: сдвиг, наклон, пропуски, перепутанный порядок.
Размещение с физикой
Для сваленных, лежащих и падающих объектов используют физический движок. Объекты сбрасываются на поверхность и ложатся так, как легли бы в реальности: на устойчивую грань, друг на друга, частично перекрывая. Такие сцены дают естественные перекрытия и контакты, которые трудно получить ручной расстановкой.
Размещение на основе статистики
Если у заказчика есть реальные снимки, по ним оценивают распределения: сколько объектов в кадре в среднем, насколько плотно они лежат, какие ракурсы преобладают. Процедурная сцена затем подгоняется под эти числа. Так датасет получает сходство с реальностью на уровне статистики, а не только внешнего вида.
Рандомизация: что менять и в каких пределах
Смысл процедурной генерации в разнообразии, но разнообразие должно быть осмысленным. Мы делим параметры на группы.
| Группа | Что варьируем |
|---|---|
| Объекты | Модель, масштаб в допустимых пределах, цвет, износ, состояние |
| Расположение | Число, плотность, ориентация, перекрытия |
| Окружение | Фоновые поверхности, объекты-помехи, мусор, надписи |
| Освещение | Окружение, яркость, температура, жёсткие тени |
| Камера | Высота, угол, фокусное расстояние, шум, размытие, искажения |
Общее правило: чем меньше мы знаем о боевых условиях, тем шире должны быть диапазоны. Если же условия известны точно, диапазоны сужают вокруг реальных значений и добавляют небольшую долю экстремальных. Подробный разбор логики такого подхода — в статье Доменная рандомизация на практике.
Распространённая ловушка: независимая рандомизация
Если параметры меняются независимо, получаются невозможные сочетания: ледяной склад с тропическим солнцем, огромный объект, вдвое меньший соседнего такого же. Такие кадры не только бесполезны, но и вредят. Нужны зависимости и ограничения: размеры согласованы между собой, тип освещения соответствует типу помещения, положение камеры оставляет объекты в кадре.
Объекты-помехи и негативные примеры
Хороший датасет содержит не только целевые объекты. Детектор должен научиться отличать нужное от похожего. Поэтому в сцену добавляют:
- похожие, но нецелевые предметы (другая модификация детали, соседний товар, имитация дефекта, который дефектом не является);
- случайный мусор и посторонние предметы;
- сцены вообще без целевых объектов, для обучения распознавать пустоту;
- частично видимые объекты на краю кадра.
Доля негативных кадров обычно составляет от пяти до двадцати процентов, а точное значение подбирается экспериментально. Слишком большая доля делает модель осторожной, слишком малая — приводит к ложным срабатываниям. Эта тема связана с редкими случаями и дисбалансом, о чём мы писали в статье Редкие объекты: как обучить модель на том, чего почти не бывает.
Автоматическая разметка из сцены
Огромное преимущество процедурной генерации в том, что разметка получается как побочный продукт. Программа знает про каждый объект всё: его класс, положение, форму, видимость. Поэтому вместе с изображением выгружаются:
- маски — точные контуры каждого экземпляра, с учётом перекрытий;
- ограничивающие рамки — вычисленные из масок или из геометрии;
- карты глубины — расстояние до каждой точки;
- ключевые точки — проекции опорных точек модели;
- метаданные — степень видимости, ориентация, идентификатор экземпляра.
Ошибок разметки здесь нет по построению, но есть особенности. Нужно решить, как трактовать сильно перекрытые объекты: оставлять ли в разметке экземпляр, видимый на несколько процентов. Разумное правило — отбрасывать объекты с видимой долей ниже порога, согласованного с условиями боевой задачи. Подробнее о форматах и правилах — на странице разметки.
Контроль качества сгенерированных данных
Процедурный конвейер способен массово производить как хорошие кадры, так и брак. Пропустить дефект сцены проще, чем кажется: объекты внутри стены, камера в пустоте, чёрные кадры, пересвет. Мы встраиваем в конвейер многоуровневую проверку.
- Автоматические фильтры. Отбраковка кадров по яркости, контрасту, доле пустых пикселей, числу видимых объектов, наличию пересечений геометрии.
- Статистика по партии. Гистограммы числа объектов, размеров, положений, яркости. Они сразу показывают перекос, например неожиданно мало объектов у краёв кадра.
- Выборочный просмотр. Человек просматривает сетку случайных кадров. Десять минут просмотра выявляют проблемы, которые не поймала автоматика.
- Проверка на реальных данных. Модель, обученная на пилотной партии, оценивается на реальной выборке, а ошибки показывают, чего не хватает в сценах.
Как строить итоговую проверку целиком, разобрано в статье Как проверить качество синтетического датасета.
Итерации: как сходится процесс
Процедурный проект практически никогда не завершается с первой попытки, и это нормально. Рабочий цикл выглядит так:
- Собрать минимальные ассеты и простые правила, сгенерировать небольшую пилотную партию.
- Обучить модель и оценить её на реальной контрольной выборке.
- Разобрать ошибки: что модель не находит, что путает, при каких условиях.
- Скорректировать правила: добавить недостающие ракурсы, фоны, помехи, расширить диапазоны.
- Сгенерировать расширенную партию, повторить.
Две-четыре итерации обычно достаточно, чтобы выйти на уровень, пригодный для эксплуатации. Решающее преимущество подхода в том, что каждая итерация дёшева: правки вносятся в конфигурацию, а не в тысячи изображений вручную.
Практический совет: начинайте с узкого и простого мира и усложняйте его по мере появления ошибок. Попытка с самого начала смоделировать всё разнообразие реальности приводит к громоздкому конвейеру, в котором трудно найти причину ошибок.
Что нужно от заказчика
Чтобы запустить процедурную генерацию, нам обычно достаточно трёх вещей:
- описание целевых объектов и классов: чертежи, CAD-модели, фотографии образцов или хотя бы эскиз для объектов, которых ещё нет в природе;
- несколько реальных кадров из боевых условий (даже десяти-двадцати достаточно) для понимания фона, света и ракурсов;
- параметры камеры и требования к выходу: разрешение, формат разметки, нужные слои.
Остальное мы берём на себя: от подготовки ассетов до выгрузки в нужном формате. Общую схему сотрудничества можно посмотреть на странице как мы работаем.
Если у вас есть задача, для которой не хватает реальных данных или их разметка слишком дорога, напишите на [email protected]. Мы подготовим тестовый датасет, чтобы вы могли оценить подход на практике.
Нужен датасет под вашу задачу?
Подготовим тестовую партию изображений с разметкой, чтобы вы могли проверить подход на своей модели. Напишите на [email protected] или оставьте заявку.
Читайте также
3D-моделированиеОптимизация 3D-моделей для массового рендеринга
Когда нужно получить не десять красивых картинок, а 50 000 размеченных кадров, каждая лишняя миллисекунда рендера превращается в дни ожидания и счета за вычисления. Рассказываем, как мы готовим модели к массовому производству датасетов.
3D-моделированиеPBR-материалы и почему от них зависит реалистичность
Физически корректные материалы (PBR) определяют, как поверхность реагирует на свет. Разбираем, из чего они состоят, как их настраивать и почему для синтетических датасетов это вопрос качества, а не красоты.
3D-моделированиеФотограмметрия: как получить 3D-модель реального предмета
Фотограмметрия превращает набор обычных фотографий в трёхмерную модель с текстурой. Рассказываем, как снимать, обрабатывать результат и когда этот способ лучше моделирования вручную.