├── CLA.md
├── LICENSE.md
├── README.md
├── cloud
├── README.md
├── cloud_sdg.ipynb
└── training
│ ├── .ipynb_checkpoints
│ └── cloud_train-checkpoint.ipynb
│ ├── cloud_train.ipynb
│ └── tao
│ └── specs
│ ├── inference
│ ├── .ipynb_checkpoints
│ │ └── new_inference_specs-checkpoint.txt
│ └── new_inference_specs.txt
│ ├── tfrecords
│ ├── .ipynb_checkpoints
│ │ ├── distractors_additional-checkpoint.txt
│ │ ├── distractors_warehouse-checkpoint.txt
│ │ └── no_distractors-checkpoint.txt
│ ├── distractors_additional.txt
│ ├── distractors_warehouse.txt
│ └── no_distractors.txt
│ └── training
│ ├── .ipynb_checkpoints
│ └── resnet18_distractors-checkpoint.txt
│ └── resnet18_distractors.txt
├── images
├── loco_palletjacks
│ ├── 1564562568.298206.jpg
│ ├── 1564562628.517229.jpg
│ ├── 1564562671.2769265.jpg
│ ├── 1564562843.0618184.jpg
│ ├── 1564563939.2498121.jpg
│ ├── 1564563941.2643266.jpg
│ ├── 1564564477.8315344.jpg
│ ├── 1564564608.7540288.jpg
│ ├── 1564564867702,99.jpg
│ ├── 1574674966.043515.jpg
│ ├── 1574675023.097059.jpg
│ ├── 1574675145.7230172.jpg
│ ├── 1574675156.020139.jpg
│ ├── 1574675156.7667925.jpg
│ ├── 1574675164.5134397.jpg
│ ├── 1574675587024,65.jpg
│ ├── 1574675590005,88.jpg
│ ├── 1574675593.8838139.jpg
│ ├── 1574675645.8659928.jpg
│ ├── 1574675657.9895825.jpg
│ ├── 1574675729.036457.jpg
│ ├── 1574676301.361285.jpg
│ ├── 1574676447.562495.jpg
│ ├── 1574679194.2192037.jpg
│ ├── 1576592006.4469478.jpg
│ ├── 1576592741574,07.jpg
│ ├── 1576592752171,47.jpg
│ ├── 1576593611.6224425.jpg
│ ├── 1576594779.3298974.jpg
│ ├── 1576596021.9482577.jpg
│ ├── 1579163389986,09.jpg
│ ├── 1579163400.4232957.jpg
│ ├── 1579163403.3200178.jpg
│ ├── 2044458,0127.jpg
│ ├── 426023,9672.jpg
│ ├── 509815376,8831.jpg
│ ├── 510196244,1362.jpg
│ ├── 510664610,1022.jpg
│ ├── 516447400,977.jpg
│ ├── 516449535,2259.jpg
│ ├── 593768,3659.jpg
│ └── 598835,2028.jpg
├── real_world_results
│ ├── 1564562568.298206.jpg
│ ├── 1564562628.517229.jpg
│ ├── 1564562671.2769265.jpg
│ ├── 1564562843.0618184.jpg
│ ├── 1564563939.2498121.jpg
│ ├── 1564563941.2643266.jpg
│ ├── 1564564477.8315344.jpg
│ ├── 1564564608.7540288.jpg
│ ├── 1564564867702,99.jpg
│ ├── 1574674966.043515.jpg
│ ├── 1574675023.097059.jpg
│ ├── 1574675145.7230172.jpg
│ ├── 1574675156.020139.jpg
│ ├── 1574675156.7667925.jpg
│ ├── 1574675164.5134397.jpg
│ ├── 1574675587024,65.jpg
│ ├── 1574675590005,88.jpg
│ ├── 1574675593.8838139.jpg
│ ├── 1574675645.8659928.jpg
│ ├── 1574675657.9895825.jpg
│ ├── 1574675729.036457.jpg
│ ├── 1574676301.361285.jpg
│ ├── 1574676447.562495.jpg
│ ├── 1574679194.2192037.jpg
│ ├── 1576592006.4469478.jpg
│ ├── 1576592741574,07.jpg
│ ├── 1576592752171,47.jpg
│ ├── 1576593611.6224425.jpg
│ ├── 1576594779.3298974.jpg
│ ├── 1576596021.9482577.jpg
│ ├── 1579163389986,09.jpg
│ ├── 1579163400.4232957.jpg
│ ├── 1579163403.3200178.jpg
│ ├── 2044458,0127.jpg
│ ├── 426023,9672.jpg
│ ├── 509815376,8831.jpg
│ ├── 510196244,1362.jpg
│ ├── 510664610,1022.jpg
│ ├── 516447400,977.jpg
│ ├── 516449535,2259.jpg
│ ├── 593768,3659.jpg
│ └── 598835,2028.jpg
├── sample_synthetic
│ ├── 138.png
│ ├── 1545.png
│ ├── 203.png
│ ├── 21.png
│ ├── 215.png
│ ├── 220.png
│ ├── 378.png
│ ├── 411.png
│ ├── 444.png
│ ├── 512.png
│ ├── 56.png
│ ├── 653.png
│ ├── 896.png
│ ├── 897.png
│ └── 92.png
└── tensorboard
│ └── tensorboard_resized_palletjack.png
├── local
├── README.md
├── generate_data.sh
├── local_train.ipynb
└── training
│ └── tao
│ └── specs
│ ├── inference
│ ├── .ipynb_checkpoints
│ │ └── new_inference_specs-checkpoint.txt
│ └── new_inference_specs.txt
│ ├── tfrecords
│ ├── .ipynb_checkpoints
│ │ ├── distractors_additional-checkpoint.txt
│ │ ├── distractors_warehouse-checkpoint.txt
│ │ └── no_distractors-checkpoint.txt
│ ├── distractors_additional.txt
│ ├── distractors_warehouse.txt
│ └── no_distractors.txt
│ └── training
│ ├── .ipynb_checkpoints
│ └── resnet18_distractors-checkpoint.txt
│ └── resnet18_distractors.txt
└── palletjack_sdg
├── palletjack_datagen.sh
└── standalone_palletjack_sdg.py
/CLA.md:
--------------------------------------------------------------------------------
1 | ## Individual Contributor License Agreement (CLA)
2 |
3 | **Thank you for submitting your contributions to this project.**
4 |
5 | By signing this CLA, you agree that the following terms apply to all of your past, present and future contributions
6 | to the project.
7 |
8 | ### License.
9 |
10 | You hereby represent that all present, past and future contributions are governed by the
11 | [MIT License](https://opensource.org/licenses/MIT)
12 | copyright statement.
13 |
14 | This entails that to the extent possible under law, you transfer all copyright and related or neighboring rights
15 | of the code or documents you contribute to the project itself or its maintainers.
16 | Furthermore you also represent that you have the authority to perform the above waiver
17 | with respect to the entirety of you contributions.
18 |
19 | ### Moral Rights.
20 |
21 | To the fullest extent permitted under applicable law, you hereby waive, and agree not to
22 | assert, all of your “moral rights” in or relating to your contributions for the benefit of the project.
23 |
24 | ### Third Party Content.
25 |
26 | If your Contribution includes or is based on any source code, object code, bug fixes, configuration changes, tools,
27 | specifications, documentation, data, materials, feedback, information or other works of authorship that were not
28 | authored by you (“Third Party Content”) or if you are aware of any third party intellectual property or proprietary
29 | rights associated with your Contribution (“Third Party Rights”),
30 | then you agree to include with the submission of your Contribution full details respecting such Third Party
31 | Content and Third Party Rights, including, without limitation, identification of which aspects of your
32 | Contribution contain Third Party Content or are associated with Third Party Rights, the owner/author of the
33 | Third Party Content and Third Party Rights, where you obtained the Third Party Content, and any applicable
34 | third party license terms or restrictions respecting the Third Party Content and Third Party Rights. For greater
35 | certainty, the foregoing obligations respecting the identification of Third Party Content and Third Party Rights
36 | do not apply to any portion of a Project that is incorporated into your Contribution to that same Project.
37 |
38 | ### Representations.
39 |
40 | You represent that, other than the Third Party Content and Third Party Rights identified by
41 | you in accordance with this Agreement, you are the sole author of your Contributions and are legally entitled
42 | to grant the foregoing licenses and waivers in respect of your Contributions. If your Contributions were
43 | created in the course of your employment with your past or present employer(s), you represent that such
44 | employer(s) has authorized you to make your Contributions on behalf of such employer(s) or such employer
45 | (s) has waived all of their right, title or interest in or to your Contributions.
46 |
47 | ### Disclaimer.
48 |
49 | To the fullest extent permitted under applicable law, your Contributions are provided on an "as is"
50 | basis, without any warranties or conditions, express or implied, including, without limitation, any implied
51 | warranties or conditions of non-infringement, merchantability or fitness for a particular purpose. You are not
52 | required to provide support for your Contributions, except to the extent you desire to provide support.
53 |
54 | ### No Obligation.
55 |
56 | You acknowledge that the maintainers of this project are under no obligation to use or incorporate your contributions
57 | into the project. The decision to use or incorporate your contributions into the project will be made at the
58 | sole discretion of the maintainers or their authorized delegates.
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2 | SPDX-License-Identifier: MIT
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining a
5 | copy of this software and associated documentation files (the "Software"),
6 | to deal in the Software without restriction, including without limitation
7 | the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 | and/or sell copies of the Software, and to permit persons to whom the
9 | Software is furnished to do so, subject to the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be included in
12 | all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 | THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 | DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Synthetic Data Generation and Training with Sim Ready Assets
2 | This project provides a workflow for Training Computer Vision models with Synthetic Data. We will use Isaac Sim with Omniverse Replicator to generate data for our use case and objects of interest. To ensure seamless compatibility with model training, the data generated is in the KITTI format.
3 |
4 | These steps can be followed on a Cloud/remote GPU instance or locally
5 |
6 | ## How to use this repository
7 | - [Guide](local/README.md) for running the workflow locally
8 | - [Guide](cloud/README.md) for running on a cloud/remote instance
9 |
10 | ## Workflow Components:
11 | * Generating Data: Use Isaac Sim to generate data
12 | * Training: We will use TAO toolkit, however users can train a model in a framework of their choice with data generated
13 |
14 | ### SDG
15 | - Using the `palletjack` assets from the Warehouse Sim Ready Asset collection
16 |
17 | - Carry out Domain Randomization in the scene with Replicator:
18 | - Various attributes of the scene like lighting, textures, object pose and materials can be modified
19 | - Important to generate a good quality dataset to ensure model detects objects in the real world
20 |
21 | - Data output KITTI format
22 | - We will use the KITTI Writer for generating annotations
23 | - Possible to implement a custom writer (can be useful when data is expected in a certain format for your model)
24 |
25 | - Sample generated images:
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | ### Training
40 | - TAO: Outline of steps
41 | - Generating Tfrecords
42 |
43 | - Model training and evaluation
44 | - Model backbone selction
45 | - Hyperparameters specified via `spec` file (provided with repo)
46 | - Running inference with trained model
47 |
48 | - Sample real world detections on LOCO dataset images:
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | ### Deployment
67 | - Perform Optimizations: Pruning and QAT with TAO to reduce model size and improve performance
68 | - Deploy on NVIDIA Jetson powered Robot with Isaac ROS or Deepstream
69 |
70 |
71 | ## References:
72 | - Real world images from the [LOCO dataset](https://github.com/tum-fml/loco) are used for visualizing model performance
73 |
--------------------------------------------------------------------------------
/cloud/README.md:
--------------------------------------------------------------------------------
1 | # Requirements
2 | - Access to a cloud/remote GPU instance (workflow tested on a `g4dn` AWS EC2 instance with T4 GPU)
3 | - Docker setup instructions are provided in the notebooks
4 | - Entire workflow can be run in `headless` mode (SDG script and training)
5 |
6 |
7 | ## Synthetic Data Generation
8 | - Use the Isaac Sim docker container for running the Data Generation [script](../palletjack_sdg/palletjack_datagen.sh)
9 | - We will generate data for warehouse `palletjack` objects in KITTI format
10 | - Follow the steps in the `cloud_sdg` notebook
11 | - This generated data can be used to train your own model (framework and architecture of your choice), in this workflow we demonstrate using TAO for training
12 |
13 |
14 | ## Training with TAO Toolkit
15 | - The `training/cloud_train` notebook provides a walkthrough of the steps:
16 | - Setting up TAO docker container
17 | - Downloading pre-trained model, we will use the `DetectNet_v2` model with a `resnet_18` backbone
18 | - Running TAO training with `spec` files provided
19 | - Visualizing model performance on real world data
20 | - Visualize model metric with Tensorboard
21 |
22 |
23 |
24 | ## Next steps
25 |
26 | ### Generating Synthetic Data for your use case
27 | - Make changes in the Domain Randomization under the Synthetic Data Generation [script](../palletjack_sdg/standalone_palletjack_sdg.py)
28 | - Add additional objects of interest in the scene (similar to how palletjacks are added, you can add forklifts, ladders etc.) to generate dataUse different models for training with TAO (for object detection, you can use YOLO, SSD, EfficientDet)
29 | - Replicator provides Semantic Segmentation, Instance Segmentation, Depth and various other ground truth annotations along with RGB. You can also write your own ground truth annotator (eg: Pose Estimation: Refer to [sample](https://docs.omniverse.nvidia.com/isaacsim/latest/tutorial_replicator_offline_pose_estimation.html) These can be used for training a model of your own framework and choice)
30 | - Exploring the option of using Synthetic + Real data for training a network. Can be particularly useful for generating more data around particular corner cases
31 |
32 | ### Deploying Trained Models
33 | - The trained model can be pruned and optimized for inference with TAO
34 | - This can then be deployed on a robot with NVIDIA Jetson
--------------------------------------------------------------------------------
/cloud/cloud_sdg.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Part 1: Synthetic Data Generation and Training Workflow with Warehouse Sim Ready Assets\n",
8 | "\n",
9 | "This notebook is the first part of the SDG and Training Workflow. We will be focusing on generating Synthetic Data for our use case\n",
10 | "\n",
11 | "A high level overview of the steps:\n",
12 | "* Pulling Isaac Sim Docker Container \n",
13 | "* Using Replicator API for Data Generation with Domain Randomization\n"
14 | ]
15 | },
16 | {
17 | "cell_type": "markdown",
18 | "metadata": {},
19 | "source": [
20 | "### Table of Contents\n",
21 | "\n",
22 | "This notebook shows provides an overview of generating synthetic data using Warehouse Sim Ready assets with Isaac Sim and Omniverse Replicator. We will generate data for the `palletjack` class of objects. \n",
23 | "\n",
24 | "1. [Set up Isaac Sim via Docker Container](#head-1)\n",
25 | "2. [Generate Data for Detecting Palletjacks](#head-2)\n",
26 | "3. [Deeper dive into SDG script](#head-3)\n"
27 | ]
28 | },
29 | {
30 | "cell_type": "markdown",
31 | "metadata": {},
32 | "source": [
33 | "## 1. Set up Isaac Sim: Docker Container Installation \n",
34 | "\n",
35 | "### This step can be skipped if the Isaac Sim Docker container has already been set up on your Cloud/Remote Instance\n",
36 | "\n",
37 | "* Follow the [instructions](https://docs.omniverse.nvidia.com/isaacsim/2022.2.1/install_container.html) for Isaac Sim Container Installation\n",
38 | "* Ensure that `docker run` command on Step 7 works as expected and you are able to enter the container. \n",
39 | "\n",
40 | "We will use `./python.sh` in the container to run our SDG script. Please make sure you exit the container before running the next cells "
41 | ]
42 | },
43 | {
44 | "cell_type": "markdown",
45 | "metadata": {
46 | "tags": []
47 | },
48 | "source": [
49 | "## 2. Generate Data for Detecting Palletjacks \n",
50 | "\n",
51 | "* We can find the Palletjack USDs in the Warehouse Sim Ready asset collection (`http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/DigitalTwin/Assets/Warehouse/Equipment/Pallet_Trucks`)\n",
52 | "* First, we will mount our current local directory while running the docker container. This will ensure that we can run our scripts inside the Isaac Sim container. Data generated in the container will also be saved in this mounted directory."
53 | ]
54 | },
55 | {
56 | "cell_type": "code",
57 | "execution_count": 1,
58 | "metadata": {
59 | "tags": []
60 | },
61 | "outputs": [
62 | {
63 | "name": "stdout",
64 | "output_type": "stream",
65 | "text": [
66 | "/home/karma/Downloads/getting_started_v4.0.1/notebooks/tao_launcher_starter_kit/detectnet_v2/sdg_and_training/sdg-and-training/palletjack_sdg\n"
67 | ]
68 | }
69 | ],
70 | "source": [
71 | "import os\n",
72 | "\n",
73 | "# This is the directory which will be mounted into the Isaac Sim container. Make sure is updated correctly\n",
74 | "# os.environ[\"MOUNT_DIR\"]=os.path.join(, \"palletjack_sdg\")\n",
75 | "os.environ[\"LOCAL_PROJECT_DIR\"]=os.path.dirname(os.getcwd())\n",
76 | "os.environ[\"MOUNT_DIR\"] = os.path.join(os.getenv(\"LOCAL_PROJECT_DIR\"), \"palletjack_sdg\")\n",
77 | "print(os.getenv(\"MOUNT_DIR\"))"
78 | ]
79 | },
80 | {
81 | "cell_type": "code",
82 | "execution_count": null,
83 | "metadata": {
84 | "scrolled": true,
85 | "tags": []
86 | },
87 | "outputs": [],
88 | "source": [
89 | "# Make sure the MOUNT_DIR location is correct, it shold have the scripts needed for SDG there\n",
90 | "\n",
91 | "!docker run --name isaac-sim --entrypoint bash -it --gpus all -e \"ACCEPT_EULA=Y\" --rm --network=host \\\n",
92 | " -v ~/docker/isaac-sim/cache/kit:/isaac-sim/kit/cache/Kit:rw \\\n",
93 | " -v ~/docker/isaac-sim/cache/ov:/root/.cache/ov:rw \\\n",
94 | " -v ~/docker/isaac-sim/cache/pip:/root/.cache/pip:rw \\\n",
95 | " -v ~/docker/isaac-sim/cache/glcache:/root/.cache/nvidia/GLCache:rw \\\n",
96 | " -v ~/docker/isaac-sim/cache/computecache:/root/.nv/ComputeCache:rw \\\n",
97 | " -v ~/docker/isaac-sim/logs:/root/.nvidia-omniverse/logs:rw \\\n",
98 | " -v ~/docker/isaac-sim/data:/root/.local/share/ov/data:rw \\\n",
99 | " -v ~/docker/isaac-sim/documents:/root/Documents:rw \\\n",
100 | " -v $MOUNT_DIR:/isaac-sim/palletjack_sdg \\\n",
101 | " nvcr.io/nvidia/isaac-sim:2022.2.1 \\\n",
102 | " ./palletjack_sdg/palletjack_datagen.sh\n",
103 | " \n",
104 | "# Make sure $MOUNT_DIR is set correctly from the cell above"
105 | ]
106 | },
107 | {
108 | "cell_type": "markdown",
109 | "metadata": {},
110 | "source": [
111 | "\n",
112 | "The data generation will begin in `headless` mode. We will be generating 5k images and using a 90:10 split for training and validation. "
113 | ]
114 | },
115 | {
116 | "cell_type": "code",
117 | "execution_count": null,
118 | "metadata": {
119 | "tags": []
120 | },
121 | "outputs": [],
122 | "source": [
123 | "# Once the data generation is complete, list the folders in the data directory\n",
124 | "\n",
125 | "!ls -rlt $MOUNT_DIR/palletjack_data\n",
126 | "\n",
127 | "# There hould be 3 folders -> 1. distractors_warehouse 2. distractors_additional 3. no_distractors "
128 | ]
129 | },
130 | {
131 | "cell_type": "markdown",
132 | "metadata": {},
133 | "source": [
134 | "## 3. Deeper Dive into SDG Script \n",
135 | "\n",
136 | "* The `standalone_palletjack_sdg.py` is the Python script which runs and generates data in headless mode inside the container.\n",
137 | "* The overall flow of the script is similar to the `standalone_examples/replicator/offline_generation.py` file provided as a starting point with Isaac Sim\n",
138 | "\n",
139 | "\n",
140 | "* We will be carrying out specific randomizations targeted to our use case. Some of them are:\n",
141 | " * Camera Pose Randomization -> Should be similar to a robot perspective in the scene\n",
142 | " * Palletjack Color Randomization -> To ensure model is robust to variations in Palletjack colors\n",
143 | " * Distractors Pose Randomization -> To enable the model to *focus* on the right object (Our object of interest: Palletjack)\n",
144 | " * Lighting Randomization-> Model robust to lights and reflections/shadows in the scene\n",
145 | " * Floor and Wall Texture Randomization -> Model more robust to changes in background textures and features
\n",
146 | " \n",
147 | " \n",
148 | "* We are only interested in the `palletjack` object class, all other semantics are removed from the stage with the `update_semantics()` function\n",
149 | "\n",
150 | "* You can use a model of your own choice to train with this data (Pytorch/Tensorflow or other frameworks)\n",
151 | "\n",
152 | "* The data is written in the KITTI Format, this allows seamless integration with TAO to train a model. Refer to `training/cloud_train.ipynb` notebook (Part 2) for training with TAO\n"
153 | ]
154 | }
155 | ],
156 | "metadata": {
157 | "kernelspec": {
158 | "display_name": "Python 3 (ipykernel)",
159 | "language": "python",
160 | "name": "python3"
161 | },
162 | "language_info": {
163 | "codemirror_mode": {
164 | "name": "ipython",
165 | "version": 3
166 | },
167 | "file_extension": ".py",
168 | "mimetype": "text/x-python",
169 | "name": "python",
170 | "nbconvert_exporter": "python",
171 | "pygments_lexer": "ipython3",
172 | "version": "3.8.10"
173 | },
174 | "vscode": {
175 | "interpreter": {
176 | "hash": "f23a2831654361cfd8b219e05b5055fdda3e37fe5c0b020e6226f740844c300a"
177 | }
178 | }
179 | },
180 | "nbformat": 4,
181 | "nbformat_minor": 4
182 | }
183 |
--------------------------------------------------------------------------------
/cloud/training/tao/specs/inference/.ipynb_checkpoints/new_inference_specs-checkpoint.txt:
--------------------------------------------------------------------------------
1 | inferencer_config{
2 | # defining target class names for the experiment.
3 | # Note: This must be mentioned in order of the networks classes.
4 | target_classes: "palletjack"
5 |
6 | # Inference dimensions.
7 | image_width: 960
8 | image_height: 544
9 | # Must match what the model was trained for.
10 | image_channels: 3
11 | batch_size: 32
12 | gpu_index: 0
13 | # model handler config
14 | tlt_config{
15 | model: "/workspace/tao-experiments/cloud/training/tao/detectnet_v2/resnet18_palletjack/weights/model.tlt"
16 | }
17 | }
18 | bbox_handler_config{
19 | kitti_dump: true
20 | disable_overlay: false
21 | overlay_linewidth: 2
22 |
23 | classwise_bbox_handler_config{
24 | key:"palletjack"
25 | value: {
26 | confidence_model: "aggregate_cov"
27 | output_map: "palletjack"
28 | bbox_color{
29 | R: 255
30 | G: 0
31 | B: 0
32 | }
33 | clustering_config{
34 | coverage_threshold: 0.005
35 | clustering_algorithm: DBSCAN
36 | coverage_threshold: 0.005
37 | dbscan_eps: 0.3
38 | dbscan_min_samples: 0.05
39 | dbscan_confidence_threshold: 0.9
40 | minimum_bounding_box_height: 20
41 | }
42 | }
43 | }
44 | classwise_bbox_handler_config{
45 | key:"default"
46 | value: {
47 | confidence_model: "aggregate_cov"
48 | bbox_color{
49 | R: 255
50 | G: 0
51 | B: 0
52 | }
53 | clustering_config{
54 | clustering_algorithm: DBSCAN
55 | dbscan_confidence_threshold: 0.9
56 | coverage_threshold: 0.005
57 | dbscan_eps: 0.3
58 | dbscan_min_samples: 0.05
59 | minimum_bounding_box_height: 20
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/cloud/training/tao/specs/inference/new_inference_specs.txt:
--------------------------------------------------------------------------------
1 | inferencer_config{
2 | # defining target class names for the experiment.
3 | # Note: This must be mentioned in order of the networks classes.
4 | target_classes: "palletjack"
5 |
6 | # Inference dimensions.
7 | image_width: 960
8 | image_height: 544
9 | # Must match what the model was trained for.
10 | image_channels: 3
11 | batch_size: 32
12 | gpu_index: 0
13 | # model handler config
14 | tlt_config{
15 | model: "/workspace/tao-experiments/cloud/training/tao/detectnet_v2/resnet18_palletjack/weights/model.tlt"
16 | }
17 | }
18 | bbox_handler_config{
19 | kitti_dump: true
20 | disable_overlay: false
21 | overlay_linewidth: 2
22 |
23 | classwise_bbox_handler_config{
24 | key:"palletjack"
25 | value: {
26 | confidence_model: "aggregate_cov"
27 | output_map: "palletjack"
28 | bbox_color{
29 | R: 255
30 | G: 0
31 | B: 0
32 | }
33 | clustering_config{
34 | coverage_threshold: 0.005
35 | clustering_algorithm: DBSCAN
36 | coverage_threshold: 0.005
37 | dbscan_eps: 0.3
38 | dbscan_min_samples: 0.05
39 | dbscan_confidence_threshold: 0.9
40 | minimum_bounding_box_height: 20
41 | }
42 | }
43 | }
44 | classwise_bbox_handler_config{
45 | key:"default"
46 | value: {
47 | confidence_model: "aggregate_cov"
48 | bbox_color{
49 | R: 255
50 | G: 0
51 | B: 0
52 | }
53 | clustering_config{
54 | clustering_algorithm: DBSCAN
55 | dbscan_confidence_threshold: 0.9
56 | coverage_threshold: 0.005
57 | dbscan_eps: 0.3
58 | dbscan_min_samples: 0.05
59 | minimum_bounding_box_height: 20
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/cloud/training/tao/specs/tfrecords/.ipynb_checkpoints/distractors_additional-checkpoint.txt:
--------------------------------------------------------------------------------
1 | kitti_config {
2 | root_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_additional/Camera"
3 | image_dir_name: "rgb"
4 | label_dir_name: "object_detection"
5 | image_extension: ".png"
6 | partition_mode: "random"
7 | num_partitions: 2
8 | val_split: 10
9 | num_shards: 10
10 | }
11 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_additional/Camera"
12 |
--------------------------------------------------------------------------------
/cloud/training/tao/specs/tfrecords/.ipynb_checkpoints/distractors_warehouse-checkpoint.txt:
--------------------------------------------------------------------------------
1 | kitti_config {
2 | root_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_warehouse/Camera"
3 | image_dir_name: "rgb"
4 | label_dir_name: "object_detection"
5 | image_extension: ".png"
6 | partition_mode: "random"
7 | num_partitions: 2
8 | val_split: 10
9 | num_shards: 10
10 | }
11 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_warehouse/Camera"
12 |
--------------------------------------------------------------------------------
/cloud/training/tao/specs/tfrecords/.ipynb_checkpoints/no_distractors-checkpoint.txt:
--------------------------------------------------------------------------------
1 | kitti_config {
2 | root_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/no_distractors/Camera"
3 | image_dir_name: "rgb"
4 | label_dir_name: "object_detection"
5 | image_extension: ".png"
6 | partition_mode: "random"
7 | num_partitions: 2
8 | val_split: 10
9 | num_shards: 10
10 | }
11 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/no_distractors/Camera"
12 |
--------------------------------------------------------------------------------
/cloud/training/tao/specs/tfrecords/distractors_additional.txt:
--------------------------------------------------------------------------------
1 | kitti_config {
2 | root_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_additional/Camera"
3 | image_dir_name: "rgb"
4 | label_dir_name: "object_detection"
5 | image_extension: ".png"
6 | partition_mode: "random"
7 | num_partitions: 2
8 | val_split: 10
9 | num_shards: 10
10 | }
11 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_additional/Camera"
12 |
--------------------------------------------------------------------------------
/cloud/training/tao/specs/tfrecords/distractors_warehouse.txt:
--------------------------------------------------------------------------------
1 | kitti_config {
2 | root_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_warehouse/Camera"
3 | image_dir_name: "rgb"
4 | label_dir_name: "object_detection"
5 | image_extension: ".png"
6 | partition_mode: "random"
7 | num_partitions: 2
8 | val_split: 10
9 | num_shards: 10
10 | }
11 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_warehouse/Camera"
12 |
--------------------------------------------------------------------------------
/cloud/training/tao/specs/tfrecords/no_distractors.txt:
--------------------------------------------------------------------------------
1 | kitti_config {
2 | root_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/no_distractors/Camera"
3 | image_dir_name: "rgb"
4 | label_dir_name: "object_detection"
5 | image_extension: ".png"
6 | partition_mode: "random"
7 | num_partitions: 2
8 | val_split: 10
9 | num_shards: 10
10 | }
11 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/no_distractors/Camera"
12 |
--------------------------------------------------------------------------------
/cloud/training/tao/specs/training/.ipynb_checkpoints/resnet18_distractors-checkpoint.txt:
--------------------------------------------------------------------------------
1 | random_seed: 42
2 | dataset_config {
3 | data_sources {
4 | tfrecords_path: "/workspace/tao-experiments/cloud/training/tao/tfrecords/distractors_warehouse/*"
5 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_warehouse/Camera"
6 | }
7 |
8 | data_sources {
9 | tfrecords_path: "/workspace/tao-experiments/cloud/training/tao/tfrecords/distractors_additional/*"
10 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_additional/Camera"
11 | }
12 |
13 | data_sources {
14 | tfrecords_path: "/workspace/tao-experiments/cloud/training/tao/tfrecords/no_distractors/*"
15 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/no_distractors/Camera"
16 | }
17 |
18 | image_extension: "png"
19 |
20 | target_class_mapping {
21 | key: "palletjack"
22 | value: "palletjack"
23 | }
24 |
25 | validation_fold: 0
26 |
27 | }
28 |
29 | augmentation_config {
30 | preprocessing {
31 | output_image_width: 960
32 | output_image_height: 544
33 | min_bbox_width: 20.0
34 | min_bbox_height: 20.0
35 | output_image_channel: 3
36 | }
37 | spatial_augmentation {
38 | hflip_probability: 0.5
39 | zoom_min: 0.5
40 | zoom_max: 1.5
41 | translate_max_x: 8.0
42 | translate_max_y: 8.0
43 | }
44 | color_augmentation {
45 | hue_rotation_max: 25.0
46 | saturation_shift_max: 0.20000000298
47 | contrast_scale_max: 0.10000000149
48 | contrast_center: 0.5
49 | }
50 | }
51 |
52 | postprocessing_config {
53 | target_class_config {
54 | key: "palletjack"
55 | value {
56 | clustering_config {
57 | clustering_algorithm: DBSCAN
58 | dbscan_confidence_threshold: 0.9
59 | coverage_threshold: 0.00499999988824
60 | dbscan_eps: 0.15000000596
61 | dbscan_min_samples: 0.0500000007451
62 | minimum_bounding_box_height: 20
63 | }
64 | }
65 | }
66 | }
67 |
68 | model_config {
69 | pretrained_model_file: "/workspace/tao-experiments/cloud/training/tao/pretrained_model/resnet18.hdf5"
70 | num_layers: 18
71 | use_batch_norm: true
72 | objective_set {
73 | bbox {
74 | scale: 35.0
75 | offset: 0.5
76 | }
77 | cov {
78 | }
79 | }
80 | arch: "resnet"
81 | }
82 |
83 | evaluation_config {
84 | validation_period_during_training: 10
85 | first_validation_epoch: 5
86 | minimum_detection_ground_truth_overlap {
87 | key: "palletjack"
88 | value: 0.5
89 | }
90 | evaluation_box_config {
91 | key: "palletjack"
92 | value {
93 | minimum_height: 25
94 | maximum_height: 9999
95 | minimum_width: 25
96 | maximum_width: 9999
97 | }
98 | }
99 | average_precision_mode: INTEGRATE
100 | }
101 |
102 | cost_function_config {
103 | target_classes {
104 | name: "palletjack"
105 | class_weight: 1.0
106 | coverage_foreground_weight: 0.0500000007451
107 | objectives {
108 | name: "cov"
109 | initial_weight: 1.0
110 | weight_target: 1.0
111 | }
112 | objectives {
113 | name: "bbox"
114 | initial_weight: 10.0
115 | weight_target: 1.0
116 | }
117 | }
118 | enable_autoweighting: true
119 | max_objective_weight: 0.999899983406
120 | min_objective_weight: 9.99999974738e-05
121 | }
122 |
123 | training_config {
124 | batch_size_per_gpu: 32
125 | num_epochs: 100
126 | learning_rate {
127 | soft_start_annealing_schedule {
128 | min_learning_rate: 5e-06
129 | max_learning_rate: 5e-04
130 | soft_start: 0.10000000149
131 | annealing: 0.699999988079
132 | }
133 | }
134 | regularizer {
135 | type: L1
136 | weight: 3.00000002618e-09
137 | }
138 | optimizer {
139 | adam {
140 | epsilon: 9.99999993923e-09
141 | beta1: 0.899999976158
142 | beta2: 0.999000012875
143 | }
144 | }
145 | cost_scaling {
146 | initial_exponent: 20.0
147 | increment: 0.005
148 | decrement: 1.0
149 | }
150 | visualizer{
151 | enabled: true
152 | num_images: 10
153 | scalar_logging_frequency: 10
154 | infrequent_logging_frequency: 5
155 | target_class_config {
156 | key: "palletjack"
157 | value: {
158 | coverage_threshold: 0.005
159 | }
160 | }
161 | }
162 | checkpoint_interval: 10
163 | }
164 |
165 | bbox_rasterizer_config {
166 | target_class_config {
167 | key: "palletjack"
168 | value {
169 | cov_center_x: 0.5
170 | cov_center_y: 0.5
171 | cov_radius_x: 1.0
172 | cov_radius_y: 1.0
173 | bbox_min_radius: 1.0
174 | }
175 | }
176 | deadzone_radius: 0.400000154972
177 | }
178 |
--------------------------------------------------------------------------------
/cloud/training/tao/specs/training/resnet18_distractors.txt:
--------------------------------------------------------------------------------
1 | random_seed: 42
2 | dataset_config {
3 | data_sources {
4 | tfrecords_path: "/workspace/tao-experiments/cloud/training/tao/tfrecords/distractors_warehouse/*"
5 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_warehouse/Camera"
6 | }
7 |
8 | data_sources {
9 | tfrecords_path: "/workspace/tao-experiments/cloud/training/tao/tfrecords/distractors_additional/*"
10 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_additional/Camera"
11 | }
12 |
13 | data_sources {
14 | tfrecords_path: "/workspace/tao-experiments/cloud/training/tao/tfrecords/no_distractors/*"
15 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/no_distractors/Camera"
16 | }
17 |
18 | image_extension: "png"
19 |
20 | target_class_mapping {
21 | key: "palletjack"
22 | value: "palletjack"
23 | }
24 |
25 | validation_fold: 0
26 |
27 | }
28 |
29 | augmentation_config {
30 | preprocessing {
31 | output_image_width: 960
32 | output_image_height: 544
33 | min_bbox_width: 20.0
34 | min_bbox_height: 20.0
35 | output_image_channel: 3
36 | }
37 | spatial_augmentation {
38 | hflip_probability: 0.5
39 | zoom_min: 0.5
40 | zoom_max: 1.5
41 | translate_max_x: 8.0
42 | translate_max_y: 8.0
43 | }
44 | color_augmentation {
45 | hue_rotation_max: 25.0
46 | saturation_shift_max: 0.20000000298
47 | contrast_scale_max: 0.10000000149
48 | contrast_center: 0.5
49 | }
50 | }
51 |
52 | postprocessing_config {
53 | target_class_config {
54 | key: "palletjack"
55 | value {
56 | clustering_config {
57 | clustering_algorithm: DBSCAN
58 | dbscan_confidence_threshold: 0.9
59 | coverage_threshold: 0.00499999988824
60 | dbscan_eps: 0.15000000596
61 | dbscan_min_samples: 0.0500000007451
62 | minimum_bounding_box_height: 20
63 | }
64 | }
65 | }
66 | }
67 |
68 | model_config {
69 | pretrained_model_file: "/workspace/tao-experiments/cloud/training/tao/pretrained_model/resnet18.hdf5"
70 | num_layers: 18
71 | use_batch_norm: true
72 | objective_set {
73 | bbox {
74 | scale: 35.0
75 | offset: 0.5
76 | }
77 | cov {
78 | }
79 | }
80 | arch: "resnet"
81 | }
82 |
83 | evaluation_config {
84 | validation_period_during_training: 10
85 | first_validation_epoch: 5
86 | minimum_detection_ground_truth_overlap {
87 | key: "palletjack"
88 | value: 0.5
89 | }
90 | evaluation_box_config {
91 | key: "palletjack"
92 | value {
93 | minimum_height: 25
94 | maximum_height: 9999
95 | minimum_width: 25
96 | maximum_width: 9999
97 | }
98 | }
99 | average_precision_mode: INTEGRATE
100 | }
101 |
102 | cost_function_config {
103 | target_classes {
104 | name: "palletjack"
105 | class_weight: 1.0
106 | coverage_foreground_weight: 0.0500000007451
107 | objectives {
108 | name: "cov"
109 | initial_weight: 1.0
110 | weight_target: 1.0
111 | }
112 | objectives {
113 | name: "bbox"
114 | initial_weight: 10.0
115 | weight_target: 1.0
116 | }
117 | }
118 | enable_autoweighting: true
119 | max_objective_weight: 0.999899983406
120 | min_objective_weight: 9.99999974738e-05
121 | }
122 |
123 | training_config {
124 | batch_size_per_gpu: 32
125 | num_epochs: 100
126 | learning_rate {
127 | soft_start_annealing_schedule {
128 | min_learning_rate: 5e-06
129 | max_learning_rate: 5e-04
130 | soft_start: 0.10000000149
131 | annealing: 0.699999988079
132 | }
133 | }
134 | regularizer {
135 | type: L1
136 | weight: 3.00000002618e-09
137 | }
138 | optimizer {
139 | adam {
140 | epsilon: 9.99999993923e-09
141 | beta1: 0.899999976158
142 | beta2: 0.999000012875
143 | }
144 | }
145 | cost_scaling {
146 | initial_exponent: 20.0
147 | increment: 0.005
148 | decrement: 1.0
149 | }
150 | visualizer{
151 | enabled: true
152 | num_images: 10
153 | scalar_logging_frequency: 10
154 | infrequent_logging_frequency: 5
155 | target_class_config {
156 | key: "palletjack"
157 | value: {
158 | coverage_threshold: 0.005
159 | }
160 | }
161 | }
162 | checkpoint_interval: 10
163 | }
164 |
165 | bbox_rasterizer_config {
166 | target_class_config {
167 | key: "palletjack"
168 | value {
169 | cov_center_x: 0.5
170 | cov_center_y: 0.5
171 | cov_radius_x: 1.0
172 | cov_radius_y: 1.0
173 | bbox_min_radius: 1.0
174 | }
175 | }
176 | deadzone_radius: 0.400000154972
177 | }
178 |
--------------------------------------------------------------------------------
/images/loco_palletjacks/1564562568.298206.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1564562568.298206.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1564562628.517229.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1564562628.517229.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1564562671.2769265.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1564562671.2769265.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1564562843.0618184.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1564562843.0618184.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1564563939.2498121.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1564563939.2498121.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1564563941.2643266.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1564563941.2643266.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1564564477.8315344.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1564564477.8315344.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1564564608.7540288.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1564564608.7540288.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1564564867702,99.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1564564867702,99.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574674966.043515.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574674966.043515.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574675023.097059.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574675023.097059.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574675145.7230172.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574675145.7230172.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574675156.020139.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574675156.020139.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574675156.7667925.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574675156.7667925.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574675164.5134397.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574675164.5134397.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574675587024,65.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574675587024,65.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574675590005,88.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574675590005,88.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574675593.8838139.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574675593.8838139.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574675645.8659928.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574675645.8659928.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574675657.9895825.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574675657.9895825.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574675729.036457.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574675729.036457.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574676301.361285.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574676301.361285.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574676447.562495.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574676447.562495.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1574679194.2192037.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1574679194.2192037.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1576592006.4469478.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1576592006.4469478.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1576592741574,07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1576592741574,07.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1576592752171,47.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1576592752171,47.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1576593611.6224425.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1576593611.6224425.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1576594779.3298974.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1576594779.3298974.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1576596021.9482577.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1576596021.9482577.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1579163389986,09.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1579163389986,09.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1579163400.4232957.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1579163400.4232957.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/1579163403.3200178.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/1579163403.3200178.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/2044458,0127.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/2044458,0127.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/426023,9672.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/426023,9672.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/509815376,8831.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/509815376,8831.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/510196244,1362.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/510196244,1362.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/510664610,1022.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/510664610,1022.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/516447400,977.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/516447400,977.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/516449535,2259.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/516449535,2259.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/593768,3659.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/593768,3659.jpg
--------------------------------------------------------------------------------
/images/loco_palletjacks/598835,2028.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/loco_palletjacks/598835,2028.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1564562568.298206.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1564562568.298206.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1564562628.517229.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1564562628.517229.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1564562671.2769265.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1564562671.2769265.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1564562843.0618184.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1564562843.0618184.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1564563939.2498121.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1564563939.2498121.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1564563941.2643266.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1564563941.2643266.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1564564477.8315344.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1564564477.8315344.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1564564608.7540288.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1564564608.7540288.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1564564867702,99.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1564564867702,99.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574674966.043515.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574674966.043515.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574675023.097059.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574675023.097059.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574675145.7230172.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574675145.7230172.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574675156.020139.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574675156.020139.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574675156.7667925.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574675156.7667925.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574675164.5134397.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574675164.5134397.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574675587024,65.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574675587024,65.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574675590005,88.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574675590005,88.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574675593.8838139.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574675593.8838139.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574675645.8659928.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574675645.8659928.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574675657.9895825.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574675657.9895825.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574675729.036457.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574675729.036457.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574676301.361285.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574676301.361285.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574676447.562495.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574676447.562495.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1574679194.2192037.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1574679194.2192037.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1576592006.4469478.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1576592006.4469478.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1576592741574,07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1576592741574,07.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1576592752171,47.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1576592752171,47.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1576593611.6224425.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1576593611.6224425.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1576594779.3298974.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1576594779.3298974.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1576596021.9482577.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1576596021.9482577.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1579163389986,09.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1579163389986,09.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1579163400.4232957.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1579163400.4232957.jpg
--------------------------------------------------------------------------------
/images/real_world_results/1579163403.3200178.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/1579163403.3200178.jpg
--------------------------------------------------------------------------------
/images/real_world_results/2044458,0127.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/2044458,0127.jpg
--------------------------------------------------------------------------------
/images/real_world_results/426023,9672.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/426023,9672.jpg
--------------------------------------------------------------------------------
/images/real_world_results/509815376,8831.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/509815376,8831.jpg
--------------------------------------------------------------------------------
/images/real_world_results/510196244,1362.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/510196244,1362.jpg
--------------------------------------------------------------------------------
/images/real_world_results/510664610,1022.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/510664610,1022.jpg
--------------------------------------------------------------------------------
/images/real_world_results/516447400,977.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/516447400,977.jpg
--------------------------------------------------------------------------------
/images/real_world_results/516449535,2259.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/516449535,2259.jpg
--------------------------------------------------------------------------------
/images/real_world_results/593768,3659.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/593768,3659.jpg
--------------------------------------------------------------------------------
/images/real_world_results/598835,2028.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/real_world_results/598835,2028.jpg
--------------------------------------------------------------------------------
/images/sample_synthetic/138.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/138.png
--------------------------------------------------------------------------------
/images/sample_synthetic/1545.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/1545.png
--------------------------------------------------------------------------------
/images/sample_synthetic/203.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/203.png
--------------------------------------------------------------------------------
/images/sample_synthetic/21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/21.png
--------------------------------------------------------------------------------
/images/sample_synthetic/215.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/215.png
--------------------------------------------------------------------------------
/images/sample_synthetic/220.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/220.png
--------------------------------------------------------------------------------
/images/sample_synthetic/378.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/378.png
--------------------------------------------------------------------------------
/images/sample_synthetic/411.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/411.png
--------------------------------------------------------------------------------
/images/sample_synthetic/444.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/444.png
--------------------------------------------------------------------------------
/images/sample_synthetic/512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/512.png
--------------------------------------------------------------------------------
/images/sample_synthetic/56.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/56.png
--------------------------------------------------------------------------------
/images/sample_synthetic/653.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/653.png
--------------------------------------------------------------------------------
/images/sample_synthetic/896.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/896.png
--------------------------------------------------------------------------------
/images/sample_synthetic/897.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/897.png
--------------------------------------------------------------------------------
/images/sample_synthetic/92.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/sample_synthetic/92.png
--------------------------------------------------------------------------------
/images/tensorboard/tensorboard_resized_palletjack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NVIDIA-AI-IOT/synthetic_data_generation_training_workflow/c4039ea4f8ac83af38f36433e7730c15d5c3b224/images/tensorboard/tensorboard_resized_palletjack.png
--------------------------------------------------------------------------------
/local/README.md:
--------------------------------------------------------------------------------
1 | # Requirements
2 | - Install [Isaac Sim](https://docs.omniverse.nvidia.com/isaacsim/latest/install_workstation.html)
3 | - Training via TAO Toolkit Docker container (TAO setup instructions in `local_train` notebook)
4 |
5 |
6 | ## Synthetic Data Generation
7 | - Provide the path of your Isaac Sim installation folder in the `generate_data.sh` script
8 | - Make the script an executable after adding the Isaac Sim Path (`chmod +x generate_data.sh`)
9 | - Run the script (`./generate_data.sh`)
10 | - We will generate data for the `palletjack` class of objects with annotations in KITTI format
11 | - This generated data can be used to train your own model (framework and architecture of your choice)
12 |
13 |
14 | ## Training with TAO Toolkit
15 | - The data generated in the previus step can be directly fed to TAO for training
16 | - The `local_train` notebook provides a walkthrough of the steps:
17 | - Setting up TAO docker container
18 | - Downloading pre-trained model, we will use the `DetectNet_v2` model with a `resnet_18` backbone
19 | - Running TAO training with `spec` files provided
20 | - Visualizing model performance on real world data
21 | - Visualize model metric with Tensorboard
22 |
23 |
24 |
25 | ## Next steps
26 |
27 | ### Generating Synthetic Data for your use case
28 | - Make changes in the Domain Randomization under the Synthetic Data Generation [script](../palletjack_sdg/standalone_palletjack_sdg.py)
29 | - Add additional objects of interest in the scene (similar to how palletjacks are added, you can add forklifts, ladders etc.) to generate dataUse different models for training with TAO (for object detection, you can use YOLO, SSD, EfficientDet)
30 | - Replicator provides Semantic Segmentation, Instance Segmentation, Depth and various other ground truth annotations along with RGB. You can also write your own ground truth annotator (eg: Pose Estimation: Refer to [sample](https://docs.omniverse.nvidia.com/isaacsim/latest/tutorial_replicator_offline_pose_estimation.html) These can be used for training a model of your own framework and choice)
31 | - Exploring the option of using Synthetic + Real data for training a network. Can be particularly useful for generating more data around particular corner cases
32 |
33 | ### Deploying Trained Models
34 | - The trained model can be pruned and optimized for inference with TAO
35 | - This can then be deployed on a robot with NVIDIA Jetson
--------------------------------------------------------------------------------
/local/generate_data.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # This is the path where Isaac Sim is installed which contains the python.sh script
4 | ISAAC_SIM_PATH=""
5 |
6 | ## Go to location of the SDG script
7 | cd ../palletjack_sdg
8 | SCRIPT_PATH="${PWD}/standalone_palletjack_sdg.py"
9 | OUTPUT_WAREHOUSE="${PWD}/palletjack_data/distractors_warehouse"
10 | OUTPUT_ADDITIONAL="${PWD}/palletjack_data/distractors_additional"
11 | OUTPUT_NO_DISTRACTORS="${PWD}/palletjack_data/no_distractors"
12 |
13 |
14 | ## Go to Isaac Sim location for running with ./python.sh
15 | cd $ISAAC_SIM_PATH
16 |
17 | echo "Starting Data Generation"
18 |
19 | ./python.sh $SCRIPT_PATH --height 544 --width 960 --num_frames 2000 --distractors warehouse --data_dir $OUTPUT_WAREHOUSE
20 |
21 | ./python.sh $SCRIPT_PATH --height 544 --width 960 --num_frames 2000 --distractors additional --data_dir $OUTPUT_ADDITIONAL
22 |
23 | ./python.sh $SCRIPT_PATH --height 544 --width 960 --num_frames 1000 --distractors None --data_dir $OUTPUT_NO_DISTRACTORS
24 |
25 |
26 |
--------------------------------------------------------------------------------
/local/training/tao/specs/inference/.ipynb_checkpoints/new_inference_specs-checkpoint.txt:
--------------------------------------------------------------------------------
1 | inferencer_config{
2 | # defining target class names for the experiment.
3 | # Note: This must be mentioned in order of the networks classes.
4 | target_classes: "palletjack"
5 |
6 | # Inference dimensions.
7 | image_width: 960
8 | image_height: 544
9 | # Must match what the model was trained for.
10 | image_channels: 3
11 | batch_size: 32
12 | gpu_index: 0
13 | # model handler config
14 | tlt_config{
15 | model: "/workspace/tao-experiments/local/training/tao/detectnet_v2/resnet18_palletjack/weights/model.tlt"
16 | }
17 | }
18 | bbox_handler_config{
19 | kitti_dump: true
20 | disable_overlay: false
21 | overlay_linewidth: 2
22 |
23 | classwise_bbox_handler_config{
24 | key:"palletjack"
25 | value: {
26 | confidence_model: "aggregate_cov"
27 | output_map: "palletjack"
28 | bbox_color{
29 | R: 255
30 | G: 0
31 | B: 0
32 | }
33 | clustering_config{
34 | coverage_threshold: 0.005
35 | clustering_algorithm: DBSCAN
36 | coverage_threshold: 0.005
37 | dbscan_eps: 0.3
38 | dbscan_min_samples: 0.05
39 | dbscan_confidence_threshold: 0.9
40 | minimum_bounding_box_height: 20
41 | }
42 | }
43 | }
44 | classwise_bbox_handler_config{
45 | key:"default"
46 | value: {
47 | confidence_model: "aggregate_cov"
48 | bbox_color{
49 | R: 255
50 | G: 0
51 | B: 0
52 | }
53 | clustering_config{
54 | clustering_algorithm: DBSCAN
55 | dbscan_confidence_threshold: 0.9
56 | coverage_threshold: 0.005
57 | dbscan_eps: 0.3
58 | dbscan_min_samples: 0.05
59 | minimum_bounding_box_height: 20
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/local/training/tao/specs/inference/new_inference_specs.txt:
--------------------------------------------------------------------------------
1 | inferencer_config{
2 | # defining target class names for the experiment.
3 | # Note: This must be mentioned in order of the networks classes.
4 | target_classes: "palletjack"
5 |
6 | # Inference dimensions.
7 | image_width: 960
8 | image_height: 544
9 | # Must match what the model was trained for.
10 | image_channels: 3
11 | batch_size: 32
12 | gpu_index: 0
13 | # model handler config
14 | tlt_config{
15 | model: "/workspace/tao-experiments/local/training/tao/detectnet_v2/resnet18_palletjack/weights/model.tlt"
16 | }
17 | }
18 | bbox_handler_config{
19 | kitti_dump: true
20 | disable_overlay: false
21 | overlay_linewidth: 2
22 |
23 | classwise_bbox_handler_config{
24 | key:"palletjack"
25 | value: {
26 | confidence_model: "aggregate_cov"
27 | output_map: "palletjack"
28 | bbox_color{
29 | R: 255
30 | G: 0
31 | B: 0
32 | }
33 | clustering_config{
34 | coverage_threshold: 0.005
35 | clustering_algorithm: DBSCAN
36 | coverage_threshold: 0.005
37 | dbscan_eps: 0.3
38 | dbscan_min_samples: 0.05
39 | dbscan_confidence_threshold: 0.9
40 | minimum_bounding_box_height: 20
41 | }
42 | }
43 | }
44 | classwise_bbox_handler_config{
45 | key:"default"
46 | value: {
47 | confidence_model: "aggregate_cov"
48 | bbox_color{
49 | R: 255
50 | G: 0
51 | B: 0
52 | }
53 | clustering_config{
54 | clustering_algorithm: DBSCAN
55 | dbscan_confidence_threshold: 0.9
56 | coverage_threshold: 0.005
57 | dbscan_eps: 0.3
58 | dbscan_min_samples: 0.05
59 | minimum_bounding_box_height: 20
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/local/training/tao/specs/tfrecords/.ipynb_checkpoints/distractors_additional-checkpoint.txt:
--------------------------------------------------------------------------------
1 | kitti_config {
2 | root_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_additional/Camera"
3 | image_dir_name: "rgb"
4 | label_dir_name: "object_detection"
5 | image_extension: ".png"
6 | partition_mode: "random"
7 | num_partitions: 2
8 | val_split: 10
9 | num_shards: 10
10 | }
11 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_additional/Camera"
12 |
--------------------------------------------------------------------------------
/local/training/tao/specs/tfrecords/.ipynb_checkpoints/distractors_warehouse-checkpoint.txt:
--------------------------------------------------------------------------------
1 | kitti_config {
2 | root_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_warehouse/Camera"
3 | image_dir_name: "rgb"
4 | label_dir_name: "object_detection"
5 | image_extension: ".png"
6 | partition_mode: "random"
7 | num_partitions: 2
8 | val_split: 10
9 | num_shards: 10
10 | }
11 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_warehouse/Camera"
12 |
--------------------------------------------------------------------------------
/local/training/tao/specs/tfrecords/.ipynb_checkpoints/no_distractors-checkpoint.txt:
--------------------------------------------------------------------------------
1 | kitti_config {
2 | root_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/no_distractors/Camera"
3 | image_dir_name: "rgb"
4 | label_dir_name: "object_detection"
5 | image_extension: ".png"
6 | partition_mode: "random"
7 | num_partitions: 2
8 | val_split: 10
9 | num_shards: 10
10 | }
11 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/no_distractors/Camera"
12 |
--------------------------------------------------------------------------------
/local/training/tao/specs/tfrecords/distractors_additional.txt:
--------------------------------------------------------------------------------
1 | kitti_config {
2 | root_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_additional/Camera"
3 | image_dir_name: "rgb"
4 | label_dir_name: "object_detection"
5 | image_extension: ".png"
6 | partition_mode: "random"
7 | num_partitions: 2
8 | val_split: 10
9 | num_shards: 10
10 | }
11 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_additional/Camera"
12 |
--------------------------------------------------------------------------------
/local/training/tao/specs/tfrecords/distractors_warehouse.txt:
--------------------------------------------------------------------------------
1 | kitti_config {
2 | root_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_warehouse/Camera"
3 | image_dir_name: "rgb"
4 | label_dir_name: "object_detection"
5 | image_extension: ".png"
6 | partition_mode: "random"
7 | num_partitions: 2
8 | val_split: 10
9 | num_shards: 10
10 | }
11 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_warehouse/Camera"
12 |
--------------------------------------------------------------------------------
/local/training/tao/specs/tfrecords/no_distractors.txt:
--------------------------------------------------------------------------------
1 | kitti_config {
2 | root_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/no_distractors/Camera"
3 | image_dir_name: "rgb"
4 | label_dir_name: "object_detection"
5 | image_extension: ".png"
6 | partition_mode: "random"
7 | num_partitions: 2
8 | val_split: 10
9 | num_shards: 10
10 | }
11 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/no_distractors/Camera"
12 |
--------------------------------------------------------------------------------
/local/training/tao/specs/training/.ipynb_checkpoints/resnet18_distractors-checkpoint.txt:
--------------------------------------------------------------------------------
1 | random_seed: 42
2 | dataset_config {
3 | data_sources {
4 | tfrecords_path: "/workspace/tao-experiments/cloud/training/tao/tfrecords/distractors_warehouse/*"
5 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_warehouse/Camera"
6 | }
7 |
8 | data_sources {
9 | tfrecords_path: "/workspace/tao-experiments/cloud/training/tao/tfrecords/distractors_additional/*"
10 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_additional/Camera"
11 | }
12 |
13 | data_sources {
14 | tfrecords_path: "/workspace/tao-experiments/cloud/training/tao/tfrecords/no_distractors/*"
15 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/no_distractors/Camera"
16 | }
17 |
18 | image_extension: "png"
19 |
20 | target_class_mapping {
21 | key: "palletjack"
22 | value: "palletjack"
23 | }
24 |
25 | validation_fold: 0
26 |
27 | }
28 |
29 | augmentation_config {
30 | preprocessing {
31 | output_image_width: 960
32 | output_image_height: 544
33 | min_bbox_width: 20.0
34 | min_bbox_height: 20.0
35 | output_image_channel: 3
36 | }
37 | spatial_augmentation {
38 | hflip_probability: 0.5
39 | zoom_min: 0.5
40 | zoom_max: 1.5
41 | translate_max_x: 8.0
42 | translate_max_y: 8.0
43 | }
44 | color_augmentation {
45 | hue_rotation_max: 25.0
46 | saturation_shift_max: 0.20000000298
47 | contrast_scale_max: 0.10000000149
48 | contrast_center: 0.5
49 | }
50 | }
51 |
52 | postprocessing_config {
53 | target_class_config {
54 | key: "palletjack"
55 | value {
56 | clustering_config {
57 | clustering_algorithm: DBSCAN
58 | dbscan_confidence_threshold: 0.9
59 | coverage_threshold: 0.00499999988824
60 | dbscan_eps: 0.15000000596
61 | dbscan_min_samples: 0.0500000007451
62 | minimum_bounding_box_height: 20
63 | }
64 | }
65 | }
66 | }
67 |
68 | model_config {
69 | pretrained_model_file: "/workspace/tao-experiments/cloud/training/tao/pretrained_model/resnet18.hdf5"
70 | num_layers: 18
71 | use_batch_norm: true
72 | objective_set {
73 | bbox {
74 | scale: 35.0
75 | offset: 0.5
76 | }
77 | cov {
78 | }
79 | }
80 | arch: "resnet"
81 | }
82 |
83 | evaluation_config {
84 | validation_period_during_training: 10
85 | first_validation_epoch: 5
86 | minimum_detection_ground_truth_overlap {
87 | key: "palletjack"
88 | value: 0.5
89 | }
90 | evaluation_box_config {
91 | key: "palletjack"
92 | value {
93 | minimum_height: 25
94 | maximum_height: 9999
95 | minimum_width: 25
96 | maximum_width: 9999
97 | }
98 | }
99 | average_precision_mode: INTEGRATE
100 | }
101 |
102 | cost_function_config {
103 | target_classes {
104 | name: "palletjack"
105 | class_weight: 1.0
106 | coverage_foreground_weight: 0.0500000007451
107 | objectives {
108 | name: "cov"
109 | initial_weight: 1.0
110 | weight_target: 1.0
111 | }
112 | objectives {
113 | name: "bbox"
114 | initial_weight: 10.0
115 | weight_target: 1.0
116 | }
117 | }
118 | enable_autoweighting: true
119 | max_objective_weight: 0.999899983406
120 | min_objective_weight: 9.99999974738e-05
121 | }
122 |
123 | training_config {
124 | batch_size_per_gpu: 32
125 | num_epochs: 100
126 | learning_rate {
127 | soft_start_annealing_schedule {
128 | min_learning_rate: 5e-06
129 | max_learning_rate: 5e-04
130 | soft_start: 0.10000000149
131 | annealing: 0.699999988079
132 | }
133 | }
134 | regularizer {
135 | type: L1
136 | weight: 3.00000002618e-09
137 | }
138 | optimizer {
139 | adam {
140 | epsilon: 9.99999993923e-09
141 | beta1: 0.899999976158
142 | beta2: 0.999000012875
143 | }
144 | }
145 | cost_scaling {
146 | initial_exponent: 20.0
147 | increment: 0.005
148 | decrement: 1.0
149 | }
150 | visualizer{
151 | enabled: true
152 | num_images: 10
153 | scalar_logging_frequency: 10
154 | infrequent_logging_frequency: 5
155 | target_class_config {
156 | key: "palletjack"
157 | value: {
158 | coverage_threshold: 0.005
159 | }
160 | }
161 | }
162 | checkpoint_interval: 10
163 | }
164 |
165 | bbox_rasterizer_config {
166 | target_class_config {
167 | key: "palletjack"
168 | value {
169 | cov_center_x: 0.5
170 | cov_center_y: 0.5
171 | cov_radius_x: 1.0
172 | cov_radius_y: 1.0
173 | bbox_min_radius: 1.0
174 | }
175 | }
176 | deadzone_radius: 0.400000154972
177 | }
178 |
--------------------------------------------------------------------------------
/local/training/tao/specs/training/resnet18_distractors.txt:
--------------------------------------------------------------------------------
1 | random_seed: 42
2 | dataset_config {
3 | data_sources {
4 | tfrecords_path: "/workspace/tao-experiments/local/training/tao/tfrecords/distractors_warehouse/*"
5 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_warehouse/Camera"
6 | }
7 |
8 | data_sources {
9 | tfrecords_path: "/workspace/tao-experiments/local/training/tao/tfrecords/distractors_additional/*"
10 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/distractors_additional/Camera"
11 | }
12 |
13 | data_sources {
14 | tfrecords_path: "/workspace/tao-experiments/local/training/tao/tfrecords/no_distractors/*"
15 | image_directory_path: "/workspace/tao-experiments/palletjack_sdg/palletjack_data/no_distractors/Camera"
16 | }
17 |
18 | image_extension: "png"
19 |
20 | target_class_mapping {
21 | key: "palletjack"
22 | value: "palletjack"
23 | }
24 |
25 | validation_fold: 0
26 |
27 | }
28 |
29 | augmentation_config {
30 | preprocessing {
31 | output_image_width: 960
32 | output_image_height: 544
33 | min_bbox_width: 20.0
34 | min_bbox_height: 20.0
35 | output_image_channel: 3
36 | }
37 | spatial_augmentation {
38 | hflip_probability: 0.5
39 | zoom_min: 0.5
40 | zoom_max: 1.5
41 | translate_max_x: 8.0
42 | translate_max_y: 8.0
43 | }
44 | color_augmentation {
45 | hue_rotation_max: 25.0
46 | saturation_shift_max: 0.20000000298
47 | contrast_scale_max: 0.10000000149
48 | contrast_center: 0.5
49 | }
50 | }
51 |
52 | postprocessing_config {
53 | target_class_config {
54 | key: "palletjack"
55 | value {
56 | clustering_config {
57 | clustering_algorithm: DBSCAN
58 | dbscan_confidence_threshold: 0.9
59 | coverage_threshold: 0.00499999988824
60 | dbscan_eps: 0.15000000596
61 | dbscan_min_samples: 0.0500000007451
62 | minimum_bounding_box_height: 20
63 | }
64 | }
65 | }
66 | }
67 |
68 | model_config {
69 | pretrained_model_file: "/workspace/tao-experiments/local/training/tao/pretrained_model/resnet18.hdf5"
70 | num_layers: 18
71 | use_batch_norm: true
72 | objective_set {
73 | bbox {
74 | scale: 35.0
75 | offset: 0.5
76 | }
77 | cov {
78 | }
79 | }
80 | arch: "resnet"
81 | }
82 |
83 | evaluation_config {
84 | validation_period_during_training: 10
85 | first_validation_epoch: 5
86 | minimum_detection_ground_truth_overlap {
87 | key: "palletjack"
88 | value: 0.5
89 | }
90 | evaluation_box_config {
91 | key: "palletjack"
92 | value {
93 | minimum_height: 25
94 | maximum_height: 9999
95 | minimum_width: 25
96 | maximum_width: 9999
97 | }
98 | }
99 | average_precision_mode: INTEGRATE
100 | }
101 |
102 | cost_function_config {
103 | target_classes {
104 | name: "palletjack"
105 | class_weight: 1.0
106 | coverage_foreground_weight: 0.0500000007451
107 | objectives {
108 | name: "cov"
109 | initial_weight: 1.0
110 | weight_target: 1.0
111 | }
112 | objectives {
113 | name: "bbox"
114 | initial_weight: 10.0
115 | weight_target: 1.0
116 | }
117 | }
118 | enable_autoweighting: true
119 | max_objective_weight: 0.999899983406
120 | min_objective_weight: 9.99999974738e-05
121 | }
122 |
123 | training_config {
124 | batch_size_per_gpu: 32
125 | num_epochs: 100
126 | learning_rate {
127 | soft_start_annealing_schedule {
128 | min_learning_rate: 5e-06
129 | max_learning_rate: 5e-04
130 | soft_start: 0.10000000149
131 | annealing: 0.699999988079
132 | }
133 | }
134 | regularizer {
135 | type: L1
136 | weight: 3.00000002618e-09
137 | }
138 | optimizer {
139 | adam {
140 | epsilon: 9.99999993923e-09
141 | beta1: 0.899999976158
142 | beta2: 0.999000012875
143 | }
144 | }
145 | cost_scaling {
146 | initial_exponent: 20.0
147 | increment: 0.005
148 | decrement: 1.0
149 | }
150 | visualizer{
151 | enabled: true
152 | num_images: 10
153 | scalar_logging_frequency: 10
154 | infrequent_logging_frequency: 5
155 | target_class_config {
156 | key: "palletjack"
157 | value: {
158 | coverage_threshold: 0.005
159 | }
160 | }
161 | }
162 | checkpoint_interval: 10
163 | }
164 |
165 | bbox_rasterizer_config {
166 | target_class_config {
167 | key: "palletjack"
168 | value {
169 | cov_center_x: 0.5
170 | cov_center_y: 0.5
171 | cov_radius_x: 1.0
172 | cov_radius_y: 1.0
173 | bbox_min_radius: 1.0
174 | }
175 | }
176 | deadzone_radius: 0.400000154972
177 | }
178 |
--------------------------------------------------------------------------------
/palletjack_sdg/palletjack_datagen.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # This is the path where Isaac Sim is installed which contains the python.sh script
4 | ISAAC_SIM_PATH='/isaac-sim'
5 |
6 | echo "Starting Data Generation"
7 |
8 | cd $ISAAC_SIM_PATH
9 |
10 | echo $PWD
11 |
12 | ./python.sh /isaac-sim/palletjack_sdg/standalone_palletjack_sdg.py --headless True --height 544 --width 960 --num_frames 2000 --distractors warehouse --data_dir /isaac-sim/palletjack_sdg/palletjack_data/distractors_warehouse
13 |
14 | ./python.sh /isaac-sim/palletjack_sdg/standalone_palletjack_sdg.py --headless True --height 544 --width 960 --num_frames 2000 --distractors additional --data_dir /isaac-sim/palletjack_sdg/palletjack_data/distractors_additional
15 |
16 | ./python.sh /isaac-sim/palletjack_sdg/standalone_palletjack_sdg.py --headless True --height 544 --width 960 --num_frames 1000 --distractors None --data_dir /isaac-sim/palletjack_sdg/palletjack_data/no_distractors
17 |
18 |
--------------------------------------------------------------------------------
/palletjack_sdg/standalone_palletjack_sdg.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
2 | #
3 | # SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
4 | # SPDX-License-Identifier: MIT
5 |
6 | # Permission is hereby granted, free of charge, to any person obtaining a
7 | # copy of this software and associated documentation files (the "Software"),
8 | # to deal in the Software without restriction, including without limitation
9 | # the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 | # and/or sell copies of the Software, and to permit persons to whom the
11 | # Software is furnished to do so, subject to the following conditions:
12 |
13 | # The above copyright notice and this permission notice shall be included in
14 | # all copies or substantial portions of the Software.
15 |
16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 | # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 | # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 | # DEALINGS IN THE SOFTWARE.
23 |
24 | from omni.isaac.kit import SimulationApp
25 | import os
26 | import argparse
27 |
28 | parser = argparse.ArgumentParser("Dataset generator")
29 | parser.add_argument("--headless", type=bool, default=False, help="Launch script headless, default is False")
30 | parser.add_argument("--height", type=int, default=544, help="Height of image")
31 | parser.add_argument("--width", type=int, default=960, help="Width of image")
32 | parser.add_argument("--num_frames", type=int, default=1000, help="Number of frames to record")
33 | parser.add_argument("--distractors", type=str, default="warehouse",
34 | help="Options are 'warehouse' (default), 'additional' or None")
35 | parser.add_argument("--data_dir", type=str, default=os.getcwd() + "/_palletjack_data",
36 | help="Location where data will be output")
37 |
38 | args, unknown_args = parser.parse_known_args()
39 |
40 | # This is the config used to launch simulation.
41 | CONFIG = {"renderer": "RayTracedLighting", "headless": args.headless,
42 | "width": args.width, "height": args.height, "num_frames": args.num_frames}
43 |
44 | simulation_app = SimulationApp(launch_config=CONFIG)
45 |
46 |
47 | ## This is the path which has the background scene in which objects will be added.
48 | ENV_URL = "/Isaac/Environments/Simple_Warehouse/warehouse.usd"
49 |
50 | import carb
51 | import omni
52 | import omni.usd
53 | from omni.isaac.core.utils.nucleus import get_assets_root_path
54 | from omni.isaac.core.utils.stage import get_current_stage, open_stage
55 | from pxr import Semantics
56 | import omni.replicator.core as rep
57 |
58 | from omni.isaac.core.utils.semantics import get_semantics
59 |
60 | # Increase subframes if shadows/ghosting appears of moving objects
61 | # See known issues: https://docs.omniverse.nvidia.com/prod_extensions/prod_extensions/ext_replicator.html#known-issues
62 | rep.settings.carb_settings("/omni/replicator/RTSubframes", 4)
63 |
64 |
65 | # This is the location of the palletjacks in the simready asset library
66 | PALLETJACKS = ["http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/DigitalTwin/Assets/Warehouse/Equipment/Pallet_Trucks/Scale_A/PalletTruckScale_A01_PR_NVD_01.usd",
67 | "http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/DigitalTwin/Assets/Warehouse/Equipment/Pallet_Trucks/Heavy_Duty_A/HeavyDutyPalletTruck_A01_PR_NVD_01.usd",
68 | "http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/DigitalTwin/Assets/Warehouse/Equipment/Pallet_Trucks/Low_Profile_A/LowProfilePalletTruck_A01_PR_NVD_01.usd"]
69 |
70 |
71 | # The warehouse distractors which will be added to the scene and randomized
72 | DISTRACTORS_WAREHOUSE = 2 * ["/Isaac/Environments/Simple_Warehouse/Props/S_TrafficCone.usd",
73 | "/Isaac/Environments/Simple_Warehouse/Props/S_WetFloorSign.usd",
74 | "/Isaac/Environments/Simple_Warehouse/Props/SM_BarelPlastic_A_01.usd",
75 | "/Isaac/Environments/Simple_Warehouse/Props/SM_BarelPlastic_A_02.usd",
76 | "/Isaac/Environments/Simple_Warehouse/Props/SM_BarelPlastic_A_03.usd",
77 | "/Isaac/Environments/Simple_Warehouse/Props/SM_BarelPlastic_B_01.usd",
78 | "/Isaac/Environments/Simple_Warehouse/Props/SM_BarelPlastic_B_01.usd",
79 | "/Isaac/Environments/Simple_Warehouse/Props/SM_BarelPlastic_B_03.usd",
80 | "/Isaac/Environments/Simple_Warehouse/Props/SM_BarelPlastic_C_02.usd",
81 | "/Isaac/Environments/Simple_Warehouse/Props/SM_BottlePlasticA_02.usd",
82 | "/Isaac/Environments/Simple_Warehouse/Props/SM_BottlePlasticB_01.usd",
83 | "/Isaac/Environments/Simple_Warehouse/Props/SM_BottlePlasticA_02.usd",
84 | "/Isaac/Environments/Simple_Warehouse/Props/SM_BottlePlasticA_02.usd",
85 | "/Isaac/Environments/Simple_Warehouse/Props/SM_BottlePlasticD_01.usd",
86 | "/Isaac/Environments/Simple_Warehouse/Props/SM_BottlePlasticE_01.usd",
87 | "/Isaac/Environments/Simple_Warehouse/Props/SM_BucketPlastic_B.usd",
88 | "/Isaac/Environments/Simple_Warehouse/Props/SM_CardBoxB_01_1262.usd",
89 | "/Isaac/Environments/Simple_Warehouse/Props/SM_CardBoxB_01_1268.usd",
90 | "/Isaac/Environments/Simple_Warehouse/Props/SM_CardBoxB_01_1482.usd",
91 | "/Isaac/Environments/Simple_Warehouse/Props/SM_CardBoxB_01_1683.usd",
92 | "/Isaac/Environments/Simple_Warehouse/Props/SM_CardBoxB_01_291.usd",
93 | "/Isaac/Environments/Simple_Warehouse/Props/SM_CardBoxD_01_1454.usd",
94 | "/Isaac/Environments/Simple_Warehouse/Props/SM_CardBoxD_01_1513.usd",
95 | "/Isaac/Environments/Simple_Warehouse/Props/SM_CratePlastic_A_04.usd",
96 | "/Isaac/Environments/Simple_Warehouse/Props/SM_CratePlastic_B_03.usd",
97 | "/Isaac/Environments/Simple_Warehouse/Props/SM_CratePlastic_B_05.usd",
98 | "/Isaac/Environments/Simple_Warehouse/Props/SM_CratePlastic_C_02.usd",
99 | "/Isaac/Environments/Simple_Warehouse/Props/SM_CratePlastic_E_02.usd",
100 | "/Isaac/Environments/Simple_Warehouse/Props/SM_PushcartA_02.usd",
101 | "/Isaac/Environments/Simple_Warehouse/Props/SM_RackPile_04.usd",
102 | "/Isaac/Environments/Simple_Warehouse/Props/SM_RackPile_03.usd"]
103 |
104 |
105 | ## Additional distractors which can be added to the scene
106 | DISTRACTORS_ADDITIONAL = ["/Isaac/Environments/Hospital/Props/Pharmacy_Low.usd",
107 | "/Isaac/Environments/Hospital/Props/SM_BedSideTable_01b.usd",
108 | "/Isaac/Environments/Hospital/Props/SM_BooksSet_26.usd",
109 | "/Isaac/Environments/Hospital/Props/SM_BottleB.usd",
110 | "/Isaac/Environments/Hospital/Props/SM_BottleA.usd",
111 | "/Isaac/Environments/Hospital/Props/SM_BottleC.usd",
112 | "/Isaac/Environments/Hospital/Props/SM_Cart_01a.usd",
113 | "/Isaac/Environments/Hospital/Props/SM_Chair_02a.usd",
114 | "/Isaac/Environments/Hospital/Props/SM_Chair_01a.usd",
115 | "/Isaac/Environments/Hospital/Props/SM_Computer_02b.usd",
116 | "/Isaac/Environments/Hospital/Props/SM_Desk_04a.usd",
117 | "/Isaac/Environments/Hospital/Props/SM_DisposalStand_02.usd",
118 | "/Isaac/Environments/Hospital/Props/SM_FirstAidKit_01a.usd",
119 | "/Isaac/Environments/Hospital/Props/SM_GasCart_01c.usd",
120 | "/Isaac/Environments/Hospital/Props/SM_Gurney_01b.usd",
121 | "/Isaac/Environments/Hospital/Props/SM_HospitalBed_01b.usd",
122 | "/Isaac/Environments/Hospital/Props/SM_MedicalBag_01a.usd",
123 | "/Isaac/Environments/Hospital/Props/SM_Mirror.usd",
124 | "/Isaac/Environments/Hospital/Props/SM_MopSet_01b.usd",
125 | "/Isaac/Environments/Hospital/Props/SM_SideTable_02a.usd",
126 | "/Isaac/Environments/Hospital/Props/SM_SupplyCabinet_01c.usd",
127 | "/Isaac/Environments/Hospital/Props/SM_SupplyCart_01e.usd",
128 | "/Isaac/Environments/Hospital/Props/SM_TrashCan.usd",
129 | "/Isaac/Environments/Hospital/Props/SM_Washbasin.usd",
130 | "/Isaac/Environments/Hospital/Props/SM_WheelChair_01a.usd",
131 | "/Isaac/Environments/Office/Props/SM_WaterCooler.usd",
132 | "/Isaac/Environments/Office/Props/SM_TV.usd",
133 | "/Isaac/Environments/Office/Props/SM_TableC.usd",
134 | "/Isaac/Environments/Office/Props/SM_Recliner.usd",
135 | "/Isaac/Environments/Office/Props/SM_Personenleitsystem_Red1m.usd",
136 | "/Isaac/Environments/Office/Props/SM_Lamp02_162.usd",
137 | "/Isaac/Environments/Office/Props/SM_Lamp02.usd",
138 | "/Isaac/Environments/Office/Props/SM_HandDryer.usd",
139 | "/Isaac/Environments/Office/Props/SM_Extinguisher.usd"]
140 |
141 |
142 | # The textures which will be randomized for the wall and floor
143 | TEXTURES = ["/Isaac/Materials/Textures/Patterns/nv_asphalt_yellow_weathered.jpg",
144 | "/Isaac/Materials/Textures/Patterns/nv_tile_hexagonal_green_white.jpg",
145 | "/Isaac/Materials/Textures/Patterns/nv_rubber_woven_charcoal.jpg",
146 | "/Isaac/Materials/Textures/Patterns/nv_granite_tile.jpg",
147 | "/Isaac/Materials/Textures/Patterns/nv_tile_square_green.jpg",
148 | "/Isaac/Materials/Textures/Patterns/nv_marble.jpg",
149 | "/Isaac/Materials/Textures/Patterns/nv_brick_reclaimed.jpg",
150 | "/Isaac/Materials/Textures/Patterns/nv_concrete_aged_with_lines.jpg",
151 | "/Isaac/Materials/Textures/Patterns/nv_wooden_wall.jpg",
152 | "/Isaac/Materials/Textures/Patterns/nv_stone_painted_grey.jpg",
153 | "/Isaac/Materials/Textures/Patterns/nv_wood_shingles_brown.jpg",
154 | "/Isaac/Materials/Textures/Patterns/nv_tile_hexagonal_various.jpg",
155 | "/Isaac/Materials/Textures/Patterns/nv_carpet_abstract_pattern.jpg",
156 | "/Isaac/Materials/Textures/Patterns/nv_wood_siding_weathered_green.jpg",
157 | "/Isaac/Materials/Textures/Patterns/nv_animalfur_pattern_greys.jpg",
158 | "/Isaac/Materials/Textures/Patterns/nv_artificialgrass_green.jpg",
159 | "/Isaac/Materials/Textures/Patterns/nv_bamboo_desktop.jpg",
160 | "/Isaac/Materials/Textures/Patterns/nv_brick_reclaimed.jpg",
161 | "/Isaac/Materials/Textures/Patterns/nv_brick_red_stacked.jpg",
162 | "/Isaac/Materials/Textures/Patterns/nv_fireplace_wall.jpg",
163 | "/Isaac/Materials/Textures/Patterns/nv_fabric_square_grid.jpg",
164 | "/Isaac/Materials/Textures/Patterns/nv_granite_tile.jpg",
165 | "/Isaac/Materials/Textures/Patterns/nv_marble.jpg",
166 | "/Isaac/Materials/Textures/Patterns/nv_gravel_grey_leaves.jpg",
167 | "/Isaac/Materials/Textures/Patterns/nv_plastic_blue.jpg",
168 | "/Isaac/Materials/Textures/Patterns/nv_stone_red_hatch.jpg",
169 | "/Isaac/Materials/Textures/Patterns/nv_stucco_red_painted.jpg",
170 | "/Isaac/Materials/Textures/Patterns/nv_rubber_woven_charcoal.jpg",
171 | "/Isaac/Materials/Textures/Patterns/nv_stucco_smooth_blue.jpg",
172 | "/Isaac/Materials/Textures/Patterns/nv_wood_shingles_brown.jpg",
173 | "/Isaac/Materials/Textures/Patterns/nv_wooden_wall.jpg"]
174 |
175 |
176 | def update_semantics(stage, keep_semantics=[]):
177 | """ Remove semantics from the stage except for keep_semantic classes"""
178 | for prim in stage.Traverse():
179 | if prim.HasAPI(Semantics.SemanticsAPI):
180 | processed_instances = set()
181 | for property in prim.GetProperties():
182 | is_semantic = Semantics.SemanticsAPI.IsSemanticsAPIPath(property.GetPath())
183 | if is_semantic:
184 | instance_name = property.SplitName()[1]
185 | if instance_name in processed_instances:
186 | # Skip repeated instance, instances are iterated twice due to their two semantic properties (class, data)
187 | continue
188 |
189 | processed_instances.add(instance_name)
190 | sem = Semantics.SemanticsAPI.Get(prim, instance_name)
191 | type_attr = sem.GetSemanticTypeAttr()
192 | data_attr = sem.GetSemanticDataAttr()
193 |
194 |
195 | for semantic_class in keep_semantics:
196 | # Check for our data classes needed for the model
197 | if data_attr.Get() == semantic_class:
198 | continue
199 | else:
200 | # remove semantics of all other prims
201 | prim.RemoveProperty(type_attr.GetName())
202 | prim.RemoveProperty(data_attr.GetName())
203 | prim.RemoveAPI(Semantics.SemanticsAPI, instance_name)
204 |
205 |
206 | # needed for loading textures correctly
207 | def prefix_with_isaac_asset_server(relative_path):
208 | assets_root_path = get_assets_root_path()
209 | if assets_root_path is None:
210 | raise Exception("Nucleus server not found, could not access Isaac Sim assets folder")
211 | return assets_root_path + relative_path
212 |
213 |
214 | def full_distractors_list(distractor_type="warehouse"):
215 | """Distractor type allowed are warehouse, additional or None. They load corresponding objects and add
216 | them to the scene for DR"""
217 | full_dist_list = []
218 |
219 | if distractor_type == "warehouse":
220 | for distractor in DISTRACTORS_WAREHOUSE:
221 | full_dist_list.append(prefix_with_isaac_asset_server(distractor))
222 | elif distractor_type == "additional":
223 | for distractor in DISTRACTORS_ADDITIONAL:
224 | full_dist_list.append(prefix_with_isaac_asset_server(distractor))
225 | else:
226 | print("No Distractors being added to the current scene for SDG")
227 |
228 | return full_dist_list
229 |
230 |
231 | def full_textures_list():
232 | full_tex_list = []
233 | for texture in TEXTURES:
234 | full_tex_list.append(prefix_with_isaac_asset_server(texture))
235 |
236 | return full_tex_list
237 |
238 |
239 | def add_palletjacks():
240 | rep_obj_list = [rep.create.from_usd(palletjack_path, semantics=[("class", "palletjack")], count=2) for palletjack_path in PALLETJACKS]
241 | rep_palletjack_group = rep.create.group(rep_obj_list)
242 | return rep_palletjack_group
243 |
244 |
245 | def add_distractors(distractor_type="warehouse"):
246 | full_distractors = full_distractors_list(distractor_type)
247 | distractors = [rep.create.from_usd(distractor_path, count=1) for distractor_path in full_distractors]
248 | distractor_group = rep.create.group(distractors)
249 | return distractor_group
250 |
251 |
252 | # This will handle replicator
253 | def run_orchestrator():
254 |
255 | rep.orchestrator.run()
256 |
257 | # Wait until started
258 | while not rep.orchestrator.get_is_started():
259 | simulation_app.update()
260 |
261 | # Wait until stopped
262 | while rep.orchestrator.get_is_started():
263 | simulation_app.update()
264 |
265 | rep.BackendDispatch.wait_until_done()
266 | rep.orchestrator.stop()
267 |
268 |
269 | def main():
270 | # Open the environment in a new stage
271 | print(f"Loading Stage {ENV_URL}")
272 | open_stage(prefix_with_isaac_asset_server(ENV_URL))
273 | stage = get_current_stage()
274 |
275 | # Run some app updates to make sure things are properly loaded
276 | for i in range(100):
277 | if i % 10 == 0:
278 | print(f"App uppdate {i}..")
279 | simulation_app.update()
280 |
281 |
282 | textures = full_textures_list()
283 | rep_palletjack_group = add_palletjacks()
284 | rep_distractor_group = add_distractors(distractor_type=args.distractors)
285 |
286 | # We only need labels for the palletjack objects
287 | update_semantics(stage=stage, keep_semantics=["palletjack"])
288 |
289 | # Create camera with Replicator API for gathering data
290 | cam = rep.create.camera(clipping_range=(0.1, 1000000))
291 |
292 | # trigger replicator pipeline
293 | with rep.trigger.on_frame(num_frames=CONFIG["num_frames"]):
294 |
295 | # Move the camera around in the scene, focus on the center of warehouse
296 | with cam:
297 | rep.modify.pose(position=rep.distribution.uniform((-9.2, -11.8, 0.4), (7.2, 15.8, 4)),
298 | look_at=(0, 0, 0))
299 |
300 | # Get the Palletjack body mesh and modify its color
301 | with rep.get.prims(path_pattern="SteerAxles"):
302 | rep.randomizer.color(colors=rep.distribution.uniform((0, 0, 0), (1, 1, 1)))
303 |
304 | # Randomize the pose of all the added palletjacks
305 | with rep_palletjack_group:
306 | rep.modify.pose(position=rep.distribution.uniform((-6, -6, 0), (6, 12, 0)),
307 | rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 360)),
308 | scale=rep.distribution.uniform((0.01, 0.01, 0.01), (0.01, 0.01, 0.01)))
309 |
310 | # Modify the pose of all the distractors in the scene
311 | with rep_distractor_group:
312 | rep.modify.pose(position=rep.distribution.uniform((-6, -6, 0), (6, 12, 0)),
313 | rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 360)),
314 | scale=rep.distribution.uniform(1, 1.5))
315 |
316 | # Randomize the lighting of the scene
317 | with rep.get.prims(path_pattern="RectLight"):
318 | rep.modify.attribute("color", rep.distribution.uniform((0, 0, 0), (1, 1, 1)))
319 | rep.modify.attribute("intensity", rep.distribution.normal(100000.0, 600000.0))
320 | rep.modify.visibility(rep.distribution.choice([True, False, False, False, False, False, False]))
321 |
322 | # select floor material
323 | random_mat_floor = rep.create.material_omnipbr(diffuse_texture=rep.distribution.choice(textures),
324 | roughness=rep.distribution.uniform(0, 1),
325 | metallic=rep.distribution.choice([0, 1]),
326 | emissive_texture=rep.distribution.choice(textures),
327 | emissive_intensity=rep.distribution.uniform(0, 1000),)
328 |
329 |
330 | with rep.get.prims(path_pattern="SM_Floor"):
331 | rep.randomizer.materials(random_mat_floor)
332 |
333 | # select random wall material
334 | random_mat_wall = rep.create.material_omnipbr(diffuse_texture=rep.distribution.choice(textures),
335 | roughness=rep.distribution.uniform(0, 1),
336 | metallic=rep.distribution.choice([0, 1]),
337 | emissive_texture=rep.distribution.choice(textures),
338 | emissive_intensity=rep.distribution.uniform(0, 1000),)
339 |
340 |
341 | with rep.get.prims(path_pattern="SM_Wall"):
342 | rep.randomizer.materials(random_mat_wall)
343 |
344 |
345 | # Set up the writer
346 | writer = rep.WriterRegistry.get("KittiWriter")
347 |
348 | # output directory of writer
349 | output_directory = args.data_dir
350 | print("Outputting data to ", output_directory)
351 |
352 | # use writer for bounding boxes, rgb and segmentation
353 | writer.initialize(output_dir=output_directory,
354 | omit_semantic_type=True,)
355 |
356 |
357 | # attach camera render products to wrieter so that data is outputted
358 | RESOLUTION = (CONFIG["width"], CONFIG["height"])
359 | render_product = rep.create.render_product(cam, RESOLUTION)
360 | writer.attach(render_product)
361 |
362 | # run rep pipeline
363 | run_orchestrator()
364 | simulation_app.update()
365 |
366 |
367 |
368 | if __name__ == "__main__":
369 | try:
370 | main()
371 | except Exception as e:
372 | carb.log_error(f"Exception: {e}")
373 | import traceback
374 |
375 | traceback.print_exc()
376 | finally:
377 | simulation_app.close()
378 |
--------------------------------------------------------------------------------