def dump_n_eval(self, outputs, action): """Dump the model's outputs to files and evaluate.""" if not is_primary_worker('global'): return if action == 'init': if os.path.exists(FLAGS.outputs_dump_dir): shutil.rmtree(FLAGS.outputs_dump_dir) os.mkdir(FLAGS.outputs_dump_dir) elif action == 'dump': filename = outputs['predictions']['filename'][0].decode('utf8')[:-4] shape = outputs['predictions']['shape'][0] for idx_cls in range(1, FLAGS.nb_classes): with open(os.path.join(FLAGS.outputs_dump_dir, 'results_%d.txt' % idx_cls), 'a') as o_file: scores = outputs['predictions']['scores_%d' % idx_cls][0] bboxes = outputs['predictions']['bboxes_%d' % idx_cls][0] bboxes[:, 0] = (bboxes[:, 0] * shape[0]).astype(np.int32, copy=False) + 1 bboxes[:, 1] = (bboxes[:, 1] * shape[1]).astype(np.int32, copy=False) + 1 bboxes[:, 2] = (bboxes[:, 2] * shape[0]).astype(np.int32, copy=False) + 1 bboxes[:, 3] = (bboxes[:, 3] * shape[1]).astype(np.int32, copy=False) + 1 for idx_bbox in range(bboxes.shape[0]): bbox = bboxes[idx_bbox][:] if bbox[2] > bbox[0] and bbox[3] > bbox[1]: o_file.write('%s %.3f %.1f %.1f %.1f %.1f\n' % (filename, scores[idx_bbox], bbox[1], bbox[0], bbox[3], bbox[2])) elif action == 'eval': do_python_eval(os.path.join(self.dataset_eval.data_dir, 'test'), FLAGS.outputs_dump_dir) else: raise ValueError('unrecognized action in dump_n_eval(): ' + action)
def dump_n_eval(self, outputs, action): """Dump the model's outputs to files and evaluate.""" if not is_primary_worker('global'): return if action == 'init': if os.path.exists(FLAGS.outputs_dump_dir): shutil.rmtree(FLAGS.outputs_dump_dir) os.mkdir(FLAGS.outputs_dump_dir) elif action == 'dump': filename = outputs['predictions']['filename'][0].decode('utf8')[:-4] raw_shape = outputs['predictions']['shape'][0] resized_shape= outputs['predictions']['resized_shape'] detected_boxes = outputs['predictions']['detected_boxes'] detected_scores = outputs['predictions']['detected_scores'] detected_categories = outputs['predictions']['detected_categories'] raw_h, raw_w = raw_shape[0], raw_shape[1] resized_h, resized_w = resized_shape[1], resized_shape[2] xmin, ymin, xmax, ymax = detected_boxes[:, 0], detected_boxes[:, 1], \ detected_boxes[:, 2], detected_boxes[:, 3] xmin = xmin * raw_w / resized_w xmax = xmax * raw_w / resized_w ymin = ymin * raw_h / resized_h ymax = ymax * raw_h / resized_h boxes = np.transpose(np.stack([xmin, ymin, xmax, ymax])) dets = np.hstack((detected_categories.reshape(-1, 1), detected_scores.reshape(-1, 1), boxes)) for cls_id in range(1, FLAGS.nb_classes): with open(os.path.join(FLAGS.outputs_dump_dir, 'results_%d.txt' % cls_id), 'a') as o_file: this_cls_detections = dets[dets[:, 0] == cls_id] if this_cls_detections.shape[0] == 0: continue # this cls has none detections in this img for a_det in this_cls_detections: o_file.write('{:s} {:.3f} {:.1f} {:.1f} {:.1f} {:.1f}\n'. format(filename, a_det[1], a_det[2], a_det[3], a_det[4], a_det[5])) # that is [img_name, score, xmin, ymin, xmax, ymax] elif action == 'eval': do_python_eval(os.path.join(self.dataset_eval.data_dir, 'test'), FLAGS.outputs_dump_dir) else: raise ValueError('unrecognized action in dump_n_eval(): ' + action)