| |
| |
| |
| |
| |
| |
| import math |
|
|
|
|
| |
| def hook_metadata(metadata, name): |
| if name == 'cityscapes_fine_sem_seg_val': |
| metadata.__setattr__("keep_sem_bgd", False) |
| return metadata |
|
|
| def hook_opt(model, name): |
| if name in ['cityscapes_fine_panoptic_val', 'ade20k_panoptic_val', 'bdd10k_40_panoptic_val', 'cityscapes_fine_panoptic_val', 'scannet_21_panoptic_val']: |
| model.model.object_mask_threshold = 0.4 |
| else: |
| model.model.object_mask_threshold = 0.8 |
|
|
| |
| def hook_switcher(model, name): |
| mappings = {} |
| if name in ['cityscapes_fine_sem_seg_val', 'scannet_21_val_seg', 'scannet_38_val_seg', 'scannet_41_val_seg', 'sunrgbd_37_val_seg', 'bdd10k_val_sem_seg', 'ade20k_full_sem_seg_val']: |
| mappings = {'SEMANTIC_ON': True, 'INSTANCE_ON': False, 'PANOPTIC_ON': False} |
| elif name in ['cityscapes_fine_instance_seg_val'] or 'seginw' in name: |
| mappings = {'SEMANTIC_ON': False, 'INSTANCE_ON': True, 'PANOPTIC_ON': False} |
| elif name in ['cityscapes_fine_panoptic_val', 'scannet_21_panoptic_val', 'bdd10k_40_panoptic_val']: |
| mappings = {'SEMANTIC_ON': True, 'INSTANCE_ON': False, 'PANOPTIC_ON': True} |
| elif name in ['coco_2017_val_panoptic_with_sem_seg', 'ade20k_panoptic_val', 'coco_2017_test-dev']: |
| mappings = {'SEMANTIC_ON': True, 'INSTANCE_ON': True, 'PANOPTIC_ON': True} |
| else: |
| if name not in ["vlp_val", "vlp_captioning_val", "vlp_val2017", "vlp_captioning_val2017", "imagenet_val", "refcocog_val_google", "phrasecut_val", "phrasecut_test", "refcocop_val_unc", "refcoco_val_unc", "refcocog_val_umd"]: |
| assert False, "dataset switcher is not defined" |
| for key, value in mappings.items(): |
| if key == 'SEMANTIC_ON': |
| model.model.semantic_on = value |
| if key == 'INSTANCE_ON': |
| model.model.instance_on = value |
| if key == 'PANOPTIC_ON': |
| model.model.panoptic_on = value |
|
|
| class AverageMeter(object): |
| """Computes and stores the average and current value.""" |
| def __init__(self): |
| self.reset() |
|
|
| def reset(self): |
| self.val = 0 |
| self.avg = 0 |
| self.sum = 0 |
| self.count = 0 |
|
|
| def update(self, val, n=1, decay=0): |
| self.val = val |
| if decay: |
| alpha = math.exp(-n / decay) |
| self.sum = alpha * self.sum + (1 - alpha) * val * n |
| self.count = alpha * self.count + (1 - alpha) * n |
| else: |
| self.sum += val * n |
| self.count += n |
| self.avg = self.sum / self.count |
|
|