配置系统¶
配置系统是Pet在训练和测试过程中,用户对各个环节进行配置的控制台。配置系统使得Pet运行过程中的设置变得灵活、高效和容易实现,同时配置系统还为pet提供了可扩展的配置,使得Pet用户能够自定义配置,不仅如此,配置系统还包括以下优点。
配置设置易读性:由于配置系统是基于YAML文件类型,YAML文件具备可读性高、和脚本语言交互性好以及扩展性高等优势,所有训练测试过程中的配置信息都存放在YAML文本文件中,可以使用文本编辑器直接修改和设置相应配置细节。
更新的便捷与即时性:由于配置系统具有参数配置高度集成的特点,在配置系统中某些配置被更改后,无需再逐一修改训练与测试中的脚本文件,大大提升了用户在优化迭代及测试过程中的效率。
可扩展性:配置系统具有很强的扩展性,用户可根据自身需求在配置系统中添加所需参数,同时利用配置系统,用户能够自定义配置细节。
我们使用YAML文件将训练和测试过程中的参数以键值对的形式进行保存,同时针对Pet的不同组件以及各任务中的具体操作参数使用层级关系进行对应。在配置文件书写过程中需注意的是YAML对大小写敏感,需严格注意Pet提供参数的大小写;对于每个对象的格式表达为key: value,同时冒号后面要加一个空格。
在代码中,所有的配置通过 yacs.config.CfgNode 类记录。配置的默认值在 pet/lib/config 中设置,请注意添加配置时需先在该文件中设置默认值。
修改配置¶
为保证Pet的统一,默认配置设置完成后,如无特殊原因将不会修改。在模型使用中,若想修改配置,可以通过 yaml 文件和终端指令修改配置。
示例:
yaml文件修改配置:
MODEL.BACKBONE = 'resnet'MODEL: BACKBONE: "resnet"
终端指令修改配置:
TRAIN.BATCH_SIZE = 1python tools/train_net_all.py --cfg /path/to/cfg TRAIN.BATCH_SIZE 1
配置系统的结构与内容¶
默认配置文件的目录如下:
pet.lib.config
|--- __init__.py
|--- config.py
|--- data.py
|--- solver.py
|--- model/
|--- backbone.py
|--- neck.py
|--- head.py
|--- model.py
根据配置的分类,在相应的文件中进行设置。
配置文件的一级字段包含一下内容:
MISC:基础配置
ANALYSER:analyser相关配置
EVAL:评估阶段配置
VIS:可视化配置
DATA:数据相关配置
TRAIN:训练配置
TEST:测试配置
SOLVER:优化器及调度器配置
MODEL:模型配置
配置关联¶
为便捷使用,Pet提供了配置之间的判断关联,可以设置某些字段为特定值时,调整另一配置。配置的交互部分在 pet/lib/config/__init__.py 的 infer_cfg 函数中。
示例:
当语义分割中某一具体模型启用时,启用语义分割Head:
if (cfg.MODEL.GLOBAL_HEAD.SEMSEG.AUXSEG_ON or cfg.MODEL.GLOBAL_HEAD.SEMSEG.FUSEDNET_ON or cfg.MODEL.GLOBAL_HEAD.SEMSEG.MASKFORMER_ON or cfg.MODEL.GLOBAL_HEAD.SEMSEG.PFPNNET_ON or cfg.MODEL.GLOBAL_HEAD.SEMSEG.PSPNET_ON or cfg.MODEL.GLOBAL_HEAD.SEMSEG.SEMSEGFPN_ON): # noqa: E129 cfg.MODEL.GLOBAL_HEAD.SEMSEG_ON = True
当某一类型可视化启用时,开启可视化模块:
if (cfg.VIS.BOX.ENABLED or cfg.VIS.CLASS.ENABLED or cfg.VIS.KEYPOINT.ENABLED or cfg.VIS.MASK.ENABLED or cfg.VIS.PANOSEG.ENABLED or cfg.VIS.PARSING.ENABLED or cfg.VIS.SEMSEG.ENABLED): # noqa: E129 cfg.VIS.ENABLED = True