MCPcopy Create free account
hub / github.com/PeizeSun/TransTrack / evaluate

Function evaluate

engine.py:83–166  ·  view source on GitHub ↗
(model, criterion, postprocessors, data_loader, base_ds, device, output_dir)

Source from the content-addressed store, hash-verified

81
82@torch.no_grad()
83def evaluate(model, criterion, postprocessors, data_loader, base_ds, device, output_dir):
84 model.eval()
85 criterion.eval()
86
87 metric_logger = utils.MetricLogger(delimiter=" ")
88 metric_logger.add_meter('class_error', utils.SmoothedValue(window_size=1, fmt='{value:.2f}'))
89 header = 'Test:'
90
91 iou_types = tuple(k for k in ('segm', 'bbox') if k in postprocessors.keys())
92 coco_evaluator = CocoEvaluator(base_ds, iou_types)
93 # coco_evaluator.coco_eval[iou_types[0]].params.iouThrs = [0, 0.1, 0.5, 0.75]
94
95 panoptic_evaluator = None
96 if 'panoptic' in postprocessors.keys():
97 panoptic_evaluator = PanopticEvaluator(
98 data_loader.dataset.ann_file,
99 data_loader.dataset.ann_folder,
100 output_dir=os.path.join(output_dir, "panoptic_eval"),
101 )
102
103 for samples, targets in metric_logger.log_every(data_loader, 10, header):
104 samples = samples.to(device)
105 targets = [{k: v.to(device) for k, v in t.items()} for t in targets]
106
107 outputs = model(samples)
108 loss_dict = criterion(outputs, targets)
109 weight_dict = criterion.weight_dict
110
111 # reduce losses over all GPUs for logging purposes
112 loss_dict_reduced = utils.reduce_dict(loss_dict)
113 loss_dict_reduced_scaled = {k: v * weight_dict[k]
114 for k, v in loss_dict_reduced.items() if k in weight_dict}
115 loss_dict_reduced_unscaled = {f'{k}_unscaled': v
116 for k, v in loss_dict_reduced.items()}
117 metric_logger.update(loss=sum(loss_dict_reduced_scaled.values()),
118 **loss_dict_reduced_scaled,
119 **loss_dict_reduced_unscaled)
120 metric_logger.update(class_error=loss_dict_reduced['class_error'])
121
122 orig_target_sizes = torch.stack([t["orig_size"] for t in targets], dim=0)
123 results = postprocessors['bbox'](outputs, orig_target_sizes)
124 if 'segm' in postprocessors.keys():
125 target_sizes = torch.stack([t["size"] for t in targets], dim=0)
126 results = postprocessors['segm'](results, outputs, orig_target_sizes, target_sizes)
127 res = {target['image_id'].item(): output for target, output in zip(targets, results)}
128 if coco_evaluator is not None:
129 coco_evaluator.update(res)
130
131 if panoptic_evaluator is not None:
132 res_pano = postprocessors["panoptic"](outputs, target_sizes, orig_target_sizes)
133 for i, target in enumerate(targets):
134 image_id = target["image_id"].item()
135 file_name = f"{image_id:012d}.png"
136 res_pano[i]["image_id"] = image_id
137 res_pano[i]["file_name"] = file_name
138
139 panoptic_evaluator.update(res_pano)
140

Callers 1

mainFunction · 0.90

Calls 15

add_meterMethod · 0.95
log_everyMethod · 0.95
updateMethod · 0.95
updateMethod · 0.95
updateMethod · 0.95
accumulateMethod · 0.95
summarizeMethod · 0.95
summarizeMethod · 0.95
CocoEvaluatorClass · 0.90

Tested by

no test coverage detected