Merge branch 'master' of github.com:ethanweber/mattport into eng/benchmarking

This commit is contained in:
evonneng committed 2022-05-31 19:09:11 +00:00
commit d9472e2fca
92 files changed
+278 -270

No files matched your search

+2 -2
View File
@@ -25,10 +25,10 @@ jobs:
pip install -r environment/requirements.txt
pip install -e .
- name: Run Black
run: black mattport/ notebooks/ --check
run: black radiance/ notebooks/ --check
- name: Python Pylint
run: |
pylint mattport tests
pylint radiance tests
- name: Test with pytest
run: |
pytest
+9 -9
View File
@@ -1,4 +1,4 @@
# MattPort
# Radiance
# Quickstart
@@ -6,14 +6,14 @@
```
# Clone the repo
git clone --recurse-submodules git@github.com:ethanweber/mattport.git
git clone --recurse-submodules git@github.com:ethanweber/radiance.git
# Create the python environment
conda create --name mattport python=3.8.13
conda activate mattport
conda create --name radiance python=3.8.13
conda activate radiance
pip install -r environment/requirements.txt
# Install mattport as a library
# Install radiance as a library
pip install -e .
# Install library with CUDA support. Change setup.py to `USE_CUDA = True` and then
@@ -69,7 +69,7 @@ bash environments/run_jupyter.sh
# Tooling
1. One can use [autoenv](https://github.com/hyperupcall/autoenv) to make setting up the environment and environment variables easier. This will run the `.envrc` file upon entering the `/path/to/mattport` folder. It will also remove the environment parameters upon leaving.
1. One can use [autoenv](https://github.com/hyperupcall/autoenv) to make setting up the environment and environment variables easier. This will run the `.envrc` file upon entering the `/path/to/radiance` folder. It will also remove the environment parameters upon leaving.
```
# Install direnv.
@@ -79,7 +79,7 @@ sudo apt install direnv
eval "$(direnv hook bash)"
# Populate your .envrc with commands you want to run. Then, run the following to allow updates.
cd /path/to/mattport
cd /path/to/radiance
direnv allow .
```
@@ -125,12 +125,12 @@ python scripts/benchmarking/run_benchmark.py
```
# nerf-pytorch
cd external
python run_nerf.py --config configs/chair.txt --datadir /path/to/mattport/data/blender/chair
python run_nerf.py --config configs/chair.txt --datadir /path/to/radiance/data/blender/chair
# jaxnerf
cd external
conda activate jaxnerf
python -m jaxnerf.train --data_dir=/path/to/mattport/data/blender/chair --train_dir=/path/to/mattport/outputs/blender_chair_jaxnerf --config=/path/to/mattport/external/jaxnerf/configs/demo --render_every 100
python -m jaxnerf.train --data_dir=/path/to/radiance/data/blender/chair --train_dir=/path/to/radiance/outputs/blender_chair_jaxnerf --config=/path/to/radiance/external/jaxnerf/configs/demo --render_every 100
```
# Speeding up the code
@@ -1,13 +1,12 @@
defaults:
# This makes the logging module logs colorful
- data: default_data.yaml
- graph: default_graph.yaml
- logging: default_logging.yaml
- override hydra/job_logging: colorlog
- override hydra/hydra_logging: colorlog
- _self_
seed: 0
seed: 42
hydra:
run:
@@ -15,12 +14,10 @@ hydra:
# Example "outputs/mnist/classifier/baseline/2021-03-10-141516"
dir: outputs/${experiment_name}/${method_name}/${now:%Y-%m-%d_%H%M%S}
experiment_name: blender_lego
method_name: vanilla_nerf
# machine options
machine_config:
num_gpus: 1
num_machines: 1
machine_rank: 0
dist_url: auto
-32
View File
@@ -1,32 +0,0 @@
# saving model specifications
model_dir: /tmp/mattport_models/
steps_per_save: null
steps_per_test: 100
max_num_iterations: 1000000
# pretrained loading options
resume_train:
load_dir: # pretrained model directory
load_step: # pretrained model's step number
network:
_target_: mattport.nerf.graph.vanilla_nerf.NeRFGraph
near_plane: 2.0
far_plane: 6.0
num_coarse_samples: 64
num_importance_samples: 128
loss_coefficients: # loss coefficients
rgb_loss_coarse: 1.0
rgb_loss_fine: 1.0
# optimizer options for network
param_groups:
fields:
optimizer:
_target_: torch.optim.RAdam
lr: 0.0005
scheduler:
_target_: mattport.nerf.optimizers.ExponentialDecaySchedule
lr_final: 0.000005
max_steps: 1000000
-15
View File
@@ -1,15 +0,0 @@
defaults:
- default_graph.yaml
- _self_
network:
_target_: mattport.nerf.graph.instant_ngp.NGPGraph
field_implementation: torch # torch, tcnn, ...
loss_coefficients: # loss coefficients
rgb_loss: 1.0
# optimizer options for network
param_groups:
fields:
optimizer:
lr: 1e-2
-11
View File
@@ -1,11 +0,0 @@
defaults:
- default_graph.yaml
- _self_
network:
_target_: mattport.nerf.graph.nerfw.NerfWGraph
loss_coefficients: # loss coefficients
rgb_loss_coarse: 1.0
rgb_loss_fine: 1.0
uncertainty_loss: 1.0
density_loss: 0.01
-10
View File
@@ -1,10 +0,0 @@
defaults:
- default_graph.yaml
- _self_
network:
_target_: mattport.nerf.graph.semantic_nerf.SemanticNerfGraph
loss_coefficients: # loss coefficients
rgb_loss_coarse: 1.0
rgb_loss_fine: 1.0
semantic_loss_fine: 0.05
+16 -3
View File
@@ -1,7 +1,20 @@
defaults:
- default
- override graph: instant_ngp_graph
- vanilla_nerf
- _self_
method_name: instant_ngp
data.dataloader.num_rays_per_batch: 4096
data.val_num_rays_per_chunk: 16384
data.val_num_rays_per_chunk: 16384
graph:
network:
_target_: radiance.nerf.graph.instant_ngp.NGPGraph
field_implementation: torch # torch, tcnn, ...
loss_coefficients: # loss coefficients
rgb_loss: 1.0
# optimizer options for network
param_groups:
fields:
optimizer:
lr: 1e-2
+2 -2
View File
@@ -1,7 +1,7 @@
defaults:
- default
- override graph: instant_ngp_graph
- instant_ngp
- _self_
method_name: instant_ngp
data:
dataloader:
+14 -7
View File
@@ -1,14 +1,21 @@
defaults:
- default
- vanilla_nerf
- override data/dataset: friends_TBBT-big_living_room
- override graph: nerfw_graph
- _self_
experiment_name: friends_TBBT-big_living_room
method_name: nerfw
network:
near_plane: 0.1
far_plane: 10.0
num_coarse_samples: 64
num_importance_samples: 64
graph:
network:
_target_: radiance.nerf.graph.nerfw.NerfWGraph
near_plane: 0.1
far_plane: 10.0
num_coarse_samples: 64
num_importance_samples: 64
loss_coefficients: # loss coefficients
rgb_loss_coarse: 1.0
rgb_loss_fine: 1.0
uncertainty_loss: 1.0
density_loss: 0.01
+13 -7
View File
@@ -1,14 +1,20 @@
defaults:
- default
- vanilla_nerf
- override data/dataset: friends_TBBT-big_living_room
- override graph: semantic_nerf_graph
- _self_
experiment_name: friends_TBBT-big_living_room
method_name: semantic_nerf
network:
near_plane: 0.1
far_plane: 10.0
num_coarse_samples: 64
num_importance_samples: 64
graph:
network:
_target_: radiance.nerf.graph.semantic_nerf.SemanticNerfGraph
near_plane: 0.1
far_plane: 10.0
num_coarse_samples: 64
num_importance_samples: 64
loss_coefficients: # loss coefficients
rgb_loss_coarse: 1.0
rgb_loss_fine: 1.0
semantic_loss_fine: 0.05
+1 -1
View File
@@ -1,5 +1,5 @@
defaults:
- default
- vanilla_nerf
dry_run: true
+40
View File
@@ -0,0 +1,40 @@
defaults:
- default_setup
- _self_
experiment_name: blender_lego
method_name: vanilla_nerf
graph:
# saving model specifications
model_dir: /tmp/radiance_models/
steps_per_save: null
steps_per_test: 100
max_num_iterations: 1000000
# pretrained loading options
resume_train:
load_dir: # pretrained model directory
load_step: # pretrained model's step number
network:
_target_: radiance.nerf.graph.vanilla_nerf.NeRFGraph
near_plane: 2.0
far_plane: 6.0
num_coarse_samples: 64
num_importance_samples: 128
loss_coefficients: # loss coefficients
rgb_loss_coarse: 1.0
rgb_loss_fine: 1.0
# optimizer options for network
param_groups:
fields:
optimizer:
_target_: torch.optim.RAdam
lr: 0.0005
scheduler:
_target_: radiance.nerf.optimizers.ExponentialDecaySchedule
lr_final: 0.000005
max_steps: 1000000
+2 -2
View File
@@ -14,7 +14,7 @@
"outputs": [],
"source": [
"import torch\n",
"from mattport.structures import cameras\n",
"from radiance.structures import cameras\n",
"import plotly.graph_objects as go\n",
"import mediapy as media"
]
@@ -19597,7 +19597,7 @@
"hash": "024fe9dea615e4e34961116ff517c7e9f5910440e3d2c8eb4560299f11aaf2e7"
},
"kernelspec": {
"display_name": "Python 3.9.12 ('mattport')",
"display_name": "Python 3.9.12 ('radiance')",
"language": "python",
"name": "python3"
},
+11 -11
View File
@@ -20,15 +20,15 @@
"import torch\n",
"from torch.utils.data import DataLoader\n",
"\n",
"from mattport.nerf.dataset.image_dataset import ImageDataset, collate_batch\n",
"from mattport.nerf.dataset.collate import CollateIterDataset, collate_batch_size_one\n",
"from mattport.nerf.dataset.utils import get_dataset_inputs\n",
"from mattport.nerf.field_modules.ray_generator import RayGenerator\n",
"from mattport.nerf.field_modules.scene_bounds_collider import SceneBoundsCollider\n",
"from mattport.structures.rays import RayBundle\n",
"from mattport.utils.io import get_absolute_path\n",
"from mattport.viewer.plotly import get_line_segments_from_lines\n",
"from mattport.structures.cameras import get_camera_model\n",
"from radiance.nerf.dataset.image_dataset import ImageDataset, collate_batch\n",
"from radiance.nerf.dataset.collate import CollateIterDataset, collate_batch_size_one\n",
"from radiance.nerf.dataset.utils import get_dataset_inputs\n",
"from radiance.nerf.field_modules.ray_generator import RayGenerator\n",
"from radiance.nerf.field_modules.scene_bounds_collider import SceneBoundsCollider\n",
"from radiance.structures.rays import RayBundle\n",
"from radiance.utils.io import get_absolute_path\n",
"from radiance.viewer.plotly import get_line_segments_from_lines\n",
"from radiance.structures.cameras import get_camera_model\n",
"\n",
"\n",
"from hydra import compose, initialize\n",
@@ -361,9 +361,9 @@
"hash": "4a749acc7d255f078aee52e0584cc77b3cb5aaed1b3a7407ec4262c1bf6cb526"
},
"kernelspec": {
"display_name": "mattport",
"display_name": "radiance",
"language": "python",
"name": "mattport"
"name": "radiance"
},
"language_info": {
"codemirror_mode": {
+3 -3
View File
@@ -14,7 +14,7 @@
"outputs": [
{
"data": {
"application/javascript": "\n setTimeout(function() {\n var nbb_cell_id = 6;\n var nbb_unformatted_code = \"import torch\\nimport mediapy as media\\nfrom mattport.nerf.field_modules import encoding\";\n var nbb_formatted_code = \"import torch\\nimport mediapy as media\\nfrom mattport.nerf.field_modules import encoding\";\n var nbb_cells = Jupyter.notebook.get_cells();\n for (var i = 0; i < nbb_cells.length; ++i) {\n if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n nbb_cells[i].set_text(nbb_formatted_code);\n }\n break;\n }\n }\n }, 500);\n ",
"application/javascript": "\n setTimeout(function() {\n var nbb_cell_id = 6;\n var nbb_unformatted_code = \"import torch\\nimport mediapy as media\\nfrom radiance.nerf.field_modules import encoding\";\n var nbb_formatted_code = \"import torch\\nimport mediapy as media\\nfrom radiance.nerf.field_modules import encoding\";\n var nbb_cells = Jupyter.notebook.get_cells();\n for (var i = 0; i < nbb_cells.length; ++i) {\n if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n nbb_cells[i].set_text(nbb_formatted_code);\n }\n break;\n }\n }\n }, 500);\n ",
"text/plain": [
"<IPython.core.display.Javascript object>"
]
@@ -26,7 +26,7 @@
"source": [
"import torch\n",
"import mediapy as media\n",
"from mattport.nerf.field_modules import encoding"
"from radiance.nerf.field_modules import encoding"
]
},
{
@@ -434,7 +434,7 @@
"hash": "024fe9dea615e4e34961116ff517c7e9f5910440e3d2c8eb4560299f11aaf2e7"
},
"kernelspec": {
"display_name": "Python 3.9.11 ('mattport')",
"display_name": "Python 3.9.11 ('radiance')",
"language": "python",
"name": "python3"
},
+2 -2
View File
@@ -11,7 +11,7 @@ line-length = 120
max-line-length = 120
generated-members = ["numpy.*", "torch.*", "cv2.*", "cv.*"]
good-names-rgxs = "^[_a-zA-Z][_a-z0-9]?$"
ignore = ["mattport/cuda", "tests/cuda", "nerfw.py", "semantic_nerf.py"]
ignore = ["radiance/cuda", "tests/cuda", "nerfw.py", "semantic_nerf.py"]
disable = [
"too-many-arguments",
@@ -23,7 +23,7 @@ disable = [
#pytest
[tool.pytest.ini_options]
addopts = "--typeguard-packages=mattport --torchtyping-patch-typeguard --disable-warnings --ignore=tests/cuda"
addopts = "--typeguard-packages=radiance --torchtyping-patch-typeguard --disable-warnings --ignore=tests/cuda"
testpaths = [
"tests",
]
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -7,13 +7,13 @@ import math
import torch
from torch import nn
import mattport_cuda
import radiance_cuda
class LLTMFunction(torch.autograd.Function):
@staticmethod
def forward(ctx, input, weights, bias, old_h, old_cell):
outputs = mattport_cuda.forward(input, weights, bias, old_h, old_cell)
outputs = radiance_cuda.forward(input, weights, bias, old_h, old_cell)
new_h, new_cell = outputs[:2]
variables = outputs[1:] + [weights]
ctx.save_for_backward(*variables)
@@ -22,7 +22,7 @@ class LLTMFunction(torch.autograd.Function):
@staticmethod
def backward(ctx, grad_h, grad_cell):
outputs = mattport_cuda.backward(grad_h.contiguous(), grad_cell.contiguous(), *ctx.saved_variables)
outputs = radiance_cuda.backward(grad_h.contiguous(), grad_cell.contiguous(), *ctx.saved_variables)
d_old_h, d_input, d_weights, d_bias, d_old_cell, d_gates = outputs
return d_input, d_weights, d_bias, d_old_h, d_old_cell
File renamed without changes.
@@ -4,8 +4,8 @@ Ray generator.
import torch
from torch import nn
from torchtyping import TensorType
from mattport.nerf.dataset.structs import SceneBounds
from mattport.structures.rays import RayBundle
from radiance.nerf.dataset.structs import SceneBounds
from radiance.structures.rays import RayBundle
class SceneBoundsCollider(nn.Module):
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -10,8 +10,8 @@ import numpy as np
import torch
from torchtyping import TensorType
from mattport.nerf.dataset.structs import DatasetInputs, SceneBounds
from mattport.utils.io import load_from_json
from radiance.nerf.dataset.structs import DatasetInputs, SceneBounds
from radiance.utils.io import load_from_json
def load_blender_data(
@@ -7,10 +7,10 @@ import numpy as np
import torch
from mattport.nerf.dataset.colmap_utils import read_cameras_binary, read_images_binary, read_pointsTD_binary
from mattport.nerf.dataset.structs import DatasetInputs, PointCloud, SceneBounds, Semantics
from mattport.utils import profiler
from mattport.utils.io import load_from_json
from radiance.nerf.dataset.colmap_utils import read_cameras_binary, read_images_binary, read_pointsTD_binary
from radiance.nerf.dataset.structs import DatasetInputs, PointCloud, SceneBounds, Semantics
from radiance.utils import profiler
from radiance.utils.io import load_from_json
def get_aabb_and_transform(basedir):
@@ -10,8 +10,8 @@ import imageio
import numpy as np
import torch
from mattport.nerf.dataset.structs import DatasetInputs, SceneBounds
from mattport.utils.io import load_from_json
from radiance.nerf.dataset.structs import DatasetInputs, SceneBounds
from radiance.utils.io import load_from_json
def load_instant_ngp_data(
File renamed without changes.
@@ -12,7 +12,7 @@ from PIL import Image
from torch.utils.data import default_collate
from torchtyping import TensorType
from mattport.nerf.dataset.structs import Semantics
from radiance.nerf.dataset.structs import Semantics
def collate_batch(batch_list, num_rays_per_batch, keep_full_image: bool = False):
File renamed without changes.
@@ -6,12 +6,12 @@ from typing import Optional, Union
from omegaconf import ListConfig
from mattport.nerf.dataset.format.blender import load_blender_data
from mattport.nerf.dataset.format.friends import load_friends_data
from mattport.nerf.dataset.format.instant_ngp import load_instant_ngp_data
from mattport.nerf.dataset.structs import DatasetInputs
from mattport.structures.colors import get_color
from mattport.utils.io import get_absolute_path
from radiance.nerf.dataset.format.blender import load_blender_data
from radiance.nerf.dataset.format.friends import load_friends_data
from radiance.nerf.dataset.format.instant_ngp import load_instant_ngp_data
from radiance.nerf.dataset.structs import DatasetInputs
from radiance.structures.colors import get_color
from radiance.utils.io import get_absolute_path
def get_dataset_inputs(
File renamed without changes.
@@ -5,7 +5,7 @@ Code for embeddings.
import torch
from torchtyping import TensorType
from mattport.nerf.field_modules.base import FieldModule
from radiance.nerf.field_modules.base import FieldModule
class Embedding(FieldModule):
@@ -9,8 +9,8 @@ import torch.nn.functional as F
from torch import nn
from torchtyping import TensorType
from mattport.nerf.field_modules.base import FieldModule
from mattport.utils.math import components_from_spherical_harmonics
from radiance.nerf.field_modules.base import FieldModule
from radiance.utils.math import components_from_spherical_harmonics
class Encoding(FieldModule):
@@ -7,7 +7,7 @@ from typing import Optional
from torch import nn
from torchtyping import TensorType
from mattport.nerf.field_modules.base import FieldModule
from radiance.nerf.field_modules.base import FieldModule
class FieldHeadNames(Enum):
@@ -7,7 +7,7 @@ import torch
from torch import nn
from torchtyping import TensorType
from mattport.nerf.field_modules.base import FieldModule
from radiance.nerf.field_modules.base import FieldModule
class MLP(FieldModule):
File renamed without changes.
@@ -8,10 +8,10 @@ from typing import Dict, Optional, Tuple
from torch import nn
import torch
from torchtyping import TensorType
from mattport.nerf.field_modules.field_heads import FieldHeadNames
from radiance.nerf.field_modules.field_heads import FieldHeadNames
from mattport.structures.rays import PointSamples
from mattport.utils.misc import is_not_none
from radiance.structures.rays import PointSamples
from radiance.utils.misc import is_not_none
class Field(nn.Module):
@@ -9,12 +9,12 @@ import torch
import torch.nn.functional as F
from torch.nn.parameter import Parameter
from mattport.nerf.field_modules.encoding import Encoding, HashEncoding, SHEncoding
from mattport.nerf.field_modules.field_heads import FieldHeadNames
from mattport.nerf.fields.base import Field
from mattport.nerf.fields.nerf_field import NeRFField
from mattport.structures.rays import PointSamples
from mattport.utils.misc import is_not_none
from radiance.nerf.field_modules.encoding import Encoding, HashEncoding, SHEncoding
from radiance.nerf.field_modules.field_heads import FieldHeadNames
from radiance.nerf.fields.base import Field
from radiance.nerf.fields.nerf_field import NeRFField
from radiance.structures.rays import PointSamples
from radiance.utils.misc import is_not_none
try:
import tinycudann as tcnn
@@ -7,11 +7,11 @@ import torch
from torch import nn
from torchtyping import TensorType
from mattport.nerf.field_modules.encoding import Encoding, Identity
from mattport.nerf.field_modules.field_heads import DensityFieldHead, FieldHead, FieldHeadNames, RGBFieldHead
from mattport.nerf.field_modules.mlp import MLP
from mattport.nerf.fields.base import Field
from mattport.structures.rays import PointSamples
from radiance.nerf.field_modules.encoding import Encoding, Identity
from radiance.nerf.field_modules.field_heads import DensityFieldHead, FieldHead, FieldHeadNames, RGBFieldHead
from radiance.nerf.field_modules.mlp import MLP
from radiance.nerf.fields.base import Field
from radiance.structures.rays import PointSamples
class NeRFField(Field):
@@ -11,13 +11,13 @@ from torch import nn
from torch.nn import Parameter
from torchtyping import TensorType
from mattport.nerf.dataset.structs import SceneBounds
from mattport.nerf.ray_generator import RayGenerator
from mattport.nerf.colliders import AABBBoxCollider
from mattport.structures.cameras import get_camera_model
from mattport.structures.rays import RayBundle
from mattport.utils.misc import get_masked_dict
from mattport.utils.misc import is_not_none
from radiance.nerf.dataset.structs import SceneBounds
from radiance.nerf.ray_generator import RayGenerator
from radiance.nerf.colliders import AABBBoxCollider
from radiance.structures.cameras import get_camera_model
from radiance.structures.rays import RayBundle
from radiance.utils.misc import get_masked_dict
from radiance.utils.misc import is_not_none
class AbstractGraph(nn.Module):
@@ -9,22 +9,22 @@ from torch.nn import Parameter
from torchmetrics import PeakSignalNoiseRatio, StructuralSimilarityIndexMeasure
from torchmetrics.image.lpip import LearnedPerceptualImagePatchSimilarity
from mattport.nerf.colliders import AABBBoxCollider
from mattport.nerf.field_modules.field_heads import FieldHeadNames
from mattport.nerf.fields.instant_ngp_field import field_implementation_to_class
from mattport.nerf.graph.base import Graph
from mattport.nerf.loss import MSELoss
from mattport.nerf.occupancy_grid import OccupancyGrid
from mattport.nerf.renderers import AccumulationRenderer, DepthRenderer, RGBRenderer
from mattport.nerf.sampler import PDFSampler, UniformSampler
from mattport.structures import colors
from mattport.structures.rays import RayBundle
from mattport.utils import visualization, writer
from radiance.nerf.colliders import AABBBoxCollider
from radiance.nerf.field_modules.field_heads import FieldHeadNames
from radiance.nerf.fields.instant_ngp_field import field_implementation_to_class
from radiance.nerf.graph.base import Graph
from radiance.nerf.loss import MSELoss
from radiance.nerf.occupancy_grid import OccupancyGrid
from radiance.nerf.renderers import AccumulationRenderer, DepthRenderer, RGBRenderer
from radiance.nerf.sampler import PDFSampler, UniformSampler
from radiance.structures import colors
from radiance.structures.rays import RayBundle
from radiance.utils import visualization, writer
class NGPGraph(Graph):
"""NeRF-W graph"""
"""Instant NGP graph"""
def __init__(self, field_implementation="torch", intrinsics=None, camera_to_world=None, **kwargs) -> None:
assert field_implementation in field_implementation_to_class
@@ -8,18 +8,18 @@ from typing import Tuple
import torch
from torch import nn
from mattport.nerf.field_modules.embedding import Embedding
from mattport.nerf.field_modules.field_heads import (
from radiance.nerf.field_modules.embedding import Embedding
from radiance.nerf.field_modules.field_heads import (
FieldHeadNames,
TransientDensityHead,
TransientRGBHead,
UncertaintyFieldHead,
)
from mattport.nerf.field_modules.mlp import MLP
from mattport.nerf.graph.vanilla_nerf import NeRFField, NeRFGraph
from mattport.nerf.renderers import UncertaintyRenderer
from mattport.structures.rays import RayBundle, RaySamples
from mattport.utils import visualization, writer
from radiance.nerf.field_modules.mlp import MLP
from radiance.nerf.graph.vanilla_nerf import NeRFField, NeRFGraph
from radiance.nerf.renderers import UncertaintyRenderer
from radiance.structures.rays import RayBundle, RaySamples
from radiance.utils import visualization, writer
class NerfWField(Field):
@@ -7,12 +7,12 @@ from typing import Tuple
import torch
from torch import nn
from mattport.nerf.field_modules.field_heads import FieldHeadNames, SemanticStuffHead
from mattport.nerf.field_modules.mlp import MLP
from mattport.nerf.graph.vanilla_nerf import NeRFField, NeRFGraph
from mattport.nerf.renderers import SemanticRenderer
from mattport.structures.rays import RayBundle, RaySamples
from mattport.utils import visualization, writer
from radiance.nerf.field_modules.field_heads import FieldHeadNames, SemanticStuffHead
from radiance.nerf.field_modules.mlp import MLP
from radiance.nerf.graph.vanilla_nerf import NeRFField, NeRFGraph
from radiance.nerf.renderers import SemanticRenderer
from radiance.structures.rays import RayBundle, RaySamples
from radiance.utils import visualization, writer
class SemanticNerfField(NeRFField):
File renamed without changes.
@@ -9,18 +9,18 @@ import torch
from torch.nn import Parameter
from torchmetrics import PeakSignalNoiseRatio, StructuralSimilarityIndexMeasure
from torchmetrics.image.lpip import LearnedPerceptualImagePatchSimilarity
from mattport.nerf.field_modules.encoding import NeRFEncoding
from mattport.nerf.field_modules.field_heads import FieldHeadNames
from radiance.nerf.field_modules.encoding import NeRFEncoding
from radiance.nerf.field_modules.field_heads import FieldHeadNames
from mattport.nerf.fields.nerf_field import NeRFField
from mattport.nerf.graph.base import Graph
from mattport.nerf.loss import MSELoss
from mattport.nerf.renderers import AccumulationRenderer, DepthRenderer, RGBRenderer
from mattport.nerf.sampler import PDFSampler, UniformSampler
from mattport.structures import colors
from mattport.structures.rays import RayBundle
from mattport.nerf.colliders import NearFarCollider
from mattport.utils import visualization, writer
from radiance.nerf.fields.nerf_field import NeRFField
from radiance.nerf.graph.base import Graph
from radiance.nerf.loss import MSELoss
from radiance.nerf.renderers import AccumulationRenderer, DepthRenderer, RGBRenderer
from radiance.nerf.sampler import PDFSampler, UniformSampler
from radiance.structures import colors
from radiance.structures.rays import RayBundle
from radiance.nerf.colliders import NearFarCollider
from radiance.utils import visualization, writer
class NeRFGraph(Graph):
File renamed without changes.
@@ -7,7 +7,7 @@ import torch.nn.functional as F
from torch import nn
from torchtyping import TensorType
from mattport.utils.misc import is_not_none
from radiance.utils.misc import is_not_none
class OccupancyGrid(nn.Module):
@@ -10,7 +10,7 @@ from omegaconf import DictConfig
from torch.nn import Parameter
from torch.optim.lr_scheduler import LambdaLR
from mattport.utils import writer
from radiance.utils import writer
class ExponentialDecaySchedule(LambdaLR):
@@ -3,8 +3,8 @@ Ray generator.
"""
from torch import nn
from torchtyping import TensorType
from mattport.structures.rays import RayBundle
from mattport.structures.cameras import get_camera_model
from radiance.structures.rays import RayBundle
from radiance.structures.cameras import get_camera_model
class RayGenerator(nn.Module):
@@ -8,7 +8,7 @@ import torch
from torch import nn
from torchtyping import TensorType
from mattport.utils.math import components_from_spherical_harmonics
from radiance.utils.math import components_from_spherical_harmonics
class RGBRenderer(nn.Module):
@@ -17,7 +17,7 @@ class RGBRenderer(nn.Module):
def __init__(self, background_color: Optional[TensorType[3]] = None) -> None:
"""
Args:
background_color (TensorType[3], optional): Background color as RGB. Defaults to black.
background_color (TensorType[3], optional): Background color as RGB. Defaults to random.
"""
super().__init__()
self.background_color = background_color
@@ -34,14 +34,17 @@ class RGBRenderer(nn.Module):
Args:
rgb (TensorType[..., "num_samples", -1]): RGB for each sample
weights (TensorType[..., "num_samples"]): Weights for each sample
background_color (TensorType[3], optional): Background color as RGB. Defaults to random.
Returns:
TensorType[..., 3]: Outputs rgb values.
"""
rgb = torch.sum(weights[..., None] * rgb, dim=-2)
if background_color is not None:
rgb = rgb + background_color.to(weights.device)[None, ...] * (1.0 - torch.sum(weights, dim=-1)[..., None])
if background_color is None:
background_color = torch.rand_like(rgb).to(rgb.device)
rgb = rgb + background_color.to(weights.device) * (1.0 - torch.sum(weights, dim=-1)[..., None])
return rgb
@@ -74,7 +77,7 @@ class SHRenderer(nn.Module):
) -> None:
"""
Args:
background_color (TensorType[3], optional): Background color as RGB. Defaults to black.
background_color (TensorType[3], optional): Background color as RGB. Defaults to random.
activation (Optional[nn.Module], optional): Output activation. Defaults to Sigmoid().
"""
super().__init__()
@@ -9,8 +9,8 @@ import torch
from torch import nn
from torchtyping import TensorType
from mattport.nerf.occupancy_grid import OccupancyGrid
from mattport.structures.rays import RayBundle, RaySamples
from radiance.nerf.occupancy_grid import OccupancyGrid
from radiance.structures.rays import RayBundle, RaySamples
class Sampler(nn.Module):
@@ -14,14 +14,14 @@ from omegaconf import DictConfig
from torch.nn.parallel import DistributedDataParallel as DDP
from torch.utils.data import DataLoader
from mattport.nerf.dataset.collate import CollateIterDataset, collate_batch_size_one
from mattport.nerf.dataset.image_dataset import ImageDataset, collate_batch
from mattport.nerf.dataset.utils import DatasetInputs, get_dataset_inputs
from mattport.nerf.optimizers import Optimizers
from mattport.utils import profiler, writer
from mattport.utils.callbacks import update_occupancy
from mattport.utils.decorators import check_main_thread
from mattport.utils.misc import get_dict_to_torch
from radiance.nerf.dataset.collate import CollateIterDataset, collate_batch_size_one
from radiance.nerf.dataset.image_dataset import ImageDataset, collate_batch
from radiance.nerf.dataset.utils import DatasetInputs, get_dataset_inputs
from radiance.nerf.optimizers import Optimizers
from radiance.utils import profiler, writer
from radiance.utils.callbacks import update_occupancy
from radiance.utils.decorators import check_main_thread
from radiance.utils.misc import get_dict_to_torch
logging.getLogger("PIL").setLevel(logging.WARNING)
File renamed without changes.
File renamed without changes.
@@ -9,7 +9,7 @@ import torch
from torch.nn.functional import normalize
from torchtyping import TensorType
from mattport.structures.rays import RayBundle
from radiance.structures.rays import RayBundle
@dataclass
File renamed without changes.
@@ -8,7 +8,7 @@ from typing import Optional
import torch
from torchtyping import TensorType
from mattport.utils.misc import is_not_none
from radiance.utils.misc import is_not_none
@dataclass
File renamed without changes.
@@ -2,8 +2,8 @@
Callback functions for training iterations
"""
from mattport.nerf.graph.base import Graph
from mattport.nerf.occupancy_grid import OccupancyGrid
from radiance.nerf.graph.base import Graph
from radiance.nerf.occupancy_grid import OccupancyGrid
def update_occupancy(graph: Graph):
File renamed without changes.
@@ -3,7 +3,7 @@ Decorator definitions
"""
from typing import Callable, List
from mattport.utils import comms
from radiance.utils import comms
def decorate_all(decorators: List[Callable]) -> Callable:
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -7,8 +7,8 @@ from typing import Callable
from omegaconf import DictConfig
from mattport.utils import comms
from mattport.utils.decorators import check_main_thread, check_profiler_enabled, decorate_all
from radiance.utils import comms
from radiance.utils.decorators import check_main_thread, check_profiler_enabled, decorate_all
PROFILER = []
File renamed without changes.
@@ -15,8 +15,8 @@ from omegaconf import DictConfig, ListConfig
from torch.utils.tensorboard import SummaryWriter
from torchtyping import TensorType
import mattport.utils.writer
from mattport.utils.decorators import check_main_thread, decorate_all
import radiance.utils.writer
from radiance.utils.decorators import check_main_thread, decorate_all
to8b = lambda x: (255 * torch.clamp(x, min=0, max=1)).to(torch.uint8)
EVENT_WRITERS = []
@@ -150,7 +150,7 @@ def setup_event_writers(config: DictConfig) -> None:
"""Initialization of all event writers specified in config"""
logging_configs = config.logging.writer
for writer_type in logging_configs:
writer_class = getattr(mattport.utils.writer, writer_type)
writer_class = getattr(radiance.utils.writer, writer_type)
writer_config = logging_configs[writer_type]
if writer_type == "LocalWriter":
curr_writer = writer_class(writer_config.save_dir, writer_config.stats_to_track, writer_config.max_log_size)
File renamed without changes.
File renamed without changes.
@@ -6,7 +6,7 @@ import numpy as np
import plotly.graph_objects as go
import torch
from mattport.structures.rays import RayBundle
from radiance.structures.rays import RayBundle
def color_str(color):
+1 -1
View File
@@ -43,7 +43,7 @@ for dataset in ${DATASETS[@]}; do
data.dataset.data_directory=data/blender/${dataset} \
data.dataset.downscale_factor=1 \
experiment_name=blender_${dataset}_${tag} \
graph.model_dir=mattport_models/ \
graph.model_dir=radiance_models/ \
graph.steps_per_save=25000 \
graph.max_num_iterations=2000000 \
logging.enable_profiler=False &
+2 -2
View File
@@ -12,12 +12,12 @@ from hydra.core.global_hydra import GlobalHydra
from omegaconf import DictConfig
from tqdm import tqdm
from mattport.nerf.trainer import Trainer
from radiance.nerf.trainer import Trainer
BENCH = {
"method": "vanilla_nerf",
"hydra_base_dir": "outputs/",
"benchmark_date": "05-24-2022",
"benchmark_date": "05-26-2022",
"object_list": ["mic", "ficus", "chair", "hotdog", "materials", "drums", "ship", "lego"],
}
+13 -3
View File
@@ -3,6 +3,7 @@ run_train_nerf.py
"""
import datetime
import logging
import os
import random
import socket
from datetime import timedelta
@@ -15,9 +16,10 @@ import torch
import torch.distributed as dist
import torch.multiprocessing as mp
from omegaconf import DictConfig
import yaml
from mattport.nerf.trainer import Trainer
from mattport.utils import comms, profiler
from radiance.nerf.trainer import Trainer
from radiance.utils import comms, profiler
from time import time
logging.basicConfig(format="[%(filename)s:%(lineno)d] %(message)s", level=logging.DEBUG)
@@ -198,9 +200,17 @@ def launch(
profiler.flush_profiler(config.logging)
@hydra.main(config_path="../configs", config_name="default.yaml")
@hydra.main(config_path="../configs", config_name="vanilla_nerf.yaml")
def main(config: DictConfig):
"""Main function."""
unrolled_path = os.path.join(os.getcwd(), ".hydra/config.yaml")
if os.path.exists(unrolled_path):
with open(unrolled_path, "r", encoding="utf8") as f:
unrolled_config = yaml.safe_load(f)
logger = logging.getLogger(__name__)
logger.info("Printing current config setup")
print(yaml.dump(unrolled_config, sort_keys=False, default_flow_style=False))
launch(
_train,
config.machine_config.num_gpus,
+2 -2
View File
@@ -1,7 +1,7 @@
[metadata]
name = mattport
name = radiance
version = 0.0.0
url = https://github.com/ethanweber/mattport.git
url = https://github.com/ethanweber/radiance.git
description = differentiable volume rendering package
long_description = file: README.md
+4 -4
View File
@@ -13,12 +13,12 @@ if USE_CUDA:
ext_modules = [
CUDAExtension(
name="mattport_cuda",
name="radiance_cuda",
sources=[
"mattport/cuda/mattport_cuda.cpp",
"mattport/cuda/mattport_cuda_kernel.cu",
"radiance/cuda/radiance_cuda.cpp",
"radiance/cuda/radiance_cuda_kernel.cu",
],
include_dirs=[os.path.join("mattport", "cuda", "include")],
include_dirs=[os.path.join("radiance", "cuda", "include")],
extra_compile_args={
"cxx": [],
"nvcc": [],
+3 -3
View File
@@ -2,9 +2,9 @@
Test the CUDA bindings.
"""
import torch
from mattport.cuda.sampler import Sampler
from radiance.cuda.sampler import Sampler
import time
import mattport_cuda
import radiance_cuda
import os
@@ -78,7 +78,7 @@ def test_benchmark():
print("PYTORCH_SAMPLE_TIME:", PYTORCH_SAMPLE_TIME)
start = time.time()
time_steps_cu, samples_cu, time_steps_mask_cu = mattport_cuda.sample_uniformly_along_ray_bundle(
time_steps_cu, samples_cu, time_steps_mask_cu = radiance_cuda.sample_uniformly_along_ray_bundle(
origins, directions, nears, fars, offsets, max_num_samples
)
CUDA_SAMPLE_TIME = time.time() - start
+6 -6
View File
@@ -7,12 +7,12 @@ import torch
from torch.utils.data import DataLoader
from tqdm import tqdm
from mattport.nerf.dataset.collate import CollateIterDataset, collate_batch_size_one
from mattport.nerf.dataset.image_dataset import ImageDataset, collate_batch
from mattport.nerf.dataset.utils import get_dataset_inputs
from mattport.nerf.ray_generator import RayGenerator
from mattport.utils.io import get_absolute_path
from mattport.viewer.plotly import visualize_dataset
from radiance.nerf.dataset.collate import CollateIterDataset, collate_batch_size_one
from radiance.nerf.dataset.image_dataset import ImageDataset, collate_batch
from radiance.nerf.dataset.utils import get_dataset_inputs
from radiance.nerf.ray_generator import RayGenerator
from radiance.utils.io import get_absolute_path
from radiance.viewer.plotly import visualize_dataset
def visualize_batch(batch):
+1 -1
View File
@@ -1,7 +1,7 @@
"""
Embedding tests
"""
from mattport.nerf.field_modules.embedding import Embedding
from radiance.nerf.field_modules.embedding import Embedding
def test_indexing():
+1 -1
View File
@@ -3,7 +3,7 @@ Encoding Tests
"""
import pytest
import torch
from mattport.nerf.field_modules import encoding
from radiance.nerf.field_modules import encoding
def test_scaling_and_offset():
@@ -5,7 +5,7 @@ import torch
from torch import nn
import pytest
from mattport.nerf.field_modules.field_heads import (
from radiance.nerf.field_modules.field_heads import (
DensityFieldHead,
FieldHead,
FieldHeadNames,
+1 -1
View File
@@ -4,7 +4,7 @@ MLP Test
import torch
from torch import nn
from mattport.nerf.field_modules import MLP
from radiance.nerf.field_modules import MLP
def test_mlp():
+3 -3
View File
@@ -3,9 +3,9 @@ Test the fields
"""
import torch
from mattport.nerf.field_modules.field_heads import FieldHeadNames
from mattport.nerf.fields.instant_ngp_field import TCNNInstantNGPField
from mattport.structures.rays import PointSamples
from radiance.nerf.field_modules.field_heads import FieldHeadNames
from radiance.nerf.fields.instant_ngp_field import TCNNInstantNGPField
from radiance.structures.rays import PointSamples
def test_tcnn_instant_ngp_field():
+1 -1
View File
@@ -3,7 +3,7 @@ Code to test the occupancy grid.
"""
import torch
from mattport.nerf.occupancy_grid import OccupancyGrid
from radiance.nerf.occupancy_grid import OccupancyGrid
def test_occupancy_grid():
+2 -2
View File
@@ -4,7 +4,7 @@ Test renderers
import pytest
import torch
from mattport.nerf import renderers
from radiance.nerf import renderers
def test_rgb_renderer():
@@ -21,7 +21,7 @@ def test_rgb_renderer():
assert torch.max(rgb) > 0.9
rgb = rgb_renderer(rgb=rgb_samples * 0, weights=weights)
assert torch.max(rgb) == pytest.approx(0)
assert torch.max(rgb) == pytest.approx(0, abs=1e-6)
def test_sh_renderer():
+3 -3
View File
@@ -2,10 +2,10 @@
Test samplers
"""
import torch
from mattport.nerf.sampler import PDFSampler, UniformSampler
from radiance.nerf.sampler import PDFSampler, UniformSampler
from mattport.structures.rays import RayBundle
from mattport.nerf.colliders import NearFarCollider
from radiance.structures.rays import RayBundle
from radiance.nerf.colliders import NearFarCollider
def test_uniform_sampler():
+2 -2
View File
@@ -4,8 +4,8 @@ Test the camera classes.
import torch
from mattport.structures.cameras import PinholeCamera
from mattport.structures.rays import RayBundle
from radiance.structures.cameras import PinholeCamera
from radiance.structures.rays import RayBundle
def test_pinhole_camera():