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]
동일 분포 평가와 분포 밖 조건 평가는 목적을 구분해 분포와 분할 단위를 정한다. seed를 분리해도 같은 원본 자산/장면·에피소드의 변형이 양쪽에 섞이면 새 자산/장면 평가의 누수가 될 수 있다. 실제 측정값으로 범위를 갱신하면 버전을 올리고 보정/최종 평가 자료를 구분한다.
4.6.3 Replicator 실행 구조
code/replicator_randomization.py는 고정 camera에 render product를 만들고 trigger에서 target pose/색과 light intensity를 표본화하는 구조 예시다. 위 분포 명세의 카메라 jitter·마찰 등 모든 범주를 구현한 코드는 아니다. writer는 RGB와 distance-to-camera만 연결하며 semantic/instance·검출 라벨을 생성했다고 해석하지 않는다. Isaac Sim 릴리스에 따라 import와 API가 달라질 수 있으므로 설치된 버전의 공식 Replicator 문서와 함께 사용한다.
M25.05 합성 생성·라벨 품질에서 같은 capture의 카메라/시각·클래스 사전·깊이 mode·누락/실패·자산 단위 분할을 점검한다. 그래프 구성이나 생성 요청만으로 writer 완료/학습 가능한 라벨·실제 일반화가 확인된 것은 아니다.
그림 4-4. 측정한 현실 범위에서 분포를 정의하고 seed와 파라미터를 메타데이터에 남겨야 합성 데이터를 재현할 수 있다.