Syntidata
Главная / Блог / Синтетические данные / Доменная рандомизация на практике

Доменная рандомизация на практике

Синтетические данные

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

Доменная рандомизация на практике

Идея в двух абзацах

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

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

Что можно рандомизировать

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

Объект

  • положение и ориентация в пространстве;
  • масштаб в пределах допусков изготовления;
  • вариации цвета, шероховатости, текстуры;
  • состояние: новое, изношенное, загрязнённое, с мелкими дефектами;
  • конфигурации: для сборных изделий разные комплектации.

Окружение

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

Освещение

  • тип и число источников света;
  • интенсивность и цветовая температура;
  • поворот и яркость HDRI-карты;
  • резкость теней, наличие бликов.

Камера

  • высота, угол и расстояние съёмки;
  • фокусное расстояние и глубина резкости;
  • шум, размытие, экспозиция;
  • разрешение и степень сжатия.

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

Диапазоны: широко, но осмысленно

Ошибка новичков в двух противоположных крайностях. Одни берут слишком узкие диапазоны («чуть-чуть поменяем яркость») и получают модель, хрупкую к любому сдвигу. Другие включают рандомизацию без ограничений и получают кадры, где деталь покрыта случайным шумом, висит в воздухе вверх ногами на фоне калейдоскопа.

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

Хороший вопрос для проверки любого параметра: «Могу ли я представить реальный кадр с таким значением?» Если нет, и вы не используете его намеренно как регуляризацию, диапазон слишком широк.

Структурированная и неструктурированная рандомизация

Есть два подхода, которые часто сочетают.

Неструктурированная рандомизация меняет параметры независимо и случайно: случайный фон, случайные текстуры, случайные дистракторы. Она проста, дёшева и хорошо работает как базовый слой. Её слабость в том, что в кадре получаются нереалистичные комбинации, например кресло на потолке.

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

Лучшие результаты, как правило, даёт смесь: структурированные сцены для основной массы кадров плюс некоторая доля неструктурированных «шумовых» для устойчивости.

Рандомизация текстур: тонкое место

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

Что мы обычно делаем: фиксируем значимые для класса признаки, а все остальные свойства (оттенок в допустимых границах, износ, грязь, микрорельеф) варьируем. Здесь помогает аккуратная работа с материалами, см. PBR-материалы и почему от них зависит реалистичность.

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

Это не дань моде, а инструмент, и его эффект нужно измерять. Простая процедура:

  1. Создайте базовый набор с минимальной вариацией.
  2. Создайте набор с расширенной рандомизацией того же объёма.
  3. Обучите две одинаковые модели с одинаковыми настройками.
  4. Сравните метрики на реальной валидационной выборке, которая не участвовала в обучении.

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

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

Типичные ошибки

  • Рандомизация без привязки к реальным условиям. Широкие диапазоны ради самих диапазонов тратят вычисления и размывают сигнал.
  • Забытые дистракторы. Модель, не видевшая похожих предметов, на реальной сцене будет ложно срабатывать.
  • Статичная камера. Если все кадры сняты с одной высоты и под одним углом, реальные ракурсы окажутся «вне распределения».
  • Одинаковая плотность сцен. Реальные кадры бывают пустыми, редкими и забитыми, а обучающие почти всегда «средними».
  • Несбалансированные классы по видимости. Если объекты в основном целиком видны, модель плохо работает с частично закрытыми.
  • Игнорирование разметки: рандомизация не должна ломать правила аннотации, например делать объект полностью невидимым, но оставлять для него рамку.

Сколько кадров нужно для рандомизации

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

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

Пример настройки для складской задачи

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

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

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

Рандомизация и разрыв доменов

Рандомизация не заменяет реализм, а дополняет его. Даже самый разнообразный набор с плохими материалами даст модель, которая промахивается на реальных поверхностях. Хорошая практика: сначала добиться разумной физической достоверности (материалы, свет, оптика), потом поверх накладывать рандомизацию. Общий взгляд на проблему есть в статье Domain gap: как сократить разрыв между рендером и реальностью.

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


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