Codes

Intro

For vision tasks in ML, we naturally need images and corresponding labels to train a model. Normally, we consider two options. searching and finding datasets we can leverage or creating datasets by taking a photos, labeling manually. The latter is rarely feasible, especially for a student or a small team, given the immense amount of time required for labeling.

Figure 1. Isaac Sim GUI

Here’s a third option, which is to utilize Isaac Sim(simulation program from NVIDIA) to generate synthetic datasets. Initially, I was kind of skeptical about whether a vision model trained on simulated images would actually perform well in real environments. However, This post changed my mind. I recommend you to read it.

Setup

In short, my goal was to develop a weed detection model and demonstrate to korean agricultural experts that synthetic data can effectively address data scarcity in the field.

Figure 2. Smart Farm Optimization Pipeline

This image made by NotebookLM roughly shows the process.

0. Asset Preparation

We curated high-quality assets from online sources, treating them as direct representations of the crops and weeds in our target agricultural site.

Figure 3. Bog Marshcress, potato plants, and greenhouse.

Weed, crop and Greenhouse. With these assets in hand, the direction was clear. I had to build a virtual potato farm being invaded by Bog Marshcress(Weed). I imagined things like this :

Figure 4. Dreamed farm depicted by Gemini

1. Virtual Environment Creation

1.1. Ridges, Furrows, Potatoes

In order to make ridges and furrows, I used sine graph since they look similar.

Figure 5. Ridges, Furrows and Potatoes

1.2. Weeds

Using Isaac Sim’s Replicator feature, I automated the placement of Bog Marshcress(weed) across the field. Replicator is one of the main feature, which allows me to shuffle the environment. Instead of manually placing every weed, I can script them to pop up randomly on the slopes of the ridges, down in the furrows, or right next to the potato plants. I also randomized their density, size, and rotation.

Figure 6. weeds placed In Greenhouse, In outside.

2. Synthetic Data Generation

2.1. Domain Randomization

In addition to randomizing the weed placement, it is best practice to randomize as many variables as possible to ensure model robustness, while I kept the scope manageable. the sun’s position, light color (temperature), and the structural difference between open fields and greenhouses.

Figure 7. Domain Randomization example 1 and 2.

2.2. Drone-Perspective Data

I decided to collect images from a drone’s perspective rather than moving the camera randomly. Maintaining a consistent top-down viewpoint makes it significantly easier for the vision model to learn and recognize patterns within the field.

3. Automated Annotation

Since this part is automated, there was surprisingly little for me to do. The real advantage of using a simulator is that labels for tons of drone-captured images are generated without bordering me. Isaac sim recognizes the unique ID of every object, whether it’s potato plant or a weed, to automatically produce labels.

Figure 8. Bounding box and segmentation

4. Vision Model Training

I simply used YOLOv11s model for this detecting task. Isaac Sim supports custom writers, so even though YOLO requires a specific format for inputs, we can handle this by writing a writer. Of course, writing a writer is time-cunsuming work, but thanks to this repository, I didn’t have to make one from scratch.

ClassPrecisionRecallmAP50mAP50-95
All0.940.8330.9190.724
Potato0.9310.8010.9020.705
Weed0.9480.8650.9350.742
Figure 9. Inference result(16 images)

5.Real World Validation

To test how the model might perform in a real field, I conducted a validation using the virtual farm scenarios I built in Isaac Sim. I kept the core layout—the lighting, soil textures, and the placement of crops and weeds—but used Generative AI to transform these scenes into photorealistic images that mimic actual drone footage. This allowed me to analyze the model’s inference performance on images that look like the real world.

Figure 10. Inference result(16 images)

The images above (Figures 10) show the model’s inference results. When compared with manual visual inspection, the model successfully distinguishes between potato plants and Bog Marshcress.

However, there are too many bounding boxes for a single object. For example, in the middle of Figure 10, there are at most five potato plants (based on the flowers), but there are 10 boxes shown. I think this issue is caused by the fact that I placed the potatoes much more densely in the virtual environment than they would be in reality.