Esempio n. 1
0
    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)}
Esempio n. 3
0
            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')
Esempio n. 5
0
    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