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
_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)