Beispiel #1
0
def _filter_crowd_proposals(roidb, crowd_thresh):
    """Finds proposals that are inside crowd regions and marks them as
    overlap = -1 with each ground-truth rois, which means they will be excluded
    from training.
    """
    for entry in roidb:
        gt_overlaps = entry['gt_overlaps'].toarray()
        crowd_inds = np.where(entry['is_crowd'] == 1)[0]
        non_gt_inds = np.where(entry['gt_classes'] == 0)[0]
        if len(crowd_inds) == 0 or len(non_gt_inds) == 0:
            continue
        crowd_boxes = box_utils.xyxy_to_xywh(entry['boxes'][crowd_inds, :])
        non_gt_boxes = box_utils.xyxy_to_xywh(entry['boxes'][non_gt_inds, :])
        iscrowd_flags = [int(True)] * len(crowd_inds)
        ious = COCOmask.iou(non_gt_boxes, crowd_boxes, iscrowd_flags)
        bad_inds = np.where(ious.max(axis=1) > crowd_thresh)[0]
        gt_overlaps[non_gt_inds[bad_inds], :] = -1
        entry['gt_overlaps'] = scipy.sparse.csr_matrix(gt_overlaps)
Beispiel #2
0
 def bbox_results_one_category(self, boxes, cat_id):
     results = []
     image_ids = self.dataset.COCO.getImgIds()
     image_ids.sort()
     assert len(boxes) == len(image_ids)
     for i, image_id in enumerate(image_ids):
         dets = boxes[i]
         if isinstance(dets, list) and len(dets) == 0:
             continue
         dets = dets.astype(np.float)
         scores = dets[:, -1]
         xywh_dets = bbox_transform.xyxy_to_xywh(dets[:, 0:4])
         xs = xywh_dets[:, 0]
         ys = xywh_dets[:, 1]
         ws = xywh_dets[:, 2]
         hs = xywh_dets[:, 3]
         results.extend(
             [{'image_id': image_id,
               'category_id': cat_id,
               'bbox': [xs[k], ys[k], ws[k], hs[k]],
               'score': scores[k]} for k in range(dets.shape[0])])
     return results