1. 程式人生 > >Detectron 新增垂直翻轉

Detectron 新增垂直翻轉

主要檔案:
detectron/datasets/json_dataset.py
detectron/datasets/roidb.py
detectron/roi_data/minibatch.py
資料載入流程如下:
圖來自
在這裡插入圖片描述
修改如下:
在detectron/datasets/json_dataset.py檔案中新增垂直翻轉引數:

entry['flipped_v'] = False

在/detectron/datasets/roidb.py中仿照extend_with_flipped_entries函式新增垂直翻轉函式:
注意,detectron水平翻轉後已經將entry加入到roidb中,此時進行垂直翻轉,相當於將水平翻轉後的影象同樣進行的垂直翻轉。所以原本200張影象翻轉後變成800張。

if cfg.TRAIN.USE_FLIPPED_V:
    logger.info('Appending vertically-flipped training examples...')
    extend_with_flipped_entries_v(roidb, ds)
def extend_with_flipped_entries_v(roidb, dataset):
    flipped_roidb = []
    for entry in roidb:
        height = entry['height']
        boxes = entry['boxes'].copy()
        oldy1 = boxes[:, 1].copy()
        oldy2 = boxes[:, 3].copy()
        boxes[:, 1] = height - oldy2 - 1
        boxes[:, 3] = height - oldy1 - 1
        assert (boxes[:, 3] >= boxes[:, 1]).all()
        flipped_entry = {}
        # dont_copy = ('boxes', 'segms', 'gt_keypoints', 'flipped_v')
        dont_copy = ('boxes', 'flipped_v')
        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_v'] = True
        flipped_roidb.append(flipped_entry)
    roidb.extend(flipped_roidb)

在detectron/roi_data/minibatch.py檔案中新增影象畫素的翻轉:

if roidb[i]['flipped_v']:
    im = im[::-1, :, :]

最好在配置檔案中新增:

USE_FLIPPED_V: True