def __getitem__(self, idx): rawdata = self.datainfos[idx] img = rawdata['data'] image_id = rawdata['id'] height, width = img.shape[0:2] gt_kpts = np.float32(rawdata['gt_keypoints']).transpose(0, 2, 1) # (N, 17, 3) gt_segms = rawdata['segms'] gt_masks = np.array([annToMask(segm, height, width) for segm in gt_segms]) return {'img': img, 'kpts': gt_kpts, 'masks': gt_masks}
def test(model, dataset='cocoVal', logger=print): ImageRoot = './data/coco2017/val2017' AnnoFile = './data/person_keypoints_val2017_pose2seg.json' datainfos = CocoDatasetInfo(ImageRoot, AnnoFile, onlyperson=True, loadimg=True) model.eval() results_segm = [] imgIds = [] for i in tqdm(range(len(datainfos))): rawdata = datainfos[i] img = rawdata['data'] image_id = rawdata['id'] height, width = img.shape[0:2] gt_kpts = np.float32(rawdata['gt_keypoints']).transpose(0, 2, 1) # (N, 17, 3) gt_segms = rawdata['segms'] gt_masks = np.array([annToMask(segm, height, width) for segm in gt_segms]) output = model([img], [gt_kpts], [gt_masks]) for mask in output[0]: maskencode = maskUtils.encode(np.asfortranarray(mask)) maskencode['counts'] = maskencode['counts'].decode('ascii') results_segm.append({ "image_id": image_id, "category_id": 1, "score": 1.0, "segmentation": maskencode }) imgIds.append(image_id) def do_eval_coco(image_ids, coco, results, flag): from pycocotools.cocoeval import COCOeval assert flag in ['bbox', 'segm', 'keypoints'] # Evaluate coco_results = coco.loadRes(results) cocoEval = COCOeval(coco, coco_results, flag) cocoEval.params.imgIds = image_ids cocoEval.params.catIds = [1] cocoEval.evaluate() cocoEval.accumulate() cocoEval.summarize() return cocoEval cocoEval = do_eval_coco(imgIds, datainfos.COCO, results_segm, 'segm') logger('[POSE2SEG] AP|.5|.75| S| M| L| AR|.5|.75| S| M| L|') _str = '[segm_score] %s '%dataset for value in cocoEval.stats.tolist(): _str += '%.3f '%value logger(_str)
def __getitem__(self, idx): rawdata = self.datainfos[idx] img = rawdata['data'] image_id = rawdata['id'] height, width = img.shape[0:2] gt_kpts = np.float32(rawdata['gt_keypoints']).transpose( 0, 2, 1) # (N, 17, 3) gt_segms = rawdata['segms'] gt_masks = np.array( [annToMask(segm, height, width) for segm in gt_segms]) gt_boxes = rawdata['boxes'] overlaps = bbox_overlaps(gt_boxes, gt_boxes) gt_count = (overlaps >= 0.5).astype(np.float).max(1) return { 'img': img, 'kpts': gt_kpts, 'masks': gt_masks, 'count': gt_count }
def test(model, dataset='cocoVal', logger=print): if dataset == 'OCHumanVal': ImageRoot = r'\\fs01\Algo\ML\Datasets\Pose2Seg\data\OCHuman\images' AnnoFile = r'\\fs01\Algo\ML\Datasets\Pose2Seg\data\OCHuman\annotations\ochuman_coco_format_val_range_0.00_1.00.json' elif dataset == 'OCHumanTest': ImageRoot = r'\\fs01\Algo\ML\Datasets\Pose2Seg\data\OCHuman\images' AnnoFile = r'\\fs01\Algo\ML\Datasets\Pose2Seg\data\OCHuman\annotations\ochuman_coco_format_test_range_0.00_1.00.json' elif dataset == 'cocoVal': ImageRoot = r'\\fs01\Algo\ML\Datasets\Pose2Seg\data\coco2017\val2017' AnnoFile = r'\\fs01\Algo\ML\Datasets\Pose2Seg\data\coco2017\annotations\person_keypoints_val2017_pose2seg.json' datainfos = CocoDatasetInfo(ImageRoot, AnnoFile, onlyperson=True, loadimg=True) model.eval() results_segm = [] imgIds = [] for i in tqdm(range(3, len(datainfos))): rawdata = datainfos[i] img = rawdata['data'] image_id = rawdata['id'] height, width = img.shape[0:2] gt_kpts = np.float32(rawdata['gt_keypoints']).transpose( 0, 2, 1) # (N, 17, 3) gt_segms = rawdata['segms'] gt_masks = np.array( [annToMask(segm, height, width) for segm in gt_segms]) output = model([img], [gt_kpts], [gt_masks]) img = img[..., ::-1] # plt.switch_backend("TkAgg") # plt.imshow(gt_masks[0,...]) # plt.show() # fig.savefig('C:\\Users\\erez\\Projects\\Pose2Seg\\demo.png', bbox_inches='tight') MASKS = np.zeros(output[0][0].shape) for id, mask in enumerate(output[0]): from skimage.color import label2rgb MASKS += (id + 1) * mask maskencode = maskUtils.encode(np.asfortranarray(mask)) maskencode['counts'] = maskencode['counts'].decode('ascii') results_segm.append({ "image_id": image_id, "category_id": 1, "score": 1.0, "segmentation": maskencode }) imgIds.append(image_id) image_label_overlay = label2rgb(MASKS, image=img, alpha=0.3, bg_label=0) plt.imshow(image_label_overlay) plt.show() def do_eval_coco(image_ids, coco, results, flag): from pycocotools.cocoeval import COCOeval assert flag in ['bbox', 'segm', 'keypoints'] # Evaluate coco_results = coco.loadRes(results) cocoEval = COCOeval(coco, coco_results, flag) cocoEval.params.imgIds = image_ids cocoEval.params.catIds = [1] cocoEval.evaluate() cocoEval.accumulate() cocoEval.summarize() return cocoEval cocoEval = do_eval_coco(imgIds, datainfos.COCO, results_segm, 'segm') logger('[POSE2SEG] AP|.5|.75| S| M| L| AR|.5|.75| S| M| L|') _str = '[segm_score] %s ' % dataset for value in cocoEval.stats.tolist(): _str += '%.3f ' % value logger(_str)