mirror of
https://github.com/nerfstudio-project/nerfstudio.git
synced 2026-11-11 10:34:29 +08:00
* in progress. camera_indices broken * faster dataloader. starting on pixel sampler logic * imagesampler and pixelsampler * lint and black * continuing merge * pytest working * fixed docs * docs * minor changes
79 lines
2.2 KiB
Python
79 lines
2.2 KiB
Python
"""
|
|
Miscellaneous helper code.
|
|
"""
|
|
|
|
import hashlib
|
|
import json
|
|
from pydoc import locate
|
|
from typing import Any, Dict
|
|
|
|
import torch
|
|
from omegaconf import DictConfig
|
|
|
|
|
|
class DotDict(dict):
|
|
"""
|
|
dot.notation access to dictionary attributes
|
|
"""
|
|
|
|
def __getattr__(self, attr):
|
|
return self[attr]
|
|
|
|
__setattr__ = dict.__setitem__
|
|
__delattr__ = dict.__delitem__
|
|
|
|
|
|
def get_dict_to_torch(stuff, device="cpu"):
|
|
"""Set everything in the dict to the specified torch device."""
|
|
if isinstance(stuff, dict):
|
|
for k, v in stuff.items():
|
|
stuff[k] = get_dict_to_torch(v, device)
|
|
return stuff
|
|
if isinstance(stuff, torch.Tensor):
|
|
return stuff.to(device)
|
|
return stuff
|
|
|
|
|
|
def get_dict_to_cpu(stuff):
|
|
"""Set everything in the dict to CPU."""
|
|
if isinstance(stuff, dict):
|
|
for k, v in stuff.items():
|
|
stuff[k] = get_dict_to_cpu(v)
|
|
return stuff
|
|
if isinstance(stuff, torch.Tensor):
|
|
return stuff.detach().cpu()
|
|
return stuff
|
|
|
|
|
|
def is_not_none(var):
|
|
"""Return True if the variable var is None."""
|
|
return not isinstance(var, type(None))
|
|
|
|
|
|
def get_masked_dict(d, mask):
|
|
"""Return a masked dictionary.
|
|
TODO(ethan): add more asserts/checks so this doesn't have unpredictable behavior."""
|
|
masked_dict = {}
|
|
for key, value in d.items():
|
|
masked_dict[key] = value[mask]
|
|
return masked_dict
|
|
|
|
|
|
def instantiate_from_dict_config(dict_config: DictConfig, **kwargs):
|
|
"""Our version of hydra's instantiate function."""
|
|
dict_config_kwargs = {k: v for k, v in dict_config.items() if k != "_target_"}
|
|
uninstantiated_class = locate(dict_config._target_) # pylint: disable=protected-access
|
|
all_kwargs = dict_config_kwargs
|
|
all_kwargs.update(kwargs)
|
|
instantiated_class = uninstantiated_class(**all_kwargs)
|
|
return instantiated_class
|
|
|
|
|
|
def get_hash_str_from_dict(dictionary: Dict[str, Any]) -> str:
|
|
"""MD5 hash of a dictionary. Based on
|
|
https://www.doc.ic.ac.uk/~nuric/coding/how-to-hash-a-dictionary-in-python.html"""
|
|
dhash = hashlib.md5()
|
|
encoded = json.dumps(dictionary, sort_keys=True).encode()
|
|
dhash.update(encoded)
|
|
return dhash.hexdigest()
|