Example #1
0
 def step_epoch(self):
     '''
     return map_mean, map_50, map_75
     note: this function will set self.net.train() at last
     '''
     with torch.no_grad():
         self.net.eval()
         pred_bboxes, pred_labels, pred_scores, gt_bboxes, gt_labels = [], [], [], [], []
         for i, (imgs, boxes, labels, locs,
                 scales) in enumerate(self.loader):
             if i == 0:
                 batch_size = int(imgs.shape[0])
             temp = self.net(imgs, locs)
             pred_cls_i, pred_cls_p, pred_reg = get_pred(
                 temp, self.net.module.nms_th,
                 self.net.module.nms_iou)  # DataParallel
             for idx in range(len(pred_cls_i)):
                 pred_cls_i[idx] = pred_cls_i[idx].cpu().detach().numpy()
                 pred_cls_p[idx] = pred_cls_p[idx].cpu().detach().numpy()
                 pred_reg[idx] = pred_reg[idx].cpu().detach().numpy()
             _boxes, _label = [], []
             for idx in range(boxes.shape[0]):
                 mask = labels[idx] > 0
                 _boxes.append(boxes[idx][mask].detach().numpy())
                 _label.append(labels[idx][mask].detach().numpy())
             pred_bboxes += pred_reg
             pred_labels += pred_cls_i
             pred_scores += pred_cls_p
             gt_bboxes += _boxes
             gt_labels += _label
             print('  Eval: {}/{}'.format(i * batch_size,
                                          len(self.dataset)),
                   end='\r')
         ap_iou = [0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95]
         ap_res = []
         for iou_th in ap_iou:
             res = eval_detection(pred_bboxes,
                                  pred_labels,
                                  pred_scores,
                                  gt_bboxes,
                                  gt_labels,
                                  iou_th=iou_th)
             ap_res.append(res)
         ap_sum = 0.0
         for i in range(len(ap_res)):
             ap_sum += float(ap_res[i]['map'])
         map_mean = ap_sum / float(len(ap_res))
         map_50 = float(ap_res[0]['map'])
         map_75 = float(ap_res[5]['map'])
         print('map_mean:', map_mean, 'map_50:', map_50, 'map_75:', map_75)
         self.net.train()
         return map_mean, map_50, map_75
Example #2
0
            _boxes.append(bbox[idx][mask].detach().numpy())
            _label.append(label[idx][mask].detach().numpy())
        pred_bboxes += reg_preds
        pred_labels += cls_i_preds
        pred_scores += cls_p_preds
        gt_bboxes += _boxes
        gt_labels += _label
        print('  Eval: {}/{}'.format(i * cfg['nbatch_eval'],
                                     len(dataset_eval)),
              end='\r')
    ap_iou = [0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95]
    ap_res = []
    for iou_th in ap_iou:
        res = eval_detection(pred_bboxes,
                             pred_labels,
                             pred_scores,
                             gt_bboxes,
                             gt_labels,
                             iou_th=iou_th)
        ap_res.append(res)

    ap_sum = 0.0
    for i in range(len(ap_res)):
        ap_sum += float(ap_res[i]['map'])
    map_mean = ap_sum / float(len(ap_res))
    map_50 = float(ap_res[0]['map'])
    map_75 = float(ap_res[5]['map'])

    print('map_mean')
    print(map_mean)
    print('map_50')
    print(map_50)