def eval(dataloader, head_detector): """ Given the dataloader of the test split compute the average corLoc of the dataset using the head detector model given as the argument to the function. """ test_img_num = 0 test_corrLoc = 0.0 for _, (img, bbox_, scale) in enumerate(dataloader): scale = at.scalar(scale) img, bbox = img.cuda().float(), bbox_.cuda() img, bbox = Variable(img), Variable(bbox) pred_bboxes_, _ = head_detector.predict(img, scale, mode='evaluate') gt_bboxs = at.tonumpy(bbox_)[0] pred_bboxes_ = at.tonumpy(pred_bboxes_) if pred_bboxes_.shape[0] == 0: test_img_num += 1 continue else: ious = bbox_iou(pred_bboxes_, gt_bboxs) max_ious = ious.max(axis=1) corr_preds = np.where(max_ious >= 0.5)[0] num_boxs = gt_bboxs.shape[0] num_corr_preds = len(corr_preds) test_corrLoc += num_corr_preds / num_boxs test_img_num += 1 return test_corrLoc / test_img_num
def _calc_ious(self, anchor, bbox, inside_index): ious = bbox_iou(anchor, bbox) argmax_ious = ious.argmax(axis=1) max_ious = ious[np.arange(len(inside_index)), argmax_ious] gt_argmax_ious = ious.argmax(axis=0) gt_max_ious = ious[gt_argmax_ious, np.arange(ious.shape[1])] gt_argmax_ious = np.where(ious == gt_max_ious)[0] return argmax_ious, max_ious, gt_argmax_ious
def eval(dataloader, head_detector): test_img_num = 0 test_corrLoc = 0.0 for _, (img, bbox_, scale) in enumerate(dataloader): scale = at.scalar(scale) img, bbox = img.cuda().float(), bbox_.cuda() img, bbox = Variable(img), Variable(bbox) pred_bboxes_, _ = head_detector.predict(img, scale, mode='evaluate') gt_bboxs = at.tonumpy(bbox_)[0] pred_bboxes_ = at.tonumpy(pred_bboxes_) if pred_bboxes_.shape[0] == 0: test_img_num += 1 continue else: ious = bbox_iou(pred_bboxes_, gt_bboxs) max_ious = ious.max(axis=1) corr_preds = np.where(max_ious >= 0.5)[0] num_boxs = gt_bboxs.shape[0] num_corr_preds = len(corr_preds) test_corrLoc += num_corr_preds / num_boxs test_img_num += 1 return test_corrLoc / test_img_num