Yacs 配置¶
Detectron2 提供了一个基于键值对的配置系统,可用于获取标准的通用行为。
此系统使用 YAML 和 yacs。Yaml 是一种非常有限的语言,因此我们不期望 detectron2 中的所有功能都可通过配置获得。如果您需要配置空间中没有的功能,请使用 detectron2 的 API 编写代码。
随着更强大的 延迟配置系统 的引入,我们不再向基于 Yacs/Yaml 的配置系统添加功能/新键。
基本用法¶
这里展示了 CfgNode
对象的一些基本用法。更多信息请参见 文档。
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
除了基本的 Yaml 语法之外,配置文件还可以定义 _BASE_: base.yaml
字段,它将首先加载一个基本配置文件。如果存在任何冲突,子配置中的值将覆盖基本配置中的值。我们为标准模型架构提供了几个基本配置。
detectron2 中的许多内置工具都接受命令行配置覆盖:在命令行中提供的键值对将覆盖配置文件中的现有值。例如,demo.py 可以与以下命令一起使用
./demo.py --config-file config.yaml [--other-options] \
--opts MODEL.WEIGHTS /path/to/weights INPUT.MIN_SIZE_TEST 1000
要查看 detectron2 中可用的配置列表及其含义,请查看 配置参考
项目中的配置¶
位于 detectron2 库外部的项目可以定义自己的配置,这些配置需要添加到项目中才能使其正常工作,例如
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
# ... ...
配置最佳实践¶
将您编写的配置视为“代码”:避免复制或重复它们;使用
_BASE_
在配置之间共享公共部分。保持您编写的配置简单:不要包含不影响实验设置的键。