主要文件:
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