def evaluate(self, eval_loader): mAP, aps, pr_curves = eval_fcos_det(self.cfg, self.criterion, eval_loader, self.model, rescale=None) logging.info(f"score_threshold:{self.cfg.TEST.SCORE_THRESHOLD}, " f"nms_iou:{self.cfg.TEST.NMS_THRESHOLD}") logging.info(f'mean Average Precision Across All Classes:{mAP}') if mAP > self.best_performance or True: # save PR curve if self.cfg.TEST.PR_CURVE: for class_idx, pr_curve in enumerate(pr_curves): self.writer.add_figure(f'PR_curve/class_{class_idx + 1}', pr_curve, self.iter) logging.info('PR curves saved') # save detected result if self.cfg.TEST.IMAGE_DIR != '': transform = PredictionTransform(resize=cfg.TEST.TEST_SIZE) run_fcos_det_example(self.cfg, self.criterion, self.cfg.TEST.IMAGE_DIR, transform, self.model) logging.info('test detected result saved') return mAP
8: 'Misc', } for label in range(1, cfg.DATASET.NUM_CLASSES): det_result[label] = {} crop_im[label] = {} for i, jpg_path in tqdm(enumerate(jpg_paths)): if jpg_path.split('.')[-1].lower() not in [ 'jpg', 'png', 'jpeg', 'bmp' ]: continue frame_id = int(jpg_path.split('.')[-2].split('/')[-1]) # start from 0 # img:(min_size, max_size, 3), boxes:(obj_num, 4), labels:(obj_num,) numpy type<list> list of array(1) det_output = run_fcos_det_example(cfg, criterion, jpg_path, det_transform, detector, ap_transform=ap_transform, crop_transform=crop_transform) if det_output is None: continue img, crop_img, boxes, labels = det_output boxes[:, 2] = boxes[:, 2] - boxes[:, 0] # w boxes[:, 3] = boxes[:, 3] - boxes[:, 1] # h img = img.cuda(non_blocking=True) img_embs = get_embeddings(emb, img).cpu().data.numpy() assert len(img_embs) == len(crop_img) == len(boxes) == len(labels) for label in range(1, cfg.DATASET.NUM_CLASSES): label_idx = sorted(list(np.where(labels == label)[0])) obj_num = len(label_idx) # {'frame_id': (obj_num, crop_min, crop_max, 3)}
os.mkdir(video_crop_path) video_path = osp.join(args.videos_root, video_name) jpg_paths = [] # read test images if osp.isfile(video_path): jpg_paths = [video_path] elif osp.isdir(video_path): file_names = os.listdir(video_path) jpg_paths = [ osp.join(video_path, file_name) for file_name in file_names ] else: raise FileNotFoundError for i, jpg_path in tqdm(enumerate(jpg_paths)): if jpg_path.split('.')[-1].lower() not in [ 'jpg', 'png', 'jpeg', 'bmp' ]: continue frame_id = int(jpg_path.split('/')[-1].split('.')[-2]) frame_crop_path = osp.join(video_crop_path, str(frame_id)) if not osp.exists(frame_crop_path): os.mkdir(frame_crop_path) img, boxes, labels = run_fcos_det_example(cfg, criterion, jpg_path, transform, model, is_crop=True) write_crop(img, boxes, labels, frame_crop_path)
print(f"==> checkpoint do not exists: \"{cfg.MODEL.RESUME_PATH}\"") raise FileNotFoundError if not osp.exists(cfg.TEST.OUT_DIR): os.mkdir(cfg.TEST.OUT_DIR) # read test images if osp.isfile(args.jpg_path): jpg_paths = [args.jpg_path] elif osp.isdir(args.jpg_path): file_names = os.listdir(args.jpg_path) jpg_paths = [ osp.join(args.jpg_path, file_name) for file_name in file_names ] else: raise FileNotFoundError transform = PredictionTransform(size=(352, 1216)) timer = [] for i, jpg_path in tqdm(enumerate(jpg_paths)): if jpg_path.split('.')[-1].lower() not in [ 'jpg', 'png', 'jpeg', 'bmp' ]: continue start = time.time() img = run_fcos_det_example(cfg, criterion, jpg_path, transform, model) timer.append(time.time() - start) num = jpg_path.split('.')[-2].split('/')[-1] cv2.imwrite(osp.join(cfg.TEST.OUT_DIR, f'run_fcos_example_{num}.jpg'), img) print(f'finnal output dir is {cfg.TEST.OUT_DIR}') print(f'average inference time: {sum(timer) / len(timer)}s')
det_transform = PredictionTransform(size=cfg.TEST.TEST_SIZE) ap_transform = FacenetInferenceTransform(size=(cfg.TEST.CROP_SZIE)) # get det result dict using the detector det_result = {} for i, jpg_path in tqdm(enumerate(jpg_paths)): if jpg_path.split('.')[-1].lower() not in [ 'jpg', 'png', 'jpeg', 'bmp' ]: continue frame_id = int(jpg_path.split('.')[-2].split('/')[-1]) # start from 0 # img:(min_size, max_size, 3), boxes:(obj_num, 4), labels:(obj_num,) numpy type, mean_color <list> list of array(3) img, boxes, labels, mean_color = run_fcos_det_example( cfg, criterion, jpg_path, det_transform, detector, ap_transform=ap_transform, ) boxes[:, 2] = boxes[:, 2] - boxes[:, 0] # w boxes[:, 3] = boxes[:, 3] - boxes[:, 1] # h img = img.cuda(non_blocking=True) img_embs = get_embeddings(emb, img).cpu().data.numpy() assert len(img_embs) == len(boxes) == len(labels) == len(mean_color) obj_num = len(img_embs) # {'frame_id': (obj_num, emb_size+4+1+3) emb x y w h label(float) mean_color(array(3))} det_result[frame_id] = np.zeros((obj_num, emb_size + 4 + 1 + 3)) det_result[frame_id][:, :emb_size] = img_embs det_result[frame_id][:, emb_size:emb_size + 4] = boxes det_result[frame_id][:, emb_size + 4] = labels det_result[frame_id][:, emb_size + 5:] = mean_color