def __call__(self, results): if 'lazy' not in results: raise ValueError('No lazy operation detected') lazyop = results['lazy'] imgs = results['imgs'] # crop left, top, right, bottom = lazyop['crop_bbox'].round().astype(int) imgs = [img[top:bottom, left:right] for img in imgs] # resize img_h, img_w = results['img_shape'] if lazyop['interpolation'] is None: interpolation = 'bilinear' else: interpolation = lazyop['interpolation'] imgs = [ mmcv.imresize(img, (img_w, img_h), interpolation=interpolation) for img in imgs ] # flip if lazyop['flip']: for img in imgs: mmcv.imflip_(img, lazyop['flip_direction']) results['imgs'] = imgs del results['lazy'] return results
def _augment(img): if hflip: mmcv.imflip_(img, 'horizontal') if vflip: mmcv.imflip_(img, 'vertical') if rot90: img = img.transpose(1, 0, 2) return img
def _augment_flow(flow): if hflip: mmcv.imflip_(flow, 'horizontal') flow[:, :, 0] *= -1 if vflip: mmcv.imflip_(flow, 'vertical') flow[:, :, 1] *= -1 if rot90: flow = flow.transpose(1, 0, 2) flow = flow[:, :, [1, 0]] return flow
def test_imflip_(self): # test horizontal flip (color image) img = np.random.rand(80, 60, 3) h, w, c = img.shape img_for_flip = img.copy() flipped_img = mmcv.imflip_(img_for_flip) assert flipped_img.shape == img.shape assert flipped_img.shape == img_for_flip.shape assert id(flipped_img) == id(img_for_flip) for i in range(h): for j in range(w): for k in range(c): assert flipped_img[i, j, k] == img[i, w - 1 - j, k] assert flipped_img[i, j, k] == img_for_flip[i, j, k] # test vertical flip (color image) img_for_flip = img.copy() flipped_img = mmcv.imflip_(img_for_flip, direction='vertical') assert flipped_img.shape == img.shape assert flipped_img.shape == img_for_flip.shape assert id(flipped_img) == id(img_for_flip) for i in range(h): for j in range(w): for k in range(c): assert flipped_img[i, j, k] == img[h - 1 - i, j, k] assert flipped_img[i, j, k] == img_for_flip[i, j, k] # test horizontal flip (grayscale image) img = np.random.rand(80, 60) h, w = img.shape img_for_flip = img.copy() flipped_img = mmcv.imflip_(img_for_flip) assert flipped_img.shape == img.shape assert flipped_img.shape == img_for_flip.shape assert id(flipped_img) == id(img_for_flip) for i in range(h): for j in range(w): assert flipped_img[i, j] == img[i, w - 1 - j] assert flipped_img[i, j] == img_for_flip[i, j] # test vertical flip (grayscale image) img_for_flip = img.copy() flipped_img = mmcv.imflip_(img_for_flip, direction='vertical') assert flipped_img.shape == img.shape assert flipped_img.shape == img_for_flip.shape assert id(flipped_img) == id(img_for_flip) for i in range(h): for j in range(w): assert flipped_img[i, j] == img[h - 1 - i, j] assert flipped_img[i, j] == img_for_flip[i, j]
def __call__(self, results): """Performs the Flip augmentation. Args: results (dict): The resulting dict to be modified and passed to the next transform in pipeline. """ modality = results['modality'] assert modality == 'RGB' if np.random.rand() < self.flip_ratio: flip = True else: flip = False results['flip'] = flip results['flip_direction'] = self.direction if not self.lazy: if flip: for i, img in enumerate(results['imgs']): mmcv.imflip_(img, self.direction) img_h, img_w = results['img_shape'] for idx in range(len(results['detections'])): cur_detections = results['detections'][idx].copy() if self.direction == 'horizontal': cur_detections[:, 0] = img_w - results['detections'][ idx][:, 2] cur_detections[:, 2] = img_w - results['detections'][ idx][:, 0] else: cur_detections[:, 1] = img_h - results['detections'][ idx][:, 3] cur_detections[:, 3] = img_h - results['detections'][ idx][:, 1] results['detections'][idx] = cur_detections else: results['imgs'] = list(results['imgs']) else: raise NotImplementedError return results
def __call__(self, results): """Performs the Flip augmentation. Args: results (dict): The resulting dict to be modified and passed to the next transform in pipeline. """ _init_lazy_if_proper(results, self.lazy) modality = results['modality'] if modality == 'Flow': assert self.direction == 'horizontal' if np.random.rand() < self.flip_ratio: flip = True else: flip = False results['flip'] = flip results['flip_direction'] = self.direction if not self.lazy: if flip: for i, img in enumerate(results['imgs']): mmcv.imflip_(img, self.direction) lt = len(results['imgs']) for i in range(0, lt, 2): # flow with even indexes are x_flow, which need to be # inverted when doing horizontal flip if modality == 'Flow': results['imgs'][i] = mmcv.iminvert(results['imgs'][i]) else: results['imgs'] = list(results['imgs']) else: lazyop = results['lazy'] if lazyop['flip']: raise NotImplementedError('Use one Flip please') lazyop['flip'] = flip lazyop['flip_direction'] = self.direction return results
def __call__(self, results): """Call function. Args: results (dict): A dict containing the necessary information and data for augmentation. Returns: dict: A dict containing the processed data and information. """ flip = np.random.random() < self.flip_ratio if flip: for key in self.keys: if isinstance(results[key], list): for v in results[key]: mmcv.imflip_(v, self.direction) else: mmcv.imflip_(results[key], self.direction) results['flip'] = flip results['flip_direction'] = self.direction return results
def test_imflip_(self): # direction must be "horizontal" or "vertical" or "diagonal" with pytest.raises(AssertionError): mmcv.imflip_(np.random.rand(80, 60, 3), direction='random') # test horizontal flip (color image) img = np.random.rand(80, 60, 3) h, w, c = img.shape img_for_flip = img.copy() flipped_img = mmcv.imflip_(img_for_flip) assert flipped_img.shape == img.shape assert flipped_img.shape == img_for_flip.shape assert id(flipped_img) == id(img_for_flip) for i in range(h): for j in range(w): for k in range(c): assert flipped_img[i, j, k] == img[i, w - 1 - j, k] assert flipped_img[i, j, k] == img_for_flip[i, j, k] # test vertical flip (color image) img_for_flip = img.copy() flipped_img = mmcv.imflip_(img_for_flip, direction='vertical') assert flipped_img.shape == img.shape assert flipped_img.shape == img_for_flip.shape assert id(flipped_img) == id(img_for_flip) for i in range(h): for j in range(w): for k in range(c): assert flipped_img[i, j, k] == img[h - 1 - i, j, k] assert flipped_img[i, j, k] == img_for_flip[i, j, k] # test diagonal flip (color image) img_for_flip = img.copy() flipped_img = mmcv.imflip_(img_for_flip, direction='diagonal') assert flipped_img.shape == img.shape assert flipped_img.shape == img_for_flip.shape assert id(flipped_img) == id(img_for_flip) for i in range(h): for j in range(w): for k in range(c): assert flipped_img[i, j, k] == img[h - 1 - i, w - 1 - j, k] assert flipped_img[i, j, k] == img_for_flip[i, j, k] # test horizontal flip (grayscale image) img = np.random.rand(80, 60) h, w = img.shape img_for_flip = img.copy() flipped_img = mmcv.imflip_(img_for_flip) assert flipped_img.shape == img.shape assert flipped_img.shape == img_for_flip.shape assert id(flipped_img) == id(img_for_flip) for i in range(h): for j in range(w): assert flipped_img[i, j] == img[i, w - 1 - j] assert flipped_img[i, j] == img_for_flip[i, j] # test vertical flip (grayscale image) img_for_flip = img.copy() flipped_img = mmcv.imflip_(img_for_flip, direction='vertical') assert flipped_img.shape == img.shape assert flipped_img.shape == img_for_flip.shape assert id(flipped_img) == id(img_for_flip) for i in range(h): for j in range(w): assert flipped_img[i, j] == img[h - 1 - i, j] assert flipped_img[i, j] == img_for_flip[i, j] # test diagonal flip (grayscale image) img_for_flip = img.copy() flipped_img = mmcv.imflip_(img_for_flip, direction='diagonal') assert flipped_img.shape == img.shape assert flipped_img.shape == img_for_flip.shape assert id(flipped_img) == id(img_for_flip) for i in range(h): for j in range(w): assert flipped_img[i, j] == img[h - 1 - i, w - 1 - j] assert flipped_img[i, j] == img_for_flip[i, j]