4
0
mirror of https://github.com/nerfstudio-project/nerfstudio.git synced 2026-11-10 18:17:31 +08:00
nerfstudio/docs/developer_guides/config.md
2023-04-04 12:49:15 -07:00

121 lines
4.3 KiB
Markdown

# Customizable configs
Our dataclass configs allow you to easily plug in different permutations of models, dataloaders, modules, etc.
and modify all parameters from a typed CLI supported by [tyro](https://pypi.org/project/tyro/).
### Base components
All basic, reusable config components can be found in `nerfstudio/configs/base_config.py`. The `Config` class at the bottom of the file is the upper-most config level and stores all of the sub-configs needed to get started with training.
You can browse this file and read the attribute annotations to see what configs are available and what each specifies.
### Creating new configs
If you are interested in creating a brand new model or data format, you will need to create a corresponding config with associated parameters you want to expose as configurable.
Let's say you want to create a new model called Nerfacto. You can create a new `Model` class that extends the base class as described [here](pipelines/models.ipynb). Before the model definition, you define the actual `NerfactoModelConfig` which points to the `NerfactoModel` class (make sure to wrap the `_target` classes in a `field` as shown below).
:::{admonition} Tip
:class: info
You can then enable type/auto complete on the config passed into the `NerfactoModel` by specifying the config type below the class definition.
:::
```python
"""nerfstudio/models/nerfacto.py"""
@dataclass
class NerfactoModelConfig(ModelConfig):
"""Nerfacto Model Config"""
_target: Type = field(default_factory=lambda: NerfactoModel)
...
class NerfactoModel(Model):
"""Nerfacto model
Args:
config: Nerfacto configuration to instantiate model
"""
config: NerfactoModelConfig
...
```
The same logic applies to all other custom configs you want to create. For more examples, you can see `nerfstudio/data/dataparsers/nerfstudio_dataparsers.py`, `nerfstudio/data/datamanagers.py`.
:::{admonition} See Also
:class: seealso
For how to create the actual data and model classes that follow the configs, please refer to [pipeline overview](pipelines/index.rst).
:::
### Updating method configs
If you are interested in creating a new model config, you will have to modify the `nerfstudio/configs/method_configs.py` file. This is where all of the configs for implemented models are housed. You can browse this file to see how we construct various existing models by modifying the `Config` class and specifying new or modified default components.
For instance, say we created a brand new model called Nerfacto that has an associated `NerfactoModelConfig`, we can specify the following new Config by overriding the pipeline and optimizers attributes appropriately.
```python
"""nerfstudio/configs/method_configs.py"""
method_configs["nerfacto"] = Config(
method_name="nerfacto",
pipeline=VanillaPipelineConfig(
model=NerfactoModelConfig(eval_num_rays_per_chunk=1 << 14),
),
optimizers={
"proposal_networks": {
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": None,
},
"fields": {
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": None,
},
},
)
```
After placing your new `Config` class into the `method_configs` dictionary, you can provide a description for the model by updating the `descriptions` dictionary at the top of the file.
### Modifying from CLI
Often times, you just want to play with the parameters of an existing model without having to specify a new one. You can easily do so via CLI. Below, we showcase some useful CLI commands.
- List out all existing models
```bash
ns-train --help
```
- List out all exist configurable parameters for `{METHOD_NAME}`
```bash
ns-train {METHOD_NAME} --help
```
- Change the train/eval dataset
```bash
ns-train {METHOD_NAME} --data DATA_PATH
```
- Enable the viewer
```bash
ns-train {METHOD_NAME} --vis viewer
```
- See what options are available for the specified dataparser (e.g. blender-data)
```bash
ns-train {METHOD_NAME} {DATA_PARSER} --help
```
- Run with changed dataparser attributes and viewer on
```bash
# NOTE: the dataparser and associated configurations go at the end of the command
ns-train {METHOD_NAME} --vis viewer {DATA_PARSER} --scale-factor 0.5
```