MCPcopy Index your code
hub / github.com/FoundationVision/ByteTrack / evaluate

Function evaluate

tutorials/transtrack/engine_track.py:84–194  ·  view source on GitHub ↗
(model, criterion, postprocessors, data_loader, base_ds, device, output_dir, tracker=None, 
             phase='train', det_val=False)

Source from the content-addressed store, hash-verified

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

Callers 1

mainFunction · 0.90

Calls 6

reset_allMethod · 0.80
accumulateMethod · 0.80
evalMethod · 0.45
updateMethod · 0.45
init_trackMethod · 0.45
stepMethod · 0.45

Tested by

no test coverage detected