Detectron 新增垂直翻轉
阿新 • • 發佈:2019-01-14
主要檔案:
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