Ejemplo n.º 1
0
def extend_with_flipped_entries(roidb, dataset):
    """Flip each entry in the given roidb and return a new roidb that is the
    concatenation of the original roidb and the flipped entries.

    "Flipping" an entry means that that image and associated metadata (e.g.,
    ground truth boxes and object proposals) are horizontally flipped.
    """
    flipped_roidb = []
    for entry in roidb:
        width = entry['width']
        boxes = entry['boxes'].copy()
        oldx1 = boxes[:, 0].copy()
        oldx2 = boxes[:, 2].copy()
        boxes[:, 0] = width - oldx2 - 1
        boxes[:, 2] = width - oldx1 - 1
        assert (boxes[:, 2] >= boxes[:, 0]).all()
        flipped_entry = {}
        dont_copy = ('boxes', 'segms', 'gt_keypoints', 'flipped')
        for k, v in entry.items():
            if k not in dont_copy:
                flipped_entry[k] = v
        flipped_entry['boxes'] = boxes
        flipped_entry['segms'] = segm_utils.flip_segms(entry['segms'],
                                                       entry['height'],
                                                       entry['width'])
        if dataset.keypoints is not None:
            flipped_entry['gt_keypoints'] = keypoint_utils.flip_keypoints(
                dataset.keypoints, dataset.keypoint_flip_map,
                entry['gt_keypoints'], entry['width'])
        flipped_entry['flipped'] = True
        flipped_roidb.append(flipped_entry)
    roidb.extend(flipped_roidb)
Ejemplo n.º 2
0
def extend_with_flipped_entries(roidb, dataset):
    """Flip each entry in the given roidb and return a new roidb that is the
    concatenation of the original roidb and the flipped entries.

    "Flipping" an entry means that that image and associated metadata (e.g.,
    ground truth boxes and object proposals) are horizontally flipped.
    """
    flipped_roidb = []
    for entry in roidb:
        width = entry['width']
        boxes = entry['boxes'].copy()
        oldx1 = boxes[:, 0].copy()
        oldx2 = boxes[:, 2].copy()
        boxes[:, 0] = width - oldx2 - 1
        boxes[:, 2] = width - oldx1 - 1
        assert (boxes[:, 2] >= boxes[:, 0]).all()
        flipped_entry = {}
        dont_copy = ('boxes', 'segms', 'gt_keypoints', 'flipped')
        for k, v in entry.items():
            if k not in dont_copy:
                flipped_entry[k] = v
        flipped_entry['boxes'] = boxes
        flipped_entry['segms'] = segm_utils.flip_segms(
            entry['segms'], entry['height'], entry['width']
        )
        if dataset.keypoints is not None:
            flipped_entry['gt_keypoints'] = keypoint_utils.flip_keypoints(
                dataset.keypoints, dataset.keypoint_flip_map,
                entry['gt_keypoints'], entry['width']
            )
        flipped_entry['flipped'] = True
        flipped_roidb.append(flipped_entry)
    roidb.extend(flipped_roidb)
Ejemplo n.º 3
0
def extend_with_flipped_entries(roidb, dataset):
    """Flip each entry in the given roidb and return a new roidb that is the
    concatenation of the original roidb and the flipped entries.

    "Flipping" an entry means that that image and associated metadata (e.g.,
    ground truth boxes and object proposals) are horizontally flipped.
    """
    flipped_roidb = []
    for entry in roidb:
        width = entry['width']
        boxes = entry['boxes'].copy()
        oldx1 = boxes[:, 0].copy()
        oldx2 = boxes[:, 2].copy()
        boxes[:, 0] = width - oldx2 - 1
        boxes[:, 2] = width - oldx1 - 1
        assert (boxes[:, 2] >= boxes[:, 0]).all()
        flipped_entry = {}
        dont_copy = ('boxes', 'segms', 'gt_keypoints', 'flipped')  # original

        if not cfg.Ignore_left:  # when filpped, the right is changed to left
            dont_copy = ('boxes', 'gt_keypoints', 'flipped', 'gt_classes',
                         'max_classes', 'gt_overlaps')
            gt_classes_ = copy.deepcopy(entry['gt_classes'])
            gt_classes = copy.deepcopy(entry['gt_classes'])
            max_classes = copy.deepcopy(entry['max_classes'])
            gt_overlaps = copy.deepcopy(entry['gt_overlaps'])
            dataset_name = cfg.TRAIN.DATASETS[0]
            if 'LIP' in dataset_name:
                orig_class_2_flipped = {
                    14: 15,
                    15: 14,
                    16: 17,
                    17: 16,
                    18: 19,
                    19: 18
                }
            if 'ATR' in dataset_name:
                orig_class_2_flipped = {
                    9: 10,
                    10: 9,
                    12: 13,
                    13: 12,
                    14: 15,
                    15: 14
                }
            for i in orig_class_2_flipped.keys():
                idx = np.where(gt_classes_ == i)[0]
                if len(idx) == 0:
                    continue
                gt_classes[idx] = orig_class_2_flipped[i]
                max_classes[idx] = orig_class_2_flipped[i]
                gt_overlaps[idx, i] = 0
                gt_overlaps[idx, orig_class_2_flipped[i]] = 1
            flipped_entry['gt_classes'] = gt_classes
            flipped_entry['max_classes'] = max_classes
            flipped_entry['gt_overlaps'] = gt_overlaps

        for k, v in entry.items():
            if k not in dont_copy:
                flipped_entry[k] = v
        flipped_entry['boxes'] = boxes
        #        flipped_entry['segms'] = segm_utils.flip_segms(
        #            entry['segms'], entry['height'], entry['width']
        #        )
        if dataset.keypoints is not None:
            flipped_entry['gt_keypoints'] = keypoint_utils.flip_keypoints(
                dataset.keypoints, dataset.keypoint_flip_map,
                entry['gt_keypoints'], entry['width'])
        flipped_entry['flipped'] = True
        flipped_roidb.append(flipped_entry)
    roidb.extend(flipped_roidb)