mirror of
https://github.com/nerfstudio-project/nerfstudio.git
synced 2026-11-15 20:33:59 +08:00
* starting the framework for dreamfusion * Removed view direction from RGB to calculate albedo * Started diffusion * Added dreamfusion to CLI, removed direction embeddings * Normals in dreamfusion * Lambertian shading added * Train normals in Dreamfusion * Stable diffusion from Stable Dreamfusion * Fix normal orientation loss * Configurable light direction sampling * adding density initalization at origin * V1 datamanager * Don't train normals for first 1k iters * SDS loss added to dreamfusion * Dreamfusion pipeline * Background MLP and SphereCollider * Normals prediction training fixed * Sigmoid on background, prompt in config * Shading hyperparameter adjustements * Shading hyperparameter tuning * Location based prompting, density initialization fades, LR change * Cleaned imports, more config options * Tuning, more config changes * remove unused sampler, normalize predicted normals from network * change position encoding to direction encoding for background color mlp * Updating dreamfusion to use custom trainer, fixed bug, multi-gpu support (put diffusion on one specific device), merged with main * Hard coding less, offloading to config * Appeasing the linter * First pass opacity / sparsity losses * Small patches and configs * Accidentally pushed logs * Removing logs for real this time * Transmittance loss bug fix * 12 GB Dreamfusion! * Lint * Remove unecissary collider changes * Start SD cleanup * Cleanup SD code * adding overhead location prompting * Use lambertian renderer * turn grad accum off by default, decrease background mlp size, add overhead text embedding * Cleanup * Fix normals vis * change uniform sampler to prediction network, add option to jit unet for faster sds_loss * Use shaders * cleaning up jit code * add warning if using non jit unet * add proposal network optimizer to config * speed up render and cleanup code * Clean up datamanager * Add distortion loss * fix wanb * adding interpolated location sampling * Update configs * interpolated location prompting option, lowering init density, transmittance loss interpolation flipped * rename alphas mult to alphas loss mult * Mess around with normals * add option to use random bg color + bg mlp * Remove Dreamfusion Trainer (#1423) * Dreamfusion trainer no longer needed * Added typing for grad scaler * SDS return loss * Fix CFG * Cleanup * Update configs * Fix opacity loss, use unform sampling first round of prop * add prompt edditing to viewer * Choose your own diffusion * remove dreamfusion pipeline file * merging + remove dreamfusion pipeline file * Update configs * add stable diff utils * cleanup * cleanup * Fix test * positional prompting bugfix * Warmups * tune * lint * Remove dataparser * merging + text embedding bugfix * Set data path to launch viewer for DreamFusion (#1776) * Set data path to launch viewer for DreamFusion * Apply formatter * Fallback to 'base_dir' if data manager has no path * Make if statement non-inline * Reformat --------- Co-authored-by: Matthew Tancik <mattt4001@gmail.com> * add deepfloyd option first try * merging * merging from main * merging * removing comments, cleaning code, making stable diff utils usable for deepfloyd, remove deepfloyd text encoder after use * undo chagnes in data folder * cleaning code, removing unneccesary changes from main, removed normals prediction network * remove old scripts files, rename generative pipeline flag to no_input_data, revert to default histogram padding in proposal sampler * changing pipeline flag * move no input data flag from pipeline to datamanager * undo config and merge in deepfloyd from main * merging grad scaler pipeline addition * merging + setting proposal net scheduler * revert nerfacto config change * typing + linting * rename dreamfusion datamanager to random camras datamanager, check datamanager typing in pipeline and trainer * fix test import * fix test import * changing datamanager check in trainer, add typing in random cameras datamanager * add Tensor to randomcamerasdatamanager * remove old comments * resolve tyro warning * update fields to use tcnn * lint * add packages for deepfloyd * add versions * docs first draft * rename to generfacto, clean docs * fix import error * minor changes * fix orientation loss bug, retune params * cleanup * typing * trying docs fix * fixing generative package imports * fix pyright * docs fix * merge w main * docs minor change * tuning + bugfixes * remove torch.backends --------- Co-authored-by: Abhik Ahuja <ahujaabhik@berkeley.edu> Co-authored-by: David McAllister <davidrmc2@gmail.com> Co-authored-by: Jake Austin <jake-austin@berkeley.edu> Co-authored-by: Matthew Tancik <tancik@berkeley.edu> Co-authored-by: Matt Tancik <mattt4001@gmail.com> Co-authored-by: SeungWoo Yoo <dreamy1534@gmail.com> Co-authored-by: ayaanzhaque <ayaanzhaque@gmail.com> Co-authored-by: Ayaan Haque <ayaanzhaque@berkeley.edu>
95 lines
2.9 KiB
Python
95 lines
2.9 KiB
Python
"""
|
|
Test pipeline
|
|
"""
|
|
from pathlib import Path
|
|
|
|
import torch
|
|
from torch import nn
|
|
|
|
from nerfstudio.cameras.cameras import Cameras
|
|
from nerfstudio.data.datasets.base_dataset import DataparserOutputs, InputDataset
|
|
from nerfstudio.pipelines.base_pipeline import (
|
|
Model,
|
|
ModelConfig,
|
|
VanillaPipeline,
|
|
VanillaPipelineConfig,
|
|
)
|
|
from nerfstudio.data.datamanagers.base_datamanager import VanillaDataManagerConfig
|
|
|
|
|
|
class MockedDataManager:
|
|
"""Mocked data manager"""
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
num_images = 0
|
|
self.train_dataset = InputDataset(
|
|
DataparserOutputs(
|
|
image_filenames=[Path("filename.png")] * num_images,
|
|
cameras=Cameras(
|
|
camera_to_worlds=torch.ones([num_images, 3, 4], dtype=torch.float32),
|
|
fx=1.0,
|
|
fy=1.0,
|
|
cx=1.0,
|
|
cy=1.0,
|
|
width=2,
|
|
height=2,
|
|
),
|
|
)
|
|
)
|
|
|
|
def to(self, *args, **kwargs):
|
|
"Mocked to"
|
|
return self
|
|
|
|
|
|
def test_load_state_dict():
|
|
"""Test pipeline load_state_dict calls model's load_state_dict"""
|
|
was_called = False
|
|
|
|
class MockedModel(Model): #
|
|
"""Mocked model"""
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self.register_parameter("param", nn.Parameter(torch.ones((3,))))
|
|
self.register_module(
|
|
"module", Model(*args, **kwargs)
|
|
) # make sure that non-DDP checkpoint won't be processed as DDP one
|
|
|
|
def load_state_dict(self, state_dict, strict=True):
|
|
"""Mocked load_state_dict"""
|
|
nonlocal was_called
|
|
was_called = True
|
|
assert strict
|
|
assert "param" in state_dict
|
|
assert "module.device_indicator_param" in state_dict
|
|
|
|
config = VanillaPipelineConfig(
|
|
datamanager=VanillaDataManagerConfig(
|
|
_target=MockedDataManager,
|
|
),
|
|
model=ModelConfig(_target=MockedModel),
|
|
)
|
|
pipeline = VanillaPipeline(config, "cpu")
|
|
state_dict = pipeline.state_dict()
|
|
state_dict["_model.param"].mul_(2)
|
|
pipeline.load_pipeline(state_dict, 0)
|
|
assert was_called
|
|
assert getattr(pipeline.model, "param")[0].item() == 2
|
|
|
|
# preparation for another test
|
|
state_dict["_model.param"].mul_(2)
|
|
was_called = False
|
|
# pretends to be a DDP checkpoint
|
|
ddp_state_dict = {}
|
|
for key, value in state_dict.items():
|
|
if key.startswith("_model."):
|
|
# replace the prefix "_model" with "_model.module"
|
|
ddp_state_dict["_model.module." + key[len("_model.") :]] = value
|
|
else:
|
|
ddp_state_dict[key] = value
|
|
# load DDP checkpoint
|
|
pipeline.load_pipeline(ddp_state_dict, 0)
|
|
assert was_called
|
|
assert getattr(pipeline.model, "param")[0].item() == 4
|