--- id: wiki-2026-0508-cv-synthesis title: Computer Vision Synthesis (Synthetic Data) category: 10_Wiki/Topics status: verified canonical_id: self aliases: [synthetic data, sim2real, domain adaptation, NVIDIA Omniverse, Unity Perception, model collapse] duplicate_of: none source_trust_level: A confidence_score: 0.9 verification_status: applied tags: [computer-vision, synthetic-data, sim2real, domain-adaptation, omniverse, unity, autonomous-driving, robotics] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: Python framework: NVIDIA Omniverse / Unity Perception / Blender / Diffusers --- # CV Synthesis (Synthetic Data) ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ > **"๋งค ๊ฐ€์ƒ ์˜ image ์˜ ํ•™์Šต data"**. ๋งค perfect ground truth + ๋งค rare event + ๋งค privacy. ๋งค sim-to-real domain gap ์˜ ํ•ต์‹ฌ challenge. ๋งค modern: ๋งค generative AI (Stable Diffusion) + ๋งค photoreal sim (Omniverse, Gaussian Splatting). ๋งค model collapse ์˜ risk. ## ๐Ÿ“– ํ•ต์‹ฌ ### ๋งค motivation 1. **Perfect ground truth**: ๋งค pixel mask, ๋งค 3D position, ๋งค depth, ๋งค segmentation ์˜ free. 2. **Rare event**: ๋งค accident, ๋งค edge case ์˜ endless. 3. **Privacy**: ๋งค face / plate ์˜ X. 4. **Cost**: ๋งค real annotation $$$ ์˜ X. 5. **Coverage**: ๋งค lighting / weather / pose ์˜ systematic. ### ๋งค source - **Game engine** (Unity, Unreal): ๋งค photoreal. - **Synthetic 3D pipeline** (Blender, Houdini). - **NVIDIA Omniverse**: ๋งค industrial digital twin. - **Diffusion model**: ๋งค prompt-based. - **GAN**: ๋งค specific domain (face, etc). - **Procedural generation**: ๋งค controllable. ### ๋งค ์‘์šฉ 1. **Autonomous driving**: ๋งค CARLA, ๋งค Waymo Carcraft. 2. **Robotics**: ๋งค Isaac Sim, ๋งค sim2real. 3. **Surveillance**: ๋งค person re-id. 4. **Medical**: ๋งค augment rare condition. 5. **Aerial**: ๋งค drone training. 6. **Manufacturing**: ๋งค defect detection. 7. **Retail**: ๋งค product variation. ### Sim-to-Real domain gap - **Visual gap**: ๋งค lighting / texture / shadow. - **Distribution gap**: ๋งค prevalence. - **Causal gap**: ๋งค dynamics / physics. ### ๋งค mitigation - **Domain randomization**: ๋งค random texture / lighting. - **Domain adaptation**: ๋งค GAN / CycleGAN. - **Photorealism push**: ๋งค ray tracing, Gaussian splatting. - **Hybrid training**: ๋งค real + synthetic. - **Self-supervised**: ๋งค unlabeled real. ### ๋งค Model Collapse (modern concern) - ๋งค synthetic data ๋งŒ ์˜ train โ†’ ๋งค real distribution drift. - ๋งค generation ์˜ amplify own bias. - ๋งค mitigation: ๋งค fresh real ์˜ mix. - โ†’ Shumailov et al. 2024. ### ๋งค platform - **NVIDIA Omniverse / Replicator**: ๋งค enterprise. - **Unity Perception SDK**: ๋งค game-engine. - **Unreal MetaHuman**: ๋งค photoreal humans. - **Mitsuba 3**: ๋งค differentiable rendering. - **Kubric** (Google): ๋งค video synthesis. - **Habitat / iGibson**: ๋งค robot indoor. - **CARLA / AirSim**: ๋งค driving / drone. ### ๋งค generative augmentation - **Stable Diffusion**: ๋งค prompt-driven. - **ControlNet**: ๋งค layout-controlled. - **DreamBooth + LoRA**: ๋งค specific class. - **Inpainting**: ๋งค selective augment. ## ๐Ÿ’ป ํŒจํ„ด ### Unity Perception (label config) ```csharp // ๋งค Unity Perception SDK using UnityEngine.Perception.GroundTruth; [CreateAssetMenu] public class ProductLabelConfig : IdLabelConfig {} // ๋งค Perception camera ์˜ attach // ๋งค RGB + bounding box + segmentation + depth ์˜ auto. ``` ### Domain randomization (Python) ```python import random import bpy # ๋งค Blender API def randomize_scene(): # ๋งค light light = bpy.data.objects['Light'] light.data.energy = random.uniform(500, 2000) light.location = (random.uniform(-5, 5), random.uniform(-5, 5), random.uniform(3, 10)) # ๋งค camera angle cam = bpy.data.objects['Camera'] cam.rotation_euler = (random.uniform(0, 0.5), random.uniform(0, 0.5), random.uniform(0, 6.28)) # ๋งค background HDR world = bpy.data.worlds['World'] hdri = random.choice(['hdri/sunset.exr', 'hdri/cloudy.exr', 'hdri/night.exr']) world.node_tree.nodes['Environment Texture'].image = bpy.data.images.load(hdri) # ๋งค material color for obj in bpy.context.scene.objects: if obj.data and obj.data.materials: obj.data.materials[0].diffuse_color = ( random.random(), random.random(), random.random(), 1 ) # ๋งค 1000 frame ์˜ render for i in range(1000): randomize_scene() bpy.context.scene.render.filepath = f'./synthetic/img_{i:04d}.png' bpy.ops.render.render(write_still=True) ``` ### NVIDIA Omniverse Replicator (Python) ```python import omni.replicator.core as rep with rep.new_layer(): camera = rep.create.camera(position=(0, 0, 1000)) light = rep.create.light(rotation=(-90, 0, 0), light_type='distant') # ๋งค distractor objects distractors = rep.create.cube(count=20) # ๋งค target object target = rep.create.sphere() with rep.trigger.on_frame(num_frames=1000): with target: rep.modify.pose( position=rep.distribution.uniform((-200, -200, 0), (200, 200, 200)), rotation=rep.distribution.uniform((0, 0, 0), (360, 360, 360)), ) with distractors: rep.randomizer.scatter_2d() with light: rep.modify.attribute('intensity', rep.distribution.uniform(500, 5000)) # ๋งค writer (RGB + bbox + mask) writer = rep.WriterRegistry.get('BasicWriter') writer.initialize(output_dir='./synthetic/', rgb=True, bbox=True, mask=True) writer.attach([rep.create.render_product(camera, (1024, 1024))]) ``` ### CARLA driving sim ```python import carla client = carla.Client('localhost', 2000) world = client.get_world() # ๋งค spawn vehicle + camera blueprint_library = world.get_blueprint_library() vehicle_bp = blueprint_library.filter('vehicle.tesla.model3')[0] spawn_point = world.get_map().get_spawn_points()[0] vehicle = world.spawn_actor(vehicle_bp, spawn_point) camera_bp = blueprint_library.find('sensor.camera.rgb') camera_bp.set_attribute('image_size_x', '800') camera = world.spawn_actor(camera_bp, carla.Transform(carla.Location(x=2.5, z=1.0)), attach_to=vehicle) # ๋งค listen camera.listen(lambda image: image.save_to_disk(f'./out/{image.frame:08d}.png')) # ๋งค weather randomization weather = carla.WeatherParameters(cloudiness=80, precipitation=30, sun_altitude_angle=45) world.set_weather(weather) ``` ### Diffusion-based augmentation ```python from diffusers import StableDiffusionInpaintPipeline import torch pipe = StableDiffusionInpaintPipeline.from_pretrained( 'runwayml/stable-diffusion-inpainting', torch_dtype=torch.float16, ).to('cuda') # ๋งค existing image + ๋งค mask โ†’ ๋งค inpaint with new variation def augment_with_inpaint(image, mask, prompts): augmented = [] for p in prompts: result = pipe( prompt=p, image=image, mask_image=mask, num_inference_steps=30, guidance_scale=7.5, ).images[0] augmented.append(result) return augmented # ๋งค e.g., medical scan ์˜ condition variation prompts = ['a benign tumor', 'a malignant tumor stage 1', '...'] ``` ### Sim2Real domain adaptation (CycleGAN) ```python # ๋งค sim โ†’ real domain from torch_cyclegan import CycleGAN cyclegan = CycleGAN( generator_S2R=Generator(), generator_R2S=Generator(), discriminator_R=Discriminator(), discriminator_S=Discriminator(), ) # ๋งค sim image ์˜ real-style transfer real_styled = cyclegan.S2R(sim_image) # ๋งค train downstream model on (sim_label, real_styled). ``` ### Mix ratio (model collapse mitigation) ```python def adaptive_mix(epoch, real_data, synthetic_data): """๋งค early: synthetic ์˜ lots, late: real ์˜ emphasize.""" real_ratio = min(0.7, 0.2 + epoch * 0.05) n_real = int(BATCH_SIZE * real_ratio) n_synth = BATCH_SIZE - n_real return DataLoader( ConcatDataset([ Subset(real_data, random.sample(range(len(real_data)), n_real)), Subset(synthetic_data, random.sample(range(len(synthetic_data)), n_synth)), ]), batch_size=BATCH_SIZE, ) ``` ## ๐Ÿค” ๊ฒฐ์ • ๊ธฐ์ค€ | ์ƒํ™ฉ | Tool | |---|---| | Driving | CARLA / Waymo Carcraft | | Robot indoor | Habitat / iGibson | | Industrial | NVIDIA Omniverse | | Bbox / segmentation | Unity Perception | | Photoreal humans | MetaHuman + Unreal | | Augmentation | Stable Diffusion + ControlNet | | Domain gap | CycleGAN / domain randomization | | Tabletop | Blender + scripted | **๊ธฐ๋ณธ๊ฐ’**: ๋งค photoreal + ๋งค domain randomization + ๋งค mix with real. ## ๐Ÿ”— Graph - ๋ถ€๋ชจ: [[Computer Vision|Computer-Vision]] ยท [[Synthetic-Data]] ยท [[Simulation]] - ๋ณ€ํ˜•: [[Sim2Real]] ยท [[Domain-Adaptation]] ยท [[CycleGAN]] - ์‘์šฉ: [[Autonomous Vehicles]] ยท [[Robotics]] ยท [[Unity-Perception]] - Adjacent: [[Diffusion-Models]] ยท [[ControlNet]] ยท [[Model-Collapse]] ยท [[Algorithmic-Biology]] ## ๐Ÿค– LLM ํ™œ์šฉ **์–ธ์ œ**: ๋งค data scarcity. ๋งค rare event. ๋งค privacy-sensitive. ๋งค cost reduction. ๋งค systematic coverage. **์–ธ์ œ X**: ๋งค real data abundant + cheap. ๋งค high domain-gap not addressed. ## โŒ ์•ˆํ‹ฐํŒจํ„ด - **Synthetic ๋งŒ ์˜ train**: ๋งค model collapse + sim2real gap. - **Single environment**: ๋งค over-fit. - **No domain randomization**: ๋งค unrealistic ํ•™์Šต. - **Generative ์˜ cycle (synth โ†’ train โ†’ gen โ†’ train)**: ๋งค collapse. - **No real validation**: ๋งค fake metric. ## ๐Ÿงช ๊ฒ€์ฆ / ์ค‘๋ณต - Verified (Tobin domain randomization 2017, Tremblay 2018, NVIDIA Omniverse). - ์‹ ๋ขฐ๋„ A. - Related: [[Autonomous Vehicles]] ยท [[Diffusion-Models]] ยท [[Robotics]] ยท [[Algorithmic-Biology]] ยท [[Model-Collapse]]. ## ๐Ÿ•“ Changelog | ๋‚ ์งœ | ๋ณ€๊ฒฝ | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup โ€” sim2real + domain randomization + ๋งค Unity / Omniverse / CARLA / SD / CycleGAN code |