(self, config_file, noginfo=False, spec_ginfo_index=None)
| 141 | class Config(object): |
| 142 | |
| 143 | def __init__(self, config_file, noginfo=False, spec_ginfo_index=None): |
| 144 | |
| 145 | with open(config_file) as f: |
| 146 | config = yaml.load(f, Loader=loader) |
| 147 | # print('config',config) |
| 148 | self.config_path = config_file |
| 149 | |
| 150 | world_size = dist.get_world_size() |
| 151 | rank = dist.get_rank() |
| 152 | |
| 153 | if noginfo: |
| 154 | ginfo = None |
| 155 | else: # cherrypick from tasks |
| 156 | tasks = config['tasks'] |
| 157 | num_tasks = len(tasks) |
| 158 | if spec_ginfo_index is not None: |
| 159 | assert spec_ginfo_index < len(tasks), \ |
| 160 | 'spec_ginfo_index={} is larger than num_tasks={}'.format(spec_ginfo_index, len(tasks)) |
| 161 | tmp_config = copy.deepcopy(config) |
| 162 | config['tasks'] = dict() |
| 163 | config['tasks'][0] = tmp_config['tasks'][spec_ginfo_index] |
| 164 | config['tasks'][0]['gres_ratio'] = 1 |
| 165 | tasks = config['tasks'] |
| 166 | num_tasks = len(tasks) |
| 167 | |
| 168 | # parse task_common and assign to each task |
| 169 | task_common = config.get('task_common', None) |
| 170 | if task_common is not None: |
| 171 | for i in range(num_tasks): |
| 172 | for k,v in task_common.items(): |
| 173 | if not k in tasks[i]: |
| 174 | printlog('setting {} to {} for task {}'.format(k, v, i)) |
| 175 | tasks[i][k] = v |
| 176 | |
| 177 | group_spec = [tasks[i].get('gres_ratio',1) for i in range(num_tasks)] |
| 178 | |
| 179 | ## share group spec |
| 180 | if config['common'].get('share_backbone_group', False): |
| 181 | share_backbone_group_ids = config['common']['share_backbone_group'][:num_tasks] |
| 182 | else: |
| 183 | share_backbone_group_ids = [0 for i in range(num_tasks)] # hardcoded prior |
| 184 | |
| 185 | if config['common'].get('share_neck_group', False): |
| 186 | share_neck_group_ids = config['common']['share_neck_group'][:num_tasks] |
| 187 | else: |
| 188 | share_neck_group_ids = [0 for i in range(num_tasks)] # hardcoded prior |
| 189 | |
| 190 | if config['common'].get('share_decoder_group', False): |
| 191 | share_decoder_group_ids = config['common']['share_decoder_group'][:num_tasks] |
| 192 | else: |
| 193 | share_decoder_group_ids = [i for i in range(num_tasks)] # hardcoded prior |
| 194 | |
| 195 | ginfo = specific_group_split(group_spec, share_backbone_group_ids, share_neck_group_ids, share_decoder_group_ids) |
| 196 | loss_weight_sum = float(np.sum(np.array([task['loss_weight'] for task in tasks.values()]))) |
| 197 | ginfo.task_name = tasks[ginfo.task_id]['name'] |
| 198 | ginfo.task_names = [tasks[i]['name'] for i in range(ginfo.task_num)] |
| 199 | ginfo.task_weight = float(tasks[ginfo.task_id]['loss_weight']) / loss_weight_sum |
| 200 | ginfo.task_type = tasks[ginfo.task_id].get('type', 'normal') |
nothing calls this directly
no test coverage detected