之前已经解读了parse_args()子程序。
在这第二篇解读博客中,我们先解读三个子程序再回到我们的主函数中。
主要代码为三个子程序cfg_from_file(args.cfg_file),cfg_from_list(args.set_cfgs),cfg,这两个子程序以及变量路径为/py-faster-rcnn/lib/fast_rcnn/config.py
首先是
cfg
先解析前面几行代码
from easydict import EasyDict as edict
__C = edict()
cfg = __C
__C.TRAIN = edict()
__C.TRAIN.SCALES = (600,)
EasyDict可以使得变量以属性的方式去访问字典的值
__C = edict() 将 __C 变成一个字典。
cfg = __C 在这里将__C 的地址给了cfg,在下面更改__C 时也同时更改了cfg的值。
__C.TRAIN = edict() 将 __C.TRAIN也改变为一个字典,整体就是字典中嵌套一个字典。
__C.TRAIN.SCALES = (600,) 给字典 __C.TRAIN 中设置一个变量 SCALES 并赋值为 (600,) 。
下面的都是一样进行赋值,不做重复解释。
所以在主函数中“cfg.GPU_ID = args.gpu_id”是给cfg这个字典中的GPU_ID进行赋值,取值为之前设定的参数args.gpu_id,在默认中我们设置为0。
cfg_from_file(filename)
def cfg_from_file(filename):
"""Load a config file and merge it into the default options."""
import yaml
with open(filename, 'r') as f:
yaml_cfg = edict(yaml.load(f))
_merge_a_into_b(yaml_cfg, __C)
在这段子程序中通过以写的方式打开文件“filename”(with open(filename, ‘r’) as f),并使用edict()将文件的内容变更为一个字典的数据结构赋值给 yaml_cfg ( yaml_cfg = edict(yaml.load(f)) ),最后程序调用了_merge_a_into_b(a,b)将a与b合并。接下来来解读这个子程序的内容 (_merge_a_into_b(yaml_cfg, __C)) 。
def _merge_a_into_b(a, b):