4.6 Domain Randomization

4.6.1 목적과 한계

도메인 랜덤화는 시뮬레이션의 렌더링·물리 파라미터를 분포에서 표본화해 정책이 특정 시뮬레이션 외형에 과적합하지 않도록 한다. 이 접근은 시뮬레이터가 정확히 현실과 같아야 한다는 요구를 완화하지만, 실제 환경이 학습 분포 밖이면 여전히 실패한다.

랜덤화 범주:

  • 조명: 위치, 방향, 색온도, intensity
  • 카메라: 작은 pose jitter, focal length, exposure/noise
  • 외형: 배경, texture, object color/roughness
  • 기하: 물체 초기 pose, 크기 허용오차
  • 물리: mass, friction, restitution, actuator delay

안전과 의미를 깨는 랜덤화는 피한다. 예를 들어 색상 지시 작업에서 target 색을 바꾸면서 언어 prompt를 그대로 두면 label이 틀린다. 카메라를 벽 안으로 이동시키거나 물체 질량을 비현실적으로 뽑는 것도 유효한 다양성이 아니다.

4.6.2 분포를 버전 관리한다

“randomize lighting” 대신 분포를 수치로 기록한다.

randomization_version: 3
seed: 4102
camera_translation_jitter_m: [-0.005, 0.005]
camera_rotation_jitter_deg: [-2.0, 2.0]
light_intensity: [800, 3000]
object_hue_shift_deg: [-15, 15]
static_friction: [0.6, 1.1]

분포는 train/validation에서 겹치되 validation seed는 분리한다. 실제 측정값이 들어오면 범위를 업데이트하고 버전을 올린다.

4.6.3 Replicator 실행 구조

code/replicator_randomization.py는 Replicator의 trigger 안에서 camera, light, object pose를 표본화하고 writer를 연결하는 예시다. Isaac Sim 릴리스에 따라 import와 API가 달라질 수 있으므로 설치된 버전의 공식 Replicator 문서와 함께 사용한다.

도메인 랜덤화 설계

그림 4-4. 측정한 현실 범위에서 분포를 정의하고 seed와 파라미터를 메타데이터에 남겨야 합성 데이터를 재현할 수 있다.

이 장의 예제 코드·설정 파일 (12)

이 장의 자가 점검·가상실습