TTP / mmdet /datasets /transforms /transformers_glip.py
KyanChen's picture
Upload 1861 files
3b96cb1
raw
history blame
2.36 kB
# Copyright (c) OpenMMLab. All rights reserved.
import mmcv
import numpy as np
from mmcv.transforms import BaseTransform
from mmdet.registry import TRANSFORMS
from mmdet.structures.bbox import HorizontalBoxes, autocast_box_type
from .transforms import RandomFlip
@TRANSFORMS.register_module()
class GTBoxSubOne_GLIP(BaseTransform):
"""Subtract 1 from the x2 and y2 coordinates of the gt_bboxes."""
def transform(self, results: dict) -> dict:
if 'gt_bboxes' in results:
gt_bboxes = results['gt_bboxes']
if isinstance(gt_bboxes, np.ndarray):
gt_bboxes[:, 2:] -= 1
results['gt_bboxes'] = gt_bboxes
elif isinstance(gt_bboxes, HorizontalBoxes):
gt_bboxes = results['gt_bboxes'].tensor
gt_bboxes[:, 2:] -= 1
results['gt_bboxes'] = HorizontalBoxes(gt_bboxes)
else:
raise NotImplementedError
return results
@TRANSFORMS.register_module()
class RandomFlip_GLIP(RandomFlip):
"""Flip the image & bboxes & masks & segs horizontally or vertically.
When using horizontal flipping, the corresponding bbox x-coordinate needs
to be additionally subtracted by one.
"""
@autocast_box_type()
def _flip(self, results: dict) -> None:
"""Flip images, bounding boxes, and semantic segmentation map."""
# flip image
results['img'] = mmcv.imflip(
results['img'], direction=results['flip_direction'])
img_shape = results['img'].shape[:2]
# flip bboxes
if results.get('gt_bboxes', None) is not None:
results['gt_bboxes'].flip_(img_shape, results['flip_direction'])
# Only change this line
if results['flip_direction'] == 'horizontal':
results['gt_bboxes'].translate_([-1, 0])
# TODO: check it
# flip masks
if results.get('gt_masks', None) is not None:
results['gt_masks'] = results['gt_masks'].flip(
results['flip_direction'])
# flip segs
if results.get('gt_seg_map', None) is not None:
results['gt_seg_map'] = mmcv.imflip(
results['gt_seg_map'], direction=results['flip_direction'])
# record homography matrix for flip
self._record_homography_matrix(results)