Home

Awesome

Panoptic 3D Scene Reconstruction from a Single RGB Image

Project Page | Paper | Arxiv | Video

Panoptic 3D Scene Reconstruction from a Single RGB Image <br /> Manuel Dahnert, Ji Hou, Matthias Nießner, Angela Dai <br /> Neural Information Processing Systems (NeurIPS) - 2021

If you find this work useful for your research, please consider citing

@inproceedings{dahnert2021panoptic,
  title={Panoptic 3D Scene Reconstruction From a Single RGB Image},
  author={Dahnert, Manuel and Hou, Ji and Nie{\ss}ner, Matthias and Dai, Angela},
  booktitle={Thirty-Fifth Conference on Neural Information Processing Systems},
  year={2021}
}
<p align="center"> <img width="100%" src="images/teaser-loop.gif"/> </p>

Abstract

Understanding 3D scenes from a single image is fundamental to a wide variety of tasks, such as for robotics, motion planning, or augmented reality. Existing works in 3D perception from a single RGB image tend to focus on geometric reconstruction only, or geometric reconstruction with semantic segmentation or instance segmentation. Inspired by 2D panoptic segmentation, we propose to unify the tasks of geometric reconstruction, 3D semantic segmentation, and 3D instance segmentation into the task of panoptic 3D scene reconstruction - from a single RGB image, predicting the complete geometric reconstruction of the scene in the camera frustum of the image, along with semantic and instance segmentations. We thus propose a new approach for holistic 3D scene understanding from a single RGB image which learns to lift and propagate 2D features from an input image to a 3D volumetric scene representation. We demonstrate that this holistic view of joint scene reconstruction, semantic, and instance segmentation is beneficial over treating the tasks independently, thus outperforming alternative approaches.

Environment

The code was tested with the following configuration:

Installation

# Basic conda enviromnent: Creates new conda environment `panoptic`
conda env create --file environment.yaml
conda activate panoptic

MaskRCNN Benchmark

Follow the official instructions to install the maskrcnn-benchmark repo.

Minkowski Engine (fork, custom)

Follow the instructions to compile our forked Minkowski Engine version from source.

Compute library

Finally, compile this library.

# Install library
cd lib/csrc/
python setup.py install

Inference

To run the method on a 3D-Front sample run python tools/test_net_single_image.py with the pre-trained checkpoint (see table below).

python tools/test_nest_single_image.py -i <path_to_input_image> -o <output_path>

Datasets

3D-FRONT [1]

The 3D-FRONT indoor datasets consists of 6,813 furnished apartments.
We use Blender-Proc [2] to render photo-realistic images from individual rooms. We use version from 2020-06-14 of the data.

<p align="center"> <img width="100%" src="images/front3d_samples.jpg"/> </p>

Download:

We provide the preprocessed 3D-Front data, please see the following table for links to the main zips.
Extract the downloaded data into data/front3d/ or adjust the root data path lib/config/paths_catalog.py.
By downloading our derived work from the original 3D-Front you accept their original Terms of Use.

FileDescriptionNum. SamplesSizeVersionLink
front3d.zipContaining all files for all 2D-3D pairs, which were used for this project: color, depth, 2D & 3D segmentation, 3D geometry & weighting masks.134,389144G2022-04-28link
panoptic-front3d.pthPre-trained weights for 3D-Front data.1106M2022-04-28link
panoptic-front3d-mask_depth_r18.pthPre-trained weights Depth + Mask for 3D-Front 2D data.169M2022-08-23link
front3d-2d.zipContaining only RGB, depth, 2D segmentation (semantic & instances) with 11-class set.134,38939G2022-04-28link
front3d-3d_geometry.zipContaining only 3D geometry as truncated (unsigned) distance field at 3cm voxel resolution.134,389100G2022-04-28link
front3d-3d_segmentation.zipContaining only 3D segmentations (semantic & instance) with 11-class set.134,3892G2022-04-28link
front3d-3d_weighting.zipContaining only precomputed 3D weighting masks.134,3894G2022-04-28link
front3d-2d_normals.zipAdditional: Containing the normal maps for each each sample.134,3892022-04-28
front3d-camposes.zipAdditional: Containing the camera information for each sample (camera pose, intrinsic, assigned room id) and room mapping.134,389100M2022-04-28link
front3d-additional_samples.zipAdditional: Containing additional samples, which were excluded, e.g. due to inconsistent number of instances between 2D image and 3D frustum. (May not include all files per sample)62,96386G2022-04-28link
front3d-room_meshes.zipAdditional: Preprocessed room meshes, which was used as replacement for the original room geometry (walls, floor, ceiling) to have closed rooms.6723 scenes, 49142 rooms in total406M2022-04-28link
front3d-tos.pdfThe official 3D-Front Terms of Use.160KB2020-06-18link

Modifications:

<p align="center"> <img width="100%" src="images/front3d_room_simplification.jpg"/> </p>

Structure

<scene_id>/            
    ├── rgb_<frame_id>.png                  # Color image: 320x240x3
    ├── depth_<frame_id>.exr                # Depth image: 320x240x1
    ├── segmap_<frame_id>.mapped.npz        # 2D Segmentation: 320x240x2, with 0: pre-mapped semantics, 1: instances
    ├── geometry_<frame_id>.npz             # 3D Geometry: 256x256x256x1, truncated, (unsigned) distance field at 3cm voxel resolution and 12 voxel truncation.
    ├── segmentation_<frame_id>.mapped.npz  # 3D Segmentation: 256x256x256x2, with 0: pre-mapped semantics & instances
    ├── weighting_<frame_id>.mapped.npz     # 3D Weighting mask: 256x256x256x1
    ...

In total, we generate 197,352 frames of which 134,389 were used for this project. We filter out frames, which have an inconsistent number of 2D and 3D instances.

For the 3D generation we use a custom C++ pipeline which loads the sampled camera poses, room layout mesh, and the scene objects. The geometry is cropped to the camera frustum, such that only geometry within the frustum contributes to the DF calculation. It generates 3D unsigned distance fields at 3cm resolution together with 3D semantic and instance segmentation.

Change Log

References

  1. Fu et al. - 3d-Front: 3d Furnished Rooms with Layouts and Semantics
  2. Denninger et al. - BlenderProc