MCPcopy Index your code
hub / github.com/PJLab-ADG/neuralsim

github.com/PJLab-ADG/neuralsim @v0.6.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.6.0 ↗ · + Follow
743 symbols 3,105 edges 99 files 137 documented · 18%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

neuralsim

3D surface reconstruction and simulation based on 3D neural rendering.

This repository primarily addresses two topics:

  • Efficient and detailed reconstruction of implicit surfaces across different scenarios.
  • Including object-centric / street-view, indoor / outdoor, large-scale (WIP) and multi-object (WIP) datasets.
  • Highlighted implementations include neus_in_10_minutes, neus_in_10_minutes#indoor and streetsurf.
  • Multi-object implicit surface reconstruction, manipulation, and multi-modal sensor simulation.
  • With particular focus on autonomous driving datasets.

TOC

Implicit surface is all you need !

Single-object / multi-object / indoor / outdoor / large-scale surface reconstruction and multi-modal sensor simulation

https://github.com/PJLab-ADG/neuralsim/assets/25529198/ce6ec6fc-2d0e-4c2b-9d91-d1b992d13ff4

https://github.com/PJLab-ADG/neuralsim/assets/25529198/32d6fe6f-39a1-403d-8b12-16d26e092375

https://github.com/PJLab-ADG/neuralsim/assets/25529198/29fff4d9-c70d-4097-8f12-0bc307d339f3

:rocket: Object surface reconstruction in minutes !

Input: posed images without mask

Get started: neus_in_10_minutes

Credits: Jianfei Guo

teaser_training_bmvs_gundam | :rocket: Outdoor surface reconstruction in minutes !

Input: posed images without mask

Get started: neus_in_10_minutes

Credits: Jianfei Guo

teaser_training_bmvs_village_house | | :rocket: Indoor surface reconstruction in minutes !

Input: posed images, monocular cues

Get started: neus_in_10_minutes#indoor

Credits: Jianfei Guo

| :car: Categorical surface reconstruction in the wild !

Input: multi-instance multi-view categorical images

[To be released 2023.09]

Credits: Qiusheng Huang, Jianfei Guo, Xinyang Li

| | :motorway: Street-view surface reconstruction in 2 hours !

Input: posed images, monocular cues (and optional LiDAR)

Get started: streetsurf

Credits: Jianfei Guo, Nianchen Deng

(Refresh if video won't play) | :motorway: Street-view multi-modal sensor simulation !

Using reconstructed asset-bank

Get started: streetsurf#lidarsim

Credits: Jianfei Guo, Xinyu Cai, Nianchen Deng

(Refresh if video won't play) | | :motorway: Street-view multi-object surfaces reconstruction in hours !

Input: posed images, LiDAR, 3D tracklets

[To be released 2023.09]

Credits: Jianfei Guo, Nianchen Deng

(Refresh if video won't play) | :motorway: Street-view scenario editing !

Using reconstructed asset-bank

[To be released 2023.09]

Credits: Jianfei Guo, Nianchen Deng (Refresh if video won't play) | | :cityscape: Large-scale multi-view surface reconstruction ... (WIP) | :motorway: Street-view light editing ... (WIP) |

Ecosystem

%%{init: {'theme': 'neutral', "flowchart" : { "curve" : "basis" } } }%%
graph LR;
    0("fa:fa-wrench <b>Basic models & operators</b>

(e.g. LoTD & pack_ops)

<a href='https://github.com/pjlab-ADG/nr3d_lib' target='_blank'>nr3d_lib</a>")
    A("fa:fa-road <b>Single scene</b>

[paper] StreetSurf

[repo] <a href='https://github.com/pjlab-ADG/neuralsim' target='_blank'>neuralsim</a>/code_single")
    B("fa:fa-car <b>Categorical objects</b>

[paper] CatRecon

[repo] <a href='https://github.com/pjlab-ADG/neuralgen' target='_blank'>neuralgen</a>")
    C("fa:fa-globe <b>Large scale scene</b>

[repo] neuralsim/code_large

[release date] Sept. 2023")
    D("fa:fa-sitemap <b>Multi-object scene</b>

[repo] neuralsim/code_multi

[release date] Sept. 2023")
    B --> D
    A --> D
    A --> C
    C --> D

Pull requests and collaborations are warmly welcomed :hugs:! Please follow our code style if you want to make any contribution.

Feel free to open an issue or contact Jianfei Guo (guojianfei@pjlab.org.cn) or Nianchen Deng (dengnianchen@pjlab.org.cn) if you have any questions or proposals.

Highlighted implementations

Methods :rocket: Get started Official / Un-official Notes, major difference from paper, etc.
StreetSurf readme Official - LiDAR loss improved
NeuS in minutes readme Un-official - support object-centric datasets as well as indoor datasets
  • fast and stable convergence without needing mask

  • support using NGP / LoTD or MLPs as fg&bg representations

  • large pixel batch size (4096) & pixel error maps | | NGP with LiDAR | readme | Un-official | - using Urban-NeRF's LiDAR loss | | Multi-object reconstruction with unisim's CNN decoder | [WIP] | Un-official

:warning: Largely different | - :warning: only the CNN decoder part is similar to unisim

  • volumetric ray buffer mering, instead of feature grid spatial merging

  • our version of foreground hypernetworks and background model StreetSurf (the details of theirs are not released up to now) |

Highlights

:hammer_and_wrench: Multi-object volume rendering

Code: app/renderers/general_volume_renderer.py

> Efficient and universal

We provide a universal implementation of multi-object volume rendering that supports any kind of methods built for volume rendering, as long as a model can be queried with rays and can output opacity_alpha, depth samples t, and other optional fields like rgb, nablas, features, etc.

This renderer is efficient mainly due to:

  • Frustum culling
  • Occupancy-grid-based single / batched ray marching and pack merging implemented with pack_ops
  • (optional) Batched / indiced inference of LoTD

The figure below depicts the idea of the whole rendering process.

multi_object_volume_render

> Scene graph structure

Code: app/resources/scenes.py app/resources/nodes.py

To streamline the organization of assets and transformations, we adopt the concept of generic scene graphs used in modern graphics engines like magnum.

Any entity that possesses a pose or position is considered a node. Certain nodes are equipped with special functionalities, such as camera operations or drawable models (i.e. renderable assets in AssetBank).

scene_graph

Real-data scene graph Real-data frustum culling
vis_scene_graph vis_frustum_culling

:bank: Editable assetbank

Code: code_multi/tools/manipulate.py (WIP)

Given that different objects are represented by unique networks (for categorical or shared models, they have unique latents or embeddings), it's possible to explicitly add, remove or modify the reconstructed assets in a scene.

We offer a toolkit for performing such scene manipulations. Some of the intriguing edits are showcased below.

:dancer: Let them dance ! :twisted_rightwards_arrows: Multi-verse :art: Change their style !
(Refresh if video won't play) (Refresh if video won't play) (Refresh if video won't play)

Credits to Qiusheng Huang and Xinyang Li. |

Please note, this toolkit is currently in its early development stages and only basic edits have been released. Stay tuned for updates, and contributions are always welcome :)

:camera: Multi-modal sensor simulation

> LiDARs

Code: app/resources/observers/lidars.py

Get started:

Credits to Xinyu Cai's team work, we now support simulation of various real-world LiDAR models.

The volume rendering process is guided by our reconstructed implicit surface scene geometry, which guarantees accurate depths. More details on this are in our StreetSurf paper section 5.1.

> Cameras

Code: app/resources/observers/cameras.py

We now support pinhole camera, standard OpenCV camera models with distortion, and an experimental fisheye camera model.

Usage

Installation

First, clone with submodules:

git clone https://github.com/pjlab-ADG/neuralsim --recurse-submodules -j8 ...

Then, cd into nr3d_lib and refer to nr3d_lib/README.md for the following steps.

code_single Single scene

  • Object-centric scenarios (indoor / outdoor, with / without mask)
  • Street-view or autonomous driving scenarios

Please refer to code_single/README.md

code_multi Multi-object scene

(WIP)

code_large Large-scale scene

(WIP)

Roadmap & TODOs

  • [ ] Unofficial implementation of unisim
  • [ ] Release our methods on multi-object reconstruction for autonomous driving
  • [ ] Release our methods on large-scale representation and neus
  • [ ] Factorization of embient light and object textures
  • [ ]

Core symbols most depended-on inside this repo

cpu
called by 98
app/resources/scenes.py
update
called by 87
app/resources/observers/cameras.py
to
called by 73
app/resources/scenes.py
device
called by 60
dataio/dataloader/image_loader.py
sum
called by 57
app/renderers/single_volume_renderer.py
frozen_at
called by 31
app/resources/scenes.py
fn
called by 23
app/loss/eikonal.py
get_drawable_groups_by_class_name
called by 19
app/resources/scenes.py

Shape

Method 489
Function 163
Class 89
Route 2

Languages

Python100%

Modules by API surface

app/resources/scenes.py49 symbols
app/resources/observers/lidars.py39 symbols
dataio/autonomous_driving/waymo/waymo_dataset.py37 symbols
dataio/dataloader/base.py33 symbols
app/resources/observers/cameras.py28 symbols
app/resources/nodes.py24 symbols
app/resources/asset_bank.py22 symbols
dataio/autonomous_driving/custom/custom_autodrive_dataset.py21 symbols
app/models/single/nerf.py20 symbols
code_single/tools/inspect_rendering.py19 symbols
app/models/single/neus.py19 symbols
app/models/base.py19 symbols

For agents

$ claude mcp add neuralsim \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact