Configs
detectron2提供了一个基于k-v的配置问题体系,能够被用于标准通用的一些行为。
detectron2的配置文件使用yaml和yacs类型数据。为了提供基本操作和更新配置文件,我们提供了如下的额外功能:
-
配置文件可能含有_BASE_:base.yaml字段,该字段首先加载一个基本配置文件。base配置文件中的一些值将会被子配置文件所覆盖。我们为标准模型架构提供了几个base配置。
-
我们提供了配置的版本控制,向后兼容。
配置文件是一个非常有局限性的语言。我们不希望detectron2中所有的特征都通过配置文件来激活。如果你需要在配置空间中令某些配置不可用,清使用detectron2的api编写代码。
Basic Usage
一些cfgNode对象的基础用法被展示在这里,更过请阅读documentation.
from detectron2.config import get_cfg
cfg = get_cfg() # 获取detectron2的默认配置
cfg.xxx = yyy # 在你的自定义部分添加新的配置
cfg.merge_from_file("my_cfg.yaml") # 从文件获取一些配置值
cfg.merge_from_list(["MODEL.WEIGHTS", "weights.pth"]) # 也可以从一个list获取一些值
print(cfg.dump) # 输出格式化的配置文件
很多detectron2的内置工具能够接受命令行覆盖配置文件:命令行中的k-v对能够覆盖配置文件中的值。例如,demo.py可以像下面这样使用
./demo.py --config-file config.yaml [--other-options] --opts MODEL.WEIGHTS /path/to/weights INPUT.MIN_SIZE_TEST 1000
更过细节,请看 Config References。
Configs in Projects
一个存在于detectron2库外的工程可以定义它自己的配置,只需要通过自定义方法来添加到工程,例如:
from point_rend import add_pointrend_config
cfg = get_cfg() # 获取detectron2的默认配置
add_pointrend_config(cfg) # 添加pointrend的默认配置
Best Practice with Configs
-
像代码一样对待你的配置。避免复制它们;使用_BASE_来分享配置中的共用的部分。
-
保持你些的配置简单:不要包含不会影响实验设置的配置。
-
在你的配置文件中记录一个版本号,例如:VERSION: 2。向后兼容。当读取没有版本号的配置时,我们会打印一个警告。官方配置不包括版本号,因为它们总是最新的。