Giter Club home page Giter Club logo

neuralrecon-w's Introduction

Neural 3D Reconstruction in the Wild


Neural 3D Reconstruction in the Wild
Jiaming Sun, Xi Chen, Qianqian Wang, Zhengqi Li, Hadar Averbuch-Elor, Xiaowei Zhou, Noah Snavely
SIGGRAPH 2022 (Conference Proceedings)

demo_vid

TODO List

  • Training (i.e., reconstruction) code.
  • Toolkit and pipeline to reproduce the evaluation results on the proposed Heritage-Recon dataset.
  • Config for reconstructing generic outdoor/indoor scenes.

Installation

conda env create -f environment.yaml
conda activate neuconw
scripts/download_sem_model.sh

Reproduce reconstruction results on Heritage-Recon

Dataset setup

Download the Heritage-Recon dataset and put it under data. You can also use gdown to download it in command line:

mkdir data && cd data
gdown --id 1eZvmk4GQkrRKUNZpagZEIY_z8Lsdw94v

Generate ray cache for all four scenes:

for SCENE_NAME in brandenburg_gate lincoln_memorial palacio_de_bellas_artes pantheon_exterior; do
  scripts/data_generation.sh data/heritage-recon/${SCENE_NAME}
done

Training

To train scenes in our Heritage-Recon dataset:

# Subsutitude `SCENE_NAME` with the scene you want to reconstruct.
scripts/train.sh $EXP_NAME config/train_${SCENE_NAME}.yaml $NUM_GPU $NUM_NODE

Evaluating

First, extracting mesh from a checkpoint you want to evaluate:

scripts/sdf_extract.sh $EXP_NAME config/train_${SCENE_NAME}.yaml $CKPT_PATH 10

The reconstructed meshes will be saved to PROJECT_PATH/results.

Then run the evaluation pipeline:

scripts/eval_pipeline.sh $SCENE_NAME $MESH_PATH

Evaluation results will be saved in the same folder with the evaluated mesh.

Reconstructing custom data

Data preparation

Automatic generation

The code takes a standard COLMAP workspace format as input, a script is provided for automatically convert a colmap workspace into our data format:

scripts/preprocess_data.sh

More instructions can be found in scripts/preprocess_data.sh

Manual selection

However, if you wish to select a better bounding box (i.e., reconstruction region) manually, do the following steps.

1. Generate semantic maps

Generate semantic maps:

python tools/prepare_data/prepare_semantic_maps.py --root_dir $WORKSPACE_PATH --gpu 0

2. Create scene metadata file

Create a file config.yaml into workspace to write metadata. The target scene needs to be normalized into a unit sphere, which require manual selection. One simple way is to use SFM key-points points from COLMAP to determine the origin and radius. Also, a bounding box is required, which can be set to [origin-raidus, origin+radius], or only the region you're interested in.

{
    name: brandenburg_gate, # scene name
    origin: [ 0.568699, -0.0935532, 6.28958 ], 
    radius: 4.6,
    eval_bbx: [[-14.95992661, -1.97035599, -16.59869957],[48.60944366, 30.66258621, 12.81980324]],
    voxel_size: 0.25,
    min_track_length: 10,
    # The following configuration is only used in evaluation, can be ignored for your own scene
    sfm2gt: [[1, 0, 0, 0],
            [ 0, 1, 0, 0],
            [ 0, 0, 1, 0],
            [ 0, 0, 0, 1]],
}

3. Generate cache

Run the following command with a WORKSPACE_PATH specified:

scripts/data_generation.sh $WORKSPACE_PATH

After completing above steps, whether automatically or manually, the COLMAP workspace should be looking like this;

└── brandenburg_gate
  └── brandenburg_gate.tsv
  ├── cache_sgs
    └── splits
        ├── rays1_meta_info.json
        ├── rgbs1_meta_info.json
        ├── split_0
            ├── rays1.h5
            └── rgbs1.h5
        ├── split_1
        ├──.....
  ├── config.yaml
  ├── dense
    └── sparse
        ├── cameras.bin
        ├── images.bin
        ├── points3D.bin
  └── semantic_maps
      ├── 99119670_397881696.jpg
      ├── 99128562_6434086647.jpg
      ├── 99250931_9123849334.jpg
      ├── 99388860_2887395078.jpg
      ├──.....

Training

Change DATASET.ROOT_DIR to COLMAP workspace path in config/train.yaml, and run:

scripts/train.sh $EXP_NAME config/train.yaml $NUM_GPU $NUM_NODE

Additionally, NEUCONW.SDF_CONFIG.inside_outside should be set to True if training an indoor scene (refer to config/train_indoor.yaml).

Extracting mesh

scripts/sdf_extract.sh $EXP_NAME config/train.yaml $CKPT_PATH $EVAL_LEVEL

The reconstructed meshes will be saved to PROJECT_PATH/results.

Citation

If you find this code useful for your research, please use the following BibTeX entry.

@inproceedings{sun2022neuconw,
  title={Neural {3D} Reconstruction in the Wild},
  author={Sun, Jiaming and Chen, Xi and Wang, Qianqian and Li, Zhengqi and Averbuch-Elor, Hadar and Zhou, Xiaowei and Snavely, Noah},
  booktitle={SIGGRAPH Conference Proceedings},
  year={2022}
}

Acknowledgement

Part of our code is derived from nerf_pl and NeuS, thanks to their authors for the great works.

neuralrecon-w's People

Contributors

burningdust21 avatar dawars avatar jiamingsuen avatar longruidong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

neuralrecon-w's Issues

ModuleNotFoundError: No module named 'kaolin' during generating ray cache

Hello,
I got ModuleNotFoundError during generating ray cache, and pip installed kaolin which is kaolin-0.0, but still happended this error,

So, please give me a suggestion about which version can be used.

In addition, the dependence did not marked the kaolin dependence, maybe which only used by the generation utility.

Regards

Welcome update to OpenMMLab 2.0

Welcome update to OpenMMLab 2.0

I am Vansin, the technical operator of OpenMMLab. In September of last year, we announced the release of OpenMMLab 2.0 at the World Artificial Intelligence Conference in Shanghai. We invite you to upgrade your algorithm library to OpenMMLab 2.0 using MMEngine, which can be used for both research and commercial purposes. If you have any questions, please feel free to join us on the OpenMMLab Discord at https://discord.gg/amFNsyUBvm or add me on WeChat (van-sin) and I will invite you to the OpenMMLab WeChat group.

Here are the OpenMMLab 2.0 repos branches:

OpenMMLab 1.0 branch OpenMMLab 2.0 branch
MMEngine 0.x
MMCV 1.x 2.x
MMDetection 0.x 、1.x、2.x 3.x
MMAction2 0.x 1.x
MMClassification 0.x 1.x
MMSegmentation 0.x 1.x
MMDetection3D 0.x 1.x
MMEditing 0.x 1.x
MMPose 0.x 1.x
MMDeploy 0.x 1.x
MMTracking 0.x 1.x
MMOCR 0.x 1.x
MMRazor 0.x 1.x
MMSelfSup 0.x 1.x
MMRotate 1.x 1.x
MMYOLO 0.x

Attention: please create a new virtual environment for OpenMMLab 2.0.

What does depth_percent mean?

As mentioned above. Such as
# hard code sfm depth padding scene_name = self.root_dir.rsplit('/')[-1] if scene_name == 'brandenburg_gate': sfm_path = '../neuralsfm' depth_percent = 0.2 elif scene_name == 'palacio_de_bellas_artes': sfm_path = '../neuralsfm' depth_percent = 0.4 elif scene_name in ['lincoln_memorial', 'pantheon_exterior']: depth_percent = 0.0
The depth_percent number is set by what?

Questions about create a config.yaml file

image
I have read your paper,got the information that you refined the 3D representation from neus.So could I just get the center,radius and bbox_max and min from "gen_cameras.py" in neus?It's like:
image
I guess you may have noticed that.

About detailed comparison to NeuS

Hi, many thanks for your excellent work and can wait to read your codes!
I have a question about the experiments in the paper. In the experiments, the compared nerf-like method is only NeRF-W. NeuS is not used for detailed comparison in Table 1 and Figure 7. In my opinion, NeRF-W is not directly proposed for surface reconstruction. If we extract the surface from NeRF-W, we need to set a threshold for the density, which may vary in different locations and scenes. This drawback will make it hard to extract a reasonable surface from NeRF-W. However, NeuS is directly for surface reconstruction because it estimates SDF. It shows very good results in tiny scenes. I think your pipeline is also based on NeuS. So could you provide more detailed comparison results with respect to NeuS? It would provide more evidence of your main contribution of the sampling strategy. Thank you!

Error

hello, I met a problem when i run the prepare_data_cache.sh and i set the img_scale to 2 , the problem is:
Traceback (most recent call last):
File "tools/prepare_data/prepare_data_cache.py", line 177, in
dataset = dataset_dictargs.dataset_name
File "/root/repo/huzijian/NeuralRecon-W/./datasets/phototourism.py", line 124, in init
self.read_meta()
File "/root/repo/huzijian/NeuralRecon-W/./datasets/phototourism.py", line 667, in read_meta
pad_ind = torch.floor((torch.rand(padding_length) * valid_num)).long()
RuntimeError: Trying to create tensor with negative dimension -2439: [-2439]

How to calculate AUC P/R/F1?

I'm trying to compare the results in the paper with my own but I get wildly different results for AUC values.

I'm using

from sklearn import metrics

metrics_json = json.loads((pred_dir/"eval_bg_reprojected.ply"/"metrics.json").read_text())
auc_precs = sklearn.metrics.auc(metrics_json["thresholds"], metrics_json["precs"])

For comparable precision values I get very different AUC precision values (BG scene):

28.6 vs 86.25 (mine)

the process of trainning stopped without error

When I typed the command scripts/train.sh test_sen4 config/train_pantheon_exterior.yaml 1 1
, the program stopped without error.

INFO - 2023-03-31 14:58:17,533 - rasterization - Cannot import nvdiffrast
INFO - 2023-03-31 14:58:18,155 - seed - Global seed set to 66
INFO - 2023-03-31 14:58:18,256 - trainer - GPU available: True, used: True
INFO - 2023-03-31 14:58:18,256 - trainer - TPU available: False, using: 0 TPU cores
INFO - 2023-03-31 14:58:18,256 - trainer - IPU available: False, using: 0 IPUs
2023-03-31 14:58:18.259 | WARNING  | datasets.data:setup:51 - Default process group has not been initialized, please make sure to call init_process_group. (set world_size=1 and rank=0)
2023-03-31 14:58:18.260 | INFO     | datasets.data:_setup_dataset:110 - [rank 0]: 64 npz(s) assigned. ['split_37' 'split_41' 'split_32' 'split_7' 'split_56' 'split_58'
 'split_13' 'split_0' 'split_39' 'split_44' 'split_49' 'split_62'
 'split_20' 'split_48' 'split_60' 'split_30' 'split_42' 'split_57'
 'split_47' 'split_22' 'split_16' 'split_40' 'split_31' 'split_50'
 'split_21' 'split_6' 'split_10' 'split_61' 'split_17' 'split_38'
 'split_8' 'split_36' 'split_55' 'split_1' 'split_3' 'split_15' 'split_25'
 'split_33' 'split_11' 'split_12' 'split_34' 'split_63' 'split_5'
 'split_29' 'split_53' 'split_43' 'split_2' 'split_14' 'split_19'
 'split_24' 'split_54' 'split_18' 'split_4' 'split_9' 'split_35'
 'split_59' 'split_52' 'split_51' 'split_26' 'split_28' 'split_27'
 'split_23' 'split_45' 'split_46']

Depth loss not mentioned in the paper and seems heuristic

In your paper Sect 3.2, it reads like you only applied three losses - mask, reg and mask. However when looking at the code, you seem to use GT depth to additionally supervise the training. The depth supervision is further set to True to brandenburg_gate.yaml and palacio_de_bellas_artes.yaml, but not lincoln_memorial.yaml and pantheon_exterior.yaml.

In your reported results, do you use GT depth supervision? If so, why is it True for two cases and False for others? Are there any reasons behind this kind of heuristics?

Image downscale failure in data generation

Thanks a lot for this excellent project!
I encountered a problem when conducting data setup with image downscale parameter > 1.
I guess there may be a bug in datasets/phototourism.py line 576 where the function get_colmap_depth() returns zero outputs (both depth & weight).

my data generation setup is as follows: (data_generation.sh)

#!/bin/bash
set -x
set -u
set -e

now=$(date +"%Y%m%d_%H%M%S")
echo "working directory is $(pwd)"
jobname="data-generation-$1-$now"
export CUDA_VISIBLE_DEVICES=4
dataset_name="phototourism"
cache_dir="cache_sgs"
root_dir=$1
min_observation=-1

if [ ! -f $root_dir/*.tsv ]; then
python tools/prepare_data/prepare_data_split.py
--root_dir $root_dir
--num_test 10
--min_observation $min_observation --roi_threshold 0 --static_threshold 0
fi
python tools/prepare_data/prepare_data_cache.py
--root_dir $root_dir
--dataset_name $dataset_name --cache_dir $cache_dir
--img_downscale 8
--semantic_map_path semantic_maps --split_to_chunks 64
2>&1|tee log/${jobname}.log

my output log:

Preparing cache for scale 8...
reading sfm result from sparse...
Note: training near far will generate from sparse voxel!!!!
Reading images.bin..
Reading cameras.bin..
Compute c2w poses..
Generating rays and rgbs..

0%| | 0/100040 [00:00<?, ?it/s]
11%|█▏ | 11423/100040 [00:00<00:00, 114219.22it/s]
23%|██▎ | 23138/100040 [00:00<00:00, 115935.24it/s]
35%|███▍ | 34792/100040 [00:00<00:00, 116205.60it/s]
46%|████▋ | 46515/100040 [00:00<00:00, 116608.39it/s]
58%|█████▊ | 58176/100040 [00:00<00:00, 116323.60it/s]
70%|██████▉ | 69809/100040 [00:00<00:00, 115938.68it/s]
82%|████████▏ | 81551/100040 [00:00<00:00, 116420.19it/s]
93%|█████████▎| 93248/100040 [00:00<00:00, 116593.45it/s]
100%|██████████| 100040/100040 [00:00<00:00, 116292.81it/s]
2022-08-01 19:07:19.068 | DEBUG | tools.prepare_data.generate_voxel:gen_octree_from_sfm:59 - Points filtered from raw point cloud: 27595/100040
2022-08-01 19:07:19.782 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:124 - number of points for voxel generation: 725832/744660
2022-08-01 19:07:22.507 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:147 - level: 5 for expected voxel size: 0.25
2022-08-01 19:07:24.106 | DEBUG | tools.prepare_data.generate_voxel:gen_octree_from_sfm:59 - Points filtered from raw point cloud: 27595/100040
2022-08-01 19:07:46.472 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:124 - number of points for voxel generation: 3862151/3893596
2022-08-01 19:07:46.507 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:147 - level: 5 for expected voxel size: 0.25
Mean Projection Error: tensor(0.8717)

0%| | 0/1353 [00:00<?, ?it/s]

0%| | 0/1 [00:00<?, ?it/s]�[A
100%|██████████| 1/1 [00:00<00:00, 76.60it/s]

0%| | 0/1 [00:00<?, ?it/s]�[A
100%|██████████| 1/1 [00:00<00:00, 98.90it/s]

0%| | 0/1353 [00:01<?, ?it/s]
padding valid depth percentage: from 0.0 to 0.2 with padding 1592
Traceback (most recent call last):
File "tools/prepare_data/prepare_data_cache.py", line 176, in
dataset = dataset_dictargs.dataset_name
File "/DATA/disk1/NeuralRecon-W/./datasets/phototourism.py", line 122, in init
self.read_meta()
File "/DATA/disk1/NeuralRecon-W/./datasets/phototourism.py", line 671, in read_meta
paddings_rays = rays[valid_depth, :][pad_ind]
IndexError: index is out of bounds for dimension with size 0

Question about training and evaluation

Could you please give the checkpoints for me to evaluate in the brandenburg_gate scene, the training time is a little long. What's more, when I training the model, the cuda memory is increasing, is there something wrong with my code?

The details of Surface-guided sampling

Thanks for posting such excellent work!

I try to understand the Surface-guided sampling part of your paper, however, I'm confused about how to get the queried surface position $\hat{x}$, and how to sample within the interval $(\hat{x}-t_s, \hat{x}+t_s)$.

  • Is $\hat{x}$ indicates the point where the ray intersects the surface? If so, how to query $\hat{x}$?
  • Is the queried points within interval $(\hat{x}-t_s, \hat{x}+t_s)$ a uniform distribution or Gaussian distribution or any others?

Also, looking forward to your code release!

some question about sampling code

Hi, I'd like to ask some details about sampling in code because I want to do similar octree sampling using kaolin source library in my own dataset. I used the results of the indoor MVS as the initialization input of the octree (which is much denser than sfm result), but in the experiment, I found that when using kaolin.render.spc.unbatched_raytrace:

ray_index, pt_ids, depth_in_out = spc_render.unbatched_raytrace(
        octree,
        points,
        pyramid,
        prefix,
        rays_o_normalized,
        rays_d,
        level,
        return_depth=True,
        with_exit=with_exit,
    )

The following information is displayed.As a result, the octree sampling method fails.

[WARNING] batch has 0 intersections!!

I can verify my coordinate system and camera pose visually. I want to know how to solve this problem.
The following figure shows the visualized octree point and the rays input to kaolin.spc_render.

2!

Error in train

Hi, thank you for code! I created custom dataset from colmap workspace. After i changed train config file for my colmap workspace. After train launch i have this output:

scripts/train.sh first_ config/train.yaml 1 1

  • set -u
    ++ date +%Y%m%d_%H%M%S
  • now=20220721_210102
  • jobname=train-first_-20220721_210102
  • echo 'job name is train-first_-20220721_210102'
    job name is train-first_-20220721_210102
  • config_file=config/train.yaml
  • mkdir -p log
  • mkdir -p logs/train-first_-20220721_210102
  • cp config/train.yaml logs/train-first_-20220721_210102
  • export CUDA_VISIBLE_DEVICES=0
  • CUDA_VISIBLE_DEVICES=0
  • python train.py --cfg_path config/train.yaml --num_gpus 1 --num_nodes 1 --num_epochs 20 --batch_size 2048 --test_batch_size 512 --num_workers 16 --exp_name train-first_-20220721_210102
  • tee log/train-first_-20220721_210102.log
    INFO - 2022-07-21 21:01:04,525 - rasterization - Cannot import nvdiffrast
    INFO - 2022-07-21 21:01:04,858 - seed - Global seed set to 66
    INFO - 2022-07-21 21:01:04,906 - trainer - GPU available: True, used: True
    INFO - 2022-07-21 21:01:04,906 - trainer - TPU available: False, using: 0 TPU cores
    INFO - 2022-07-21 21:01:04,906 - trainer - IPU available: False, using: 0 IPUs
    2022-07-21 21:01:04.907 | WARNING | datasets.data:setup:51 - Default process group has not been initialized, please make sure to call init_process_group. (set world_size=1 and rank=0)
    training octree will be in level: 9, with respect to voxel size 0.03987033383354102
    Initializing data loaders...
    Traceback (most recent call last):
    File "train.py", line 72, in
    main(hparams, config)
    File "train.py", line 64, in main
    trainer.fit(system, datamodule=data_module)
    File "/home/led/anaconda3/envs/NRW/lib/python3.8/site-packages/pytorch_lightning/trainer/trainer.py", line 552, in fit
    self._run(model)
    File "/home/led/anaconda3/envs/NRW/lib/python3.8/site-packages/pytorch_lightning/trainer/trainer.py", line 864, in _run
    self._call_setup_hook(model) # allow user to setup lightning_module in accelerator environment
    File "/home/led/anaconda3/envs/NRW/lib/python3.8/site-packages/pytorch_lightning/trainer/trainer.py", line 1168, in _call_setup_hook
    self.datamodule.setup(stage=fn)
    File "/home/led/anaconda3/envs/NRW/lib/python3.8/site-packages/pytorch_lightning/core/datamodule.py", line 428, in wrapped_fn
    fn(*args, **kwargs)
    File "/home/led/ML/3D_reconstruction/NeuralRecon-W/datasets/data.py", line 68, in setup
    self.train_dataset = self._setup_dataset(
    File "/home/led/ML/3D_reconstruction/NeuralRecon-W/datasets/data.py", line 104, in _setup_dataset
    splits_names = next(
    StopIteration

How the mesh model is rendered.

This is an excellent study, and the results in your paper look stunning. Your mesh model can easily show the details. I don't get that effect when I open a mesh model using meshlab. I would like to know what method or tool you use to render the mesh models. Thank you very much.

Input format

You mentioned that "The code takes a standard COLMAP workspace format as input". Does it mean I should run COLMAP first, before your script can generate personalized input for NeuconW?

Octree_update Error When Training With My Own Data!

Hi, thank you for your excellent work!

I have trained my own dataset which is the "buckingham_palace" downloaded from Image Matching 2020 (https://www.cs.ubc.ca/~kmyi/imw2020/data.html) .

I have pre-process the data with the script, and then I run the train.py with 1 GPU on 1 node.
When the 10000 iteration is finished , the second updating step is error , and the first updating step is ok
Here is the right and error log:

Epoch 0: 2%|▏ | 4999/210689 [27:57<19:10:01, 2.98it/s, loss=1.21, train/color_loss=0.953, train/normal_loss=0.00272, train/mask_error=0.245, train/psnr=7.180]
Updating sdf to octree....
train dim: 256, upsampled 8 times, original dim 32, sparse num 8102

0%| | 0/64 [00:00<?, ?it/s]�[A

23%|██▎ | 15/64 [00:00<00:00, 142.06it/s]�[A

47%|████▋ | 30/64 [00:00<00:00, 138.66it/s]�[A

70%|███████ | 45/64 [00:00<00:00, 141.12it/s]�[A

94%|█████████▍| 60/64 [00:00<00:00, 137.97it/s]�[A
100%|██████████| 64/64 [00:00<00:00, 140.45it/s]
2023-02-21 18:18:00.083 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:124 - number of points for voxel generation: 288/288
2023-02-21 18:18:00.083 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:147 - level: 8 for expected voxel size: 0.025204115904286808
sdf filtered points 288, max sdf: -0.0035191774368286133, min sdf: 0.43912580609321594
Update successful!!

.......

Epoch 0: 5%|▍ | 9999/210689 [57:00<19:03:58, 2.92it/s, loss=1.2, train/color_loss=0.931, train/normal_loss=0.00244, train/mask_error=0.247, train/psnr=7.360]
Updating sdf to octree....
train dim: 256, upsampled 8 times, original dim 32, sparse num 8102

0%| | 0/64 [00:00<?, ?it/s]�[A

23%|██▎ | 15/64 [00:00<00:00, 142.03it/s]�[A

47%|████▋ | 30/64 [00:00<00:00, 142.90it/s]�[A

70%|███████ | 45/64 [00:00<00:00, 139.74it/s]�[A

94%|█████████▍| 60/64 [00:00<00:00, 141.30it/s]�[A
100%|██████████| 64/64 [00:00<00:00, 142.75it/s]
2023-02-21 18:47:02.862 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:124 - number of points for voxel generation: 0/0
2023-02-21 18:47:02.863 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:147 - level: 8 for expected voxel size: 0.025204115904286808
sdf filtered points 0, max sdf: 0.016315370798110962, min sdf: 0.3999830186367035
Traceback (most recent call last):
File "/root/dev/NeuralRecon-W/train.py", line 72, in
main(hparams, config)
File "/root/dev/NeuralRecon-W/train.py", line 64, in main
trainer.fit(system, datamodule=data_module)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/trainer/trainer.py", line 552, in fit
self._run(model)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/trainer/trainer.py", line 917, in _run
self._dispatch()
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/trainer/trainer.py", line 985, in _dispatch
self.accelerator.start_training(self)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/accelerators/accelerator.py", line 92, in start_training
self.training_type_plugin.start_training(trainer)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/plugins/training_type/training_type_plugin.py", line 161, in start_training
self._results = trainer.run_stage()
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/trainer/trainer.py", line 995, in run_stage
return self._run_train()
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/trainer/trainer.py", line 1044, in _run_train
self.fit_loop.run()
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/loops/base.py", line 111, in run
self.advance(*args, **kwargs)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/loops/fit_loop.py", line 200, in advance
epoch_output = self.epoch_loop.run(train_dataloader)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/loops/base.py", line 111, in run
self.advance(*args, **kwargs)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/loops/epoch/training_epoch_loop.py", line 130, in advance
batch_output = self.batch_loop.run(batch, self.iteration_count, self._dataloader_idx)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/loops/batch/training_batch_loop.py", line 100, in run
super().run(batch, batch_idx, dataloader_idx)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/loops/base.py", line 111, in run
self.advance(*args, **kwargs)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/loops/batch/training_batch_loop.py", line 147, in advance
result = self._run_optimization(batch_idx, split_batch, opt_idx, optimizer)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/loops/batch/training_batch_loop.py", line 201, in _run_optimization
self._optimizer_step(optimizer, opt_idx, batch_idx, closure)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/loops/batch/training_batch_loop.py", line 395, in _optimizer_step
model_ref.optimizer_step(
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/core/lightning.py", line 1616, in optimizer_step
optimizer.step(closure=optimizer_closure)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/core/optimizer.py", line 206, in step
self.__optimizer_step(closure=closure, profiler_name=profiler_name, **kwargs)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/core/optimizer.py", line 128, in __optimizer_step
trainer.accelerator.optimizer_step(self._optimizer, self._optimizer_idx, lambda_closure=closure, **kwargs)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/accelerators/accelerator.py", line 296, in optimizer_step
self.run_optimizer_step(optimizer, opt_idx, lambda_closure, **kwargs)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/accelerators/accelerator.py", line 303, in run_optimizer_step
self.training_type_plugin.optimizer_step(optimizer, lambda_closure=lambda_closure, **kwargs)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/plugins/training_type/training_type_plugin.py", line 226, in optimizer_step
optimizer.step(closure=lambda_closure, **kwargs)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/torch/optim/optimizer.py", line 88, in wrapper
return func(*args, **kwargs)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/torch/autograd/grad_mode.py", line 27, in decorate_context
return func(*args, **kwargs)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/torch/optim/adam.py", line 100, in step
loss = closure()
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/loops/batch/training_batch_loop.py", line 235, in _training_step_and_backward_closure
result = self.training_step_and_backward(split_batch, batch_idx, opt_idx, optimizer, hiddens)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/loops/batch/training_batch_loop.py", line 536, in training_step_and_backward
result = self._training_step(split_batch, batch_idx, opt_idx, hiddens)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/loops/batch/training_batch_loop.py", line 306, in _training_step
training_step_output = self.trainer.accelerator.training_step(step_kwargs)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/accelerators/accelerator.py", line 193, in training_step
return self.training_type_plugin.training_step(*step_kwargs.values())
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/pytorch_lightning/plugins/training_type/training_type_plugin.py", line 172, in training_step
return self.model.training_step(*args, **kwargs)
File "/root/dev/NeuralRecon-W/lightning_modules/neuconw_system.py", line 372, in training_step
self.octree_update(
File "/root/dev/NeuralRecon-W/lightning_modules/neuconw_system.py", line 281, in octree_update
octree_new, scene_origin, scale, level = gen_octree(
File "/root/dev/NeuralRecon-W/tools/prepare_data/generate_voxel.py", line 150, in gen_octree
octree = spc.unbatched_points_to_octree(quantized_pc, level)
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/kaolin/ops/spc/points.py", line 75, in unbatched_points_to_octree
morton = torch.sort(points_to_morton(unique).contiguous())[0]
File "/root/anaconda3/envs/nerf/lib/python3.9/site-packages/kaolin/ops/spc/points.py", line 105, in points_to_morton
return _C.ops.spc.points_to_morton_cuda(points.contiguous()).reshape(*shape)
TypeError: reshape() missing 1 required positional arguments: "shape"

So , how to fix it?
I have used the default train.yaml and the depth_pecent is 0.0

Thanks a lot!

qc

training error

Hello, thank you very much for the code, when I finish the first step of Generate ray cache for BG, train and run the code: scripts/train.sh first_train config/train_brandenburg_gate.yaml 1 1 and then get an error, the error result is as follows:
BTI`B 3N}N5(%DK%R(GE_6R

Reproduced Brandenburg Gate mesh result is bad ?

Hi,
I follow the instruction in ReadMe.md to train "Brandenburg Gate (scale1)" on two A100 GPUs, but the mesh result is bad than your paper. It is very strange that the result of epoch18 is very bad than epoch4.
Could you give me any suggstions ?

res

Runtime error when Generate ray cache for all four scenes

Hello, I really appreciate your execellent work.I met this error when generate ray cache for all four scenes.This is detailed infomation in one scene:

(neuconw) konderex@DESKTOP-3UKKVPP:/mnt/c/NeuralRecon-W-main$ scripts/data_generation.sh data/heritage-recon/brandenburg_gate

  • set -u
  • set -e
    ++ date +%Y%m%d_%H%M%S
  • now=20230517_122604
    ++ pwd
  • echo 'working directory is /mnt/c/NeuralRecon-W-main'
    working directory is /mnt/c/NeuralRecon-W-main
  • jobname=data-generation-data/heritage-recon/brandenburg_gate-20230517_122604
  • export CUDA_VISIBLE_DEVICES=0
  • CUDA_VISIBLE_DEVICES=0
  • dataset_name=phototourism
  • cache_dir=cache_sgs
  • root_dir=data/heritage-recon/brandenburg_gate
  • min_observation=-1
  • '[' '!' -f data/heritage-recon/brandenburg_gate/brandenburg_gate.tsv ']'
  • python tools/prepare_data/prepare_data_cache.py --root_dir data/heritage-recon/brandenburg_gate --dataset_name phototourism --cache_dir cache_sgs --img_downscale 1 --semantic_map_path semantic_maps --split_to_chunks 64
  • tee log/data-generation-data/heritage-recon/brandenburg_gate-20230517_122604.log
    tee: log/data-generation-data/heritage-recon/brandenburg_gate-20230517_122604.log: No such file or directory
    Preparing cache for scale 1...
    reading sfm result from ../neuralsfm...
    Note: training near far will generate from sparse voxel!!!!
    Reading images.bin..
    Reading cameras.bin..
    Compute c2w poses..
    Generating rays and rgbs..
    100%|██████████| 778613/778613 [00:02<00:00, 310931.02it/s]
    2023-05-17 12:26:59.180 | DEBUG | tools.prepare_data.generate_voxel:gen_octree_from_sfm:59 - Points filtered from raw point cloud: 27595/100040
    2023-05-17 12:26:59.530 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:124 - number of points for voxel generation: 725832/744660
    2023-05-17 12:27:02.772 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:147 - level: 5 for expected voxel size: 0.25
    2023-05-17 12:27:04.006 | DEBUG | tools.prepare_data.generate_voxel:gen_octree_from_sfm:59 - Points filtered from raw point cloud: 27595/100040
    2023-05-17 12:27:13.702 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:124 - number of points for voxel generation: 3862151/3893596
    2023-05-17 12:27:13.708 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:147 - level: 5 for expected voxel size: 0.25
    Mean Projection Error: tensor(1.0761)
    0%| | 0/1353 [00:00<?, ?it/s]/home/konderex/anaconda3/envs/neuconw/lib/python3.8/site-packages/torch/functional.py:445: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at ../aten/src/ATen/native/TensorShape.cpp:2157.)
    return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]
    0%| | 0/1353 [00:00<?, ?it/s]
    Traceback (most recent call last):
    File "tools/prepare_data/prepare_data_cache.py", line 176, in
    dataset = dataset_dictargs.dataset_name
    File "/mnt/c/NeuralRecon-W-main/./datasets/phototourism.py", line 123, in init
    self.read_meta()
    File "/mnt/c/NeuralRecon-W-main/./datasets/phototourism.py", line 576, in read_meta
    depth_sfm, weight = self.get_colmap_depth(
    File "/mnt/c/NeuralRecon-W-main/./datasets/phototourism.py", line 199, in get_colmap_depth
    extrinsic = torch.linalg.inv(pose)
    RuntimeError: cusolver error: CUSOLVER_STATUS_INTERNAL_ERROR, when calling cusolverDnCreate(handle)

Cowardly refusing to serialize non-leaf tensor which requires_grad, since autograd

image

image
hparams.num_gpus set 2
run
scripts/train.sh exp_name ./config/train.yaml 2 1
throw errors
Cowardly refusing to serialize non-leaf tensor which requires_grad, since autograd
The original logic is required to grad back to the derivative
In multi-threaded parallelism serialize a tensor requires gradient calculation, the calculation graph is separated, autograd does not support to do synchronization between multiple processes
I can find this tensor, but this tensor originally needs gradient calculation, if I set it to require_grads=False, won't it change the original logic. At present, the desired state is to support multiple processes in parallel, but also support the autograd of this tensor
The current problem is that autograd does not support synchronization between multiple processes

How is the training speed?

For a large scene like Brandenburg Gate, it uses 1,000 images.
The number of images is too many, can I reduce the number of photos to 100 if I use well-taken photos instead of random shots of tourists with a lot of redundancy?

Too long training time (36 hours for a single epoch on Phototourism dataset using NVIDIA V100 single GPU of 32GB)

For training on scenes of the phototourism dataset (Pantheon exterior without image downscaling) using an NVIDIA Tesla V100 GPU of 32 GB memory, it is taking me 36 hours for a single epoch. Considering the default number of 20 epochs, it would take as long as 30 days for full training.

Could you please provide the exact specification of the GPU's used in your experiments? In the paper it is mentioned that 8 NVIDIA A100 GPU's are used. How much GPU memory it has? Does it have 80GB per GPU?

How to make my own datasets?

Dear author,thanks you great work. I have some buildings images, I want to use them to train to reconstruction?how can I to make my own datasets?

Wrong mesh result

Hello, thanks for your great work.
I used 200 images of brandenburg-gate dataest and its original config file. Everything is fine from colmap to training process, but the mesh generated after training is very strange.

The command to extract mesh is

scripts/sdf_extract.sh gate_200 config/train_gate_200.yaml ckpts/data-generation-gate_200-20230410_195057/\{epoch:d\}/epoch=19-step=629696.ckpt 10

The result is
image

I tried changing the parameters in sdf_extract.sh(such as mesh_radius, mesh_origin...), but the result was no change except the file size.

How can I get the correct mesh?

How to set sfm2gt

I wonder how to set sfm2gt in config.yaml when I train my own dataset?

Training Problems

Hello, thanks for your great work. I met "ValueError: Surface level must be within volume data range" when I use my own data to train. I knew that occured in validation step , so I turned off validation step and it can be trained normally. But when I extracted mesh and used the trained model. The error came again. I'd appreciate it if you could give me some advices.

Errors like this ↓
And my dataset is indoor and I use train_indoor.yaml as my configuration.
image
image

Here is my dataset. And I just removed some detailed files.

/mnt/share_disk/shlzhang/data/NeuralReconW/right_camera/scene
|-- cache_sgs
| -- splits | |-- rays1_meta_info.json | |-- rgbs1_meta_info.json | |-- split_0 | | |-- rays1.h5 | | -- rgbs1.h5
......
|-- config.yaml
|-- dense
| |-- images
| | |-- 1663582290115993.jpg
| | |-- 1663582290215977.jpg
| | |-- 1663582290315950.jpg
......
| -- sparse | |-- cameras.bin | |-- images.bin | -- points3D.bin
|-- segmentation_vis
| |-- 1663582290115993.png
| |-- 1663582290215977.png
| |-- 1663582290315950.png
......
|-- semantic_maps
| |-- 1663582290115993.npz
| |-- 1663582290215977.npz
| |-- 1663582290315950.npz
......
|-- split_0.tsv
`-- trash_images

Segmentation masks

Thank you very much for your great work.

I wonder if you will provide the segmentation masks for the dataset to best replicate your result.

Looking forwards to your reply!

Image downsizing results in runtime error RuntimeError: Trying to create tensor with negative dimension -18: [-18]

Preparing cache for scale 4...
reading sfm result from ../neuralsfm...
Note: training near far will generate from sparse voxel!!!!
Reading images.bin..
Reading cameras.bin..
Compute c2w poses..
Generating rays and rgbs..
100%|██████████| 778613/778613 [00:06<00:00, 116915.10it/s]
2022-12-30 16:36:11.097 | DEBUG | tools.prepare_data.generate_voxel:gen_octree_from_sfm:59 - Points filtered from raw point cloud: 27595/100040
2022-12-30 16:36:11.753 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:124 - number of points for voxel generation: 725832/744660
2022-12-30 16:36:13.536 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:147 - level: 5 for expected voxel size: 0.25
2022-12-30 16:36:15.178 | DEBUG | tools.prepare_data.generate_voxel:gen_octree_from_sfm:59 - Points filtered from raw point cloud: 27595/100040
2022-12-30 16:36:35.314 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:124 - number of points for voxel generation: 3862151/3893596
2022-12-30 16:36:35.339 | DEBUG | tools.prepare_data.generate_voxel:gen_octree:147 - level: 5 for expected voxel size: 0.25
Mean Projection Error: tensor(1.0761)
100%|██████████| 1/1 [00:00<00:00, 32.90it/s]
100%|██████████| 1/1 [00:00<00:00, 35.89it/s]
0%| | 0/1353 [00:00<?, ?it/s]
padding valid depth percentage: from 0.20059621871812974 to 0.2 with padding -18
Traceback (most recent call last):
File "tools/prepare_data/prepare_data_cache.py", line 176, in
dataset = dataset_dictargs.dataset_name
File "/home/imlab/neural3d/NeuralRecon-W/./datasets/phototourism.py", line 122, in init
self.read_meta()
File "/home/imlab/neural3d/NeuralRecon-W/./datasets/phototourism.py", line 666, in read_meta
pad_ind = torch.floor((torch.rand(padding_length) * valid_num)).long()
RuntimeError: Trying to create tensor with negative dimension -18: [-18]

training issue

scripts/train.sh $EXP_NAME config/train_${SCENE_NAME}.yaml $NUM_GPU $NUM_NODE
What does $EXP_NAME stand for? above.

kaolin installation problem

The kaolin install needs pytorch<=1.7.0,see https://kaolin.readthedocs.io/en/v0.9.1/notes/installation.html,but the code seems not work in pytorch==1.7.0,how to solve this conflict?I run scripts/data_generation.sh data/brandenburg_gate,
when i use pytorch==1.7.0,it has the following error:
Traceback (most recent call last): File "tools/prepare_data/prepare_data_cache.py", line 176, in <module> dataset = dataset_dict[args.dataset_name](**kwargs) File "/root/NeuralRecon-W/./datasets/phototourism.py", line 123, in __init__ self.read_meta() File "/root/NeuralRecon-W/./datasets/phototourism.py", line 576, in read_meta depth_sfm, weight = self.get_colmap_depth( File "/root/NeuralRecon-W/./datasets/phototourism.py", line 199, in get_colmap_depth extrinsic = torch.linalg.inv(pose) AttributeError: module 'torch.linalg' has no attribute 'inv'
when i use pytorch==1.8.0,i can not install kaolin successfully,it give the following error:
Traceback (most recent call last): File "tools/prepare_data/prepare_data_cache.py", line 5, in <module> from datasets import dataset_dict File "/root/NeuralRecon-W/./datasets/__init__.py", line 1, in <module> from .phototourism import PhototourismDataset File "/root/NeuralRecon-W/./datasets/phototourism.py", line 16, in <module> from tools.prepare_data.generate_voxel import get_near_far, gen_octree_from_sfm File "/root/NeuralRecon-W/./tools/prepare_data/generate_voxel.py", line 13, in <module> from kaolin.ops import spc File "/root/NeuralRecon-W/kaolin/kaolin/__init__.py", line 1, in <module> from . import io File "/root/NeuralRecon-W/kaolin/kaolin/io/__init__.py", line 5, in <module> from . import render File "/root/NeuralRecon-W/kaolin/kaolin/io/render.py", line 23, in <module> from ..render.camera import generate_perspective_projection File "/root/NeuralRecon-W/kaolin/kaolin/render/__init__.py", line 2, in <module> from . import mesh File "/root/NeuralRecon-W/kaolin/kaolin/render/mesh/__init__.py", line 1, in <module> from .utils import * File "/root/NeuralRecon-W/kaolin/kaolin/render/mesh/utils.py", line 22, in <module> from ... import ops File "/root/NeuralRecon-W/kaolin/kaolin/ops/__init__.py", line 1, in <module> from . import batch File "/root/NeuralRecon-W/kaolin/kaolin/ops/batch.py", line 17, in <module> from kaolin import _C ImportError: /root/NeuralRecon-W/kaolin/kaolin/_C.so: undefined symbol: _ZN6caffe28TypeMeta21_typeMetaDataInstanceIdEEPKNS_6detail12TypeMetaDataEv

ZeroDivisionError: division by zero

run
for SCENE_NAME in brandenburg_gate; do
scripts/data_generation.sh /nas/datasets/Heritage-Recon/${SCENE_NAME}
done

python tools/prepare_data/prepare_data_cache.py --root_dir /nas/datasets/Heritage-Recon/brandenburg_gate --dataset_name phototourism --cache_dir cache_sgs --img_downscale 1 --semantic_map_path semantic_maps --split_to_chunks 64

[WARNING] batch has 0 intersections!!
[WARNING] batch has 0 intersections!!
[WARNING] batch has 0 intersections!!
Traceback (most recent call last):
File "/nas/users/NeuralRecon-W/tools/prepare_data/prepare_data_cache.py", line 176, in
dataset = dataset_dictargs.dataset_name
File "/nas/users/NeuralRecon-W/./datasets/phototourism.py", line 123, in init
self.read_meta()
File "/nas/users/NeuralRecon-W/./datasets/phototourism.py", line 667, in read_meta
curent_percent = valid_num / current_len
ZeroDivisionError: division by zero

/nas/users/NeuralRecon-W/datasets/phototourism.py(667)read_meta()
666 current_len = rays.size()[0]
--> 667 curent_percent = valid_num / current_len
668 padding_length = int(np.ceil((self.depth_percent * current_len - valid_num) / (1 - self.depth_percent)))

ipdb> current_len
0
for id_ in tqdm(img_ids_split):
ipdb> id_
15

Custom data issue(where is weight file?)

Hi,May I ask how can I get the following weight files?

config_file = 'config/deeplabv3_config/deeplabv3_r101-d8_512x512_160k_ade20k.py'
checkpoint_file = 'weights/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816-b1f72b3b.pth'

Input ROI

It may sound stupid that I have no idea how to set ROI well for input.
For now, I take some photographs and then run COLMAP. COLMAP outputs a mesh computed through Delaunay triangulation. By visualizing I find this mesh is skewed (3d-rotated from a real world coordinate system) and drifted (3d-translated).
What I do now is 1. ignore rotation because I dont know how to deal with, 2. manually set in dataset config the center and radius and bbx and bbx_detail so they cover my region of interest. I noticed other issue mentioned center and radius from neus, but I am not familiar with that and hope for a direct method tk determine these params.
I believe there are better solutions. Would you like show me?

I can run through the pipeline and get some result, but these meshes seem to cover more space than my ROI bbx. I think something must be configured incorrectly. Can you show me how to config everything important for training a scene?

Failed to create own dataset

Hello, may I ask how the "neuralsfm" in the dataset is generated, I am looking forward to your answer.
image

When I use my own data for training, I run the command "scripts/data_generation.sh $WORKSPACE_PATH", and the error is as follows:
02a4f1ecf450131d0282e7818029c2e

But when I run this command on "brandenburg_gate", there is no error. Checking the dataset found that I don't have "neuralsfm", so I wonder how it came about.

Estimated release date

Hi, thanks for your great work! Do you have an estimate of the release date for the code?

Then, why does it output a grayscale 3D model? Also, in the reconstruction showcase (https://zju3dv.github.io/neuralrecon-w/), colored models are not displayed. Please let me know the modifications required to get an RGB model. I had trained it but even though the script apparently shows to be generating vertex colors, the extracted mesh is colorless.

          Then, why does it output a grayscale 3D model? Also, in the reconstruction showcase (https://zju3dv.github.io/neuralrecon-w/), colored models are not displayed. Please let me know the modifications required to get an RGB model.  I had trained it but even though the script apparently shows to be generating vertex colors, the extracted mesh is colorless.

Originally posted by @purplebutterfly79 in #39 (comment)

reproduce ablation studies of different sampling strategy

Hi~

Thanks for openning source this great work!

I am quite interested in the experiment showed at Fig 6 in your paper---comparision about different sampling strategies.
Can the current version of the code be easily switched between different sampling methods, so that this experiment can be reproduced?

Thanks in advance!

Training OOM of CPU

Hello author! Very Nice Job! I try to use Neural-Recon-Wild to reconstruct a 200mx200m region on street, but code will dump every time when it come to update octree. Can you give me some suggestion on it?In my config, Level is set to 5, voxel size is caluculated to 4 meter, scene like below:
image

igr_weight

I noticed that your igr_weight is 0.1 bu default, the same as indoor case. But all your demos used a smaller weight. How can I choose a proper value?

loss converge problem

hi, I met q question during training,

Initially, the loss was decreasing, but suddenly reached a stage where the sdf loss increased and the normal loss increased. and display " cdf is nan" . Have you encountered this problem ??
it seems the gradients is nan, What is the cause of this problem

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.