Omni3D & Cube R-CNN
Omni3D: A Large Benchmark and Model for 3D Object Detection in the Wild
Garrick Brazil, Abhinav Kumar, Julian Straub, Nikhila Ravi, Justin Johnson, Georgia Gkioxari
[Project Page] [arXiv] [BibTeX]
|
Zero-shot (+ tracking) on Project Aria data
|
Table of Contents:
Installation
# setup new evironment conda create -n cubercnn python=3.8 source activate cubercnn # main dependencies conda install -c fvcore -c iopath -c conda-forge -c pytorch3d -c pytorch fvcore iopath pytorch3d pytorch=1.8 torchvision=0.9.1 cudatoolkit=10.1 # OpenCV, COCO, detectron2 pip install cython opencv-python pip install 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI' python -m pip install detectron2 -f https://dl.fbaipublicfiles.com/detectron2/wheels/cu101/torch1.8/index.html # other dependencies conda install -c conda-forge scipy seaborn
For reference, we used cuda/10.1 and cudnn/v7.6.5.32 for our experiments. We expect that slight variations in versions are also compatible.
Demo
To run the Cube R-CNN demo on a folder of input images using our DLA34 model trained on the full Omni3D dataset,
# Download example COCO images sh demo/download_demo_COCO_images.sh # Run an example demo python demo/demo.py \ --config-file cubercnn://omni3d/cubercnn_DLA34_FPN.yaml \ --input-folder "datasets/coco_examples" \ --threshold 0.25 --display \ MODEL.WEIGHTS cubercnn://omni3d/cubercnn_DLA34_FPN.pth \ OUTPUT_DIR output/demo
See demo.py for more details. For example, if you know the camera intrinsics you may input them as arguments with the convention --focal-length <float> and --principal-point <float> <float>. See our MODEL_ZOO.md for more model checkpoints.
Omni3D Data
See DATA.md for instructions on how to download and set up images and annotations of our Omni3D benchmark for training and evaluating Cube R-CNN.
Training Cube R-CNN on Omni3D
We provide config files for trainin Cube R-CNN on
- Omni3D:
configs/Base_Omni3D.yaml - Omni3D indoor:
configs/Base_Omni3D_in.yaml - Omni3D outdoor:
configs/Base_Omni3D_out.yaml
We train on 48 GPUs using submitit which wraps the following training command,
python tools/train_net.py \ --config-file configs/Base_Omni3D.yaml \ OUTPUT_DIR output/omni3d_example_run
Note that our provided configs specify hyperparameters tuned for 48 GPUs. You could train on 1 GPU (though with no guarantee of reaching the final performance) as follows,
python tools/train_net.py \ --config-file configs/Base_Omni3D.yaml --num-gpus 1 \ SOLVER.IMS_PER_BATCH 4 SOLVER.BASE_LR 0.0025 \ SOLVER.MAX_ITER 5568000 SOLVER.STEPS (3340800, 4454400) \ SOLVER.WARMUP_ITERS 174000 TEST.EVAL_PERIOD 1392000 \ VIS_PERIOD 111360 OUTPUT_DIR output/omni3d_example_run
Tips for Tuning Hyperparameters
Our Omni3D configs are designed for multi-node training.
We follow a simple scaling rule for adjusting to different system configurations. We find that 16GB GPUs (e.g. V100s) can hold 4 images per batch when training with a DLA34 backbone. If

