# Yacs Configs Detectron2 provides a key-value based config system that can be used to obtain standard, common behaviors. This system uses YAML and [yacs](https://github.com/rbgirshick/yacs). Yaml is a very limited language, so we do not expect all features in detectron2 to be available through configs. If you need something that's not available in the config space, please write code using detectron2's API. With the introduction of a more powerful [LazyConfig system](lazyconfigs.md), we no longer add functionality / new keys to the Yacs/Yaml-based config system. ### Basic Usage Some basic usage of the `CfgNode` object is shown here. See more in [documentation](../modules/config.html#detectron2.config.CfgNode). ```python from detectron2.config import get_cfg cfg = get_cfg() # obtain detectron2's default config cfg.xxx = yyy # add new configs for your own custom components cfg.merge_from_file("my_cfg.yaml") # load values from a file cfg.merge_from_list(["MODEL.WEIGHTS", "weights.pth"]) # can also load values from a list of str print(cfg.dump()) # print formatted configs with open("output.yaml", "w") as f: f.write(cfg.dump()) # save config to file ``` In addition to the basic Yaml syntax, the config file can define a `_BASE_: base.yaml` field, which will load a base config file first. Values in the base config will be overwritten in sub-configs, if there are any conflicts. We provided several base configs for standard model architectures. Many builtin tools in detectron2 accept command line config overwrite: Key-value pairs provided in the command line will overwrite the existing values in the config file. For example, [demo.py](../../demo/demo.py) can be used with ```sh ./demo.py --config-file config.yaml [--other-options] \ --opts MODEL.WEIGHTS /path/to/weights INPUT.MIN_SIZE_TEST 1000 ``` To see a list of available configs in detectron2 and what they mean, check [Config References](../modules/config.html#config-references) ### Configs in Projects A project that lives outside the detectron2 library may define its own configs, which will need to be added for the project to be functional, e.g.: ```python from detectron2.projects.point_rend import add_pointrend_config cfg = get_cfg() # obtain detectron2's default config add_pointrend_config(cfg) # add pointrend's default config # ... ... ``` ### Best Practice with Configs 1. Treat the configs you write as "code": avoid copying them or duplicating them; use `_BASE_` to share common parts between configs. 2. Keep the configs you write simple: don't include keys that do not affect the experimental setting.