2021-06-10 16:29:45 +02:00
|
|
|
# Why this fork
|
|
|
|
|
|
|
|
This is a fork from the original NeRF++ implementation. The original code has
|
|
|
|
some isses I needed to fix in order to get the algorithm working and to be able
|
|
|
|
to reproduce the authors work.
|
|
|
|
Hopefully this version should be better explained, will the necessary scripts
|
|
|
|
and without bugs to enable someone to train a dataset from start to finish
|
|
|
|
without having delve into the code if do not want to.
|
|
|
|
|
|
|
|
## How to install
|
|
|
|
|
|
|
|
Create a virtual env if you want to
|
|
|
|
```
|
|
|
|
pip3 -m venv env
|
|
|
|
source env/bin/activate
|
|
|
|
```
|
|
|
|
Install the needed dependencies
|
|
|
|
```
|
|
|
|
pip3 install -r requirements.txt
|
|
|
|
```
|
|
|
|
You will also need [COLMAP](colmap.github.io/)
|
|
|
|
|
|
|
|
## How to run
|
2021-06-10 16:35:08 +02:00
|
|
|
### Dataset
|
2021-06-10 16:29:45 +02:00
|
|
|
First you need to create or find a dataset. A large set of images (at least 30,
|
|
|
|
more if you want a 360 degree reconstruction).
|
|
|
|
In order to maximise the quality of the reconstuction it is recommended to take
|
|
|
|
pictures with the same illumination, from differents angles from the same
|
|
|
|
subject (take a step between each picture, do not only rotate).
|
|
|
|
Remember that higher quality pictures can always be resized later if needed
|
|
|
|
with tools like ImageMagick (mogrify or convert)
|
|
|
|
|
|
|
|
```
|
|
|
|
mogrify -resize 800 *.jpg
|
|
|
|
```
|
|
|
|
|
2021-06-10 16:35:08 +02:00
|
|
|
### Camera pose estimation
|
2021-06-10 16:29:45 +02:00
|
|
|
Then use the wrapper colmap `colmap_runner/run_colmap.py`
|
|
|
|
|
|
|
|
First change the two lines corresponding to input and output at the end of the
|
|
|
|
script `img_dir` is your dataset and `output_dir` is the ouput. If your COLMAP
|
|
|
|
binary is not located in `/usr/local/bin/colmap` also change it.
|
|
|
|
|
|
|
|
```
|
|
|
|
cd colmap_runner
|
|
|
|
python3 run_colmap.py
|
|
|
|
```
|
|
|
|
|
|
|
|
Then you will need to use the `format_dataset.py` script to transform the
|
2021-06-10 16:35:08 +02:00
|
|
|
wrapper COLMAP binary format data into the datastructure required by NeRF++.
|
2021-06-10 16:29:45 +02:00
|
|
|
|
|
|
|
You again need to change the `input_path` and `output_path`.
|
|
|
|
|
|
|
|
```
|
|
|
|
python3 format_dataset.py
|
|
|
|
```
|
|
|
|
|
2021-06-10 16:35:08 +02:00
|
|
|
Before training you can visualise your camera poses using the
|
|
|
|
`camera_visualizer/visualize_cameras.py` script.
|
|
|
|
|
2021-06-10 17:07:24 +02:00
|
|
|
Note: the `cam_dict_norm.json` file is the `kai_cameras_normalized.json`
|
|
|
|
created by the colmap wrapper. Or you can use the `vizu.py` script.
|
|
|
|
|
2021-06-10 16:35:08 +02:00
|
|
|
### Training the model
|
|
|
|
|
2021-06-10 16:29:45 +02:00
|
|
|
You then need to create the configuration file, copying the example in
|
|
|
|
`configs` and tweaking the values to your need is recommended. Refer to the
|
|
|
|
help inside `ddp_train_nerf.py` if you need to understand a parameter.
|
|
|
|
|
|
|
|
```
|
|
|
|
python3 ddp_train_nerf.py --config configs/lupo/training_lupo.txt
|
|
|
|
```
|
|
|
|
|
|
|
|
Your training should be running, if you want to visualise the training in real
|
|
|
|
time using tensorboard you can use:
|
|
|
|
|
|
|
|
```
|
|
|
|
tensorboard --logdir logs --host localhost
|
|
|
|
```
|
|
|
|
And opening the given socket (`ip:port`) in your browser.
|
|
|
|
It should be 0.0.0.0:6006
|