def __call__(self, sample): _target = sample[self.mask_elem] for elem in self.crop_elems: _img = sample[elem] if self.mask_elem == elem: _tmp_img = _img _tmp_target = _target if np.max(_target) == 0: _crop = np.zeros(_tmp_img.shape, dtype=_img.dtype) else: _crop = helpers.crop_from_mask(_tmp_img, _tmp_target, relax=self.relax, zero_pad=self.zero_pad) else: if np.max(_target) == 0: _crop = np.zeros(_img.shape, dtype=_img.dtype) else: _tmp_target = _target _crop = helpers.crop_from_mask(_img, _tmp_target, relax=self.relax, zero_pad=self.zero_pad) sample['crop_' + elem] = _crop return sample
def __call__(self, sample): _target = sample[self.mask_elem] if _target.ndim == 2: _target = np.expand_dims(_target, axis=-1) for elem in self.crop_elems: _img = sample[elem] _crop = [] if self.mask_elem == elem: if _img.ndim == 2: _img = np.expand_dims(_img, axis=-1) for k in range(0, _target.shape[-1]): _tmp_img = _img[..., k] _tmp_target = _target[..., k] if np.max(_target[..., k]) == 0: _crop.append(np.zeros(_tmp_img.shape, dtype=_img.dtype)) else: _crop.append(helpers.crop_from_mask(_tmp_img, _tmp_target, relax=self.relax, zero_pad=self.zero_pad)) else: for k in range(0, _target.shape[-1]): if np.max(_target[..., k]) == 0: _crop.append(np.zeros(_img.shape, dtype=_img.dtype)) else: _tmp_target = _target[..., k] _crop.append(helpers.crop_from_mask(_img, _tmp_target, relax=self.relax, zero_pad=self.zero_pad)) if len(_crop) == 1: sample['crop_' + elem] = _crop[0] else: sample['crop_' + elem] = _crop return sample
def __call__(self, sample): self.dz = random.randint(350, 400) _target = sample[self.mask_elem] if len(np.unique(_target)) == 1: sample['crop_image'] = sample['image'] sample['crop_gt'] = sample['gt'] return sample if _target.ndim == 2: _target = np.expand_dims(_target, axis=-1) for elem in self.crop_elems: _img = sample[elem] _crop = [] ### dynamic relax crop ### bbox = helpers.get_bbox(_target) d = np.maximum(bbox[2] - bbox[0], bbox[3] - bbox[1]) sample['temp'] = d zoom_factor = self.dz / d crop_relax = (512 - d * zoom_factor) / (2 * zoom_factor) self.crop_relax = np.ceil(crop_relax).astype(int) self.crop_relax = np.maximum(15, self.crop_relax) sample['crop_relax'] = self.crop_relax ### ### if self.mask_elem == elem: if _img.ndim == 2: _img = np.expand_dims(_img, axis=-1) for k in range(0, _target.shape[-1]): _tmp_img = _img[..., k] _tmp_target = _target[..., k] if np.max(_target[..., k]) == 0: _crop.append(np.zeros(_tmp_img.shape, dtype=_img.dtype)) else: _crop.append( helpers.crop_from_mask(_tmp_img, _tmp_target, relax=self.crop_relax, zero_pad=self.zero_pad)) else: for k in range(0, _target.shape[-1]): if np.max(_target[..., k]) == 0: _crop.append(np.zeros(_img.shape, dtype=_img.dtype)) else: _tmp_target = _target[..., k] _crop.append( helpers.crop_from_mask(_img, _tmp_target, relax=self.crop_relax, zero_pad=self.zero_pad)) if len(_crop) == 1: sample['crop_' + elem] = _crop[0] else: sample['crop_' + elem] = _crop return sample
def __call__(self, sample): if self.dummy: for elem in self.crop_elems: sample['crop_' + elem] = sample[elem].copy() return sample _target = sample[self.mask_elem] if _target.ndim == 2: _target = np.expand_dims(_target, axis=-1) for elem in self.crop_elems: _img = sample[elem] _crop = [] if self.mask_elem == elem: if _img.ndim == 2: _img = np.expand_dims(_img, axis=-1) for k in range(0, _target.shape[-1]): _tmp_img = _img[..., k] _tmp_target = _target[..., k] if np.max(_target[..., k]) == 0: _crop.append(np.zeros(_tmp_img.shape, dtype=_img.dtype)) else: _crop.append( np.ascontiguousarray( helpers.crop_from_mask( _tmp_img, _tmp_target, relax=self.relax, zero_pad=self.zero_pad, for_grid=self.for_grid, grid_size=self.grid_size))) else: for k in range(0, _target.shape[-1]): if np.max(_target[..., k]) == 0: _crop.append(np.zeros(_img.shape, dtype=_img.dtype)) else: _tmp_target = _target[..., k] _crop.append( np.ascontiguousarray( helpers.crop_from_mask( _img, _tmp_target, relax=self.relax, zero_pad=self.zero_pad, for_grid=self.for_grid, grid_size=self.grid_size))) if len(_crop) == 1: sample['crop_' + elem] = _crop[0] else: sample['crop_' + elem] = _crop sample['crop_mask'] = sample['crop_gt'] return sample
def __call__(self, sample): if self.is_val == False: self.dz = np.array(np.random.randint(self.min_,self.max_)).astype(np.float32) _target = sample[self.mask_elem] if len(np.unique(_target)) == 1: sample['crop_image'] = sample['image'] sample['crop_gt'] = sample['gt'] return sample if _target.ndim == 2: _target = np.expand_dims(_target, axis=-1) for elem in self.crop_elems: _img = sample[elem] _crop = [] ### dynamic relax crop ### bbox = helpers.get_bbox(_target) d = np.maximum(bbox[2] - bbox[0], bbox[3] - bbox[1]) if d < 1: print("Very small objects detected") print(sample['id']) zoom_factor = self.dz/d crop_relax = (self.d-d*zoom_factor)/(2*zoom_factor) crop_relax = np.maximum(crop_relax, self.thresh) self.crop_relax = np.ceil(crop_relax).astype(int) sample['crop_relax'] = self.crop_relax ### ### if self.mask_elem == elem: if _img.ndim == 2: _img = np.expand_dims(_img, axis=-1) for k in range(0, _target.shape[-1]): _tmp_img = _img[..., k] _tmp_target = _target[..., k] if np.max(_target[..., k]) == 0: _crop.append(np.zeros(_tmp_img.shape, dtype=_img.dtype)) else: _crop.append(helpers.crop_from_mask(_tmp_img, _tmp_target, relax=self.crop_relax, zero_pad=self.zero_pad)) else: for k in range(0, _target.shape[-1]): if np.max(_target[..., k]) == 0: _crop.append(np.zeros(_img.shape, dtype=_img.dtype)) else: _tmp_target = _target[..., k] _crop.append(helpers.crop_from_mask(_img, _tmp_target, relax=self.crop_relax, zero_pad=self.zero_pad)) if len(_crop) == 1: sample['crop_' + elem] = _crop[0] else: sample['crop_' + elem] = _crop return sample
def __call__(self, sample): _target = sample[self.mask_elem] # enable adaptive calculation of bbox relaxation if self.adaptive_relax: mean_shape = np.mean(_target.shape[:2]) # 428 is the average size in PASCAL trainaug relax = int(self.relax * mean_shape / 428.) else: relax = self.relax sample['meta']['relax'] = relax if _target.ndim == 2: _target = np.expand_dims(_target, axis=-1) for elem in self.crop_elems: _img = sample[elem] _crop = [] if self.mask_elem == elem: if _img.ndim == 2: _img = np.expand_dims(_img, axis=-1) for k in range(0, _target.shape[-1]): _tmp_img = _img[..., k] _tmp_target = _target[..., k] if np.max(_target[..., k]) == 0: _crop.append(np.zeros(_tmp_img.shape, dtype=_img.dtype)) else: _crop.append(helpers.crop_from_mask(_tmp_img, _tmp_target, relax=relax, zero_pad=self.zero_pad)) else: for k in range(0, _target.shape[-1]): if np.max(_target[..., k]) == 0: _crop.append(np.zeros(_img.shape, dtype=_img.dtype)) else: _tmp_target = _target[..., k] _crop.append(helpers.crop_from_mask(_img, _tmp_target, relax=relax, zero_pad=self.zero_pad)) if len(_crop) == 1: sample[self.prefix + elem] = _crop[0] else: sample[self.prefix + elem] = _crop return sample
def __call__(self, sample): _target_list = sample[self.mask_elem] sample['crop_image'] = [] sample['crop_gt'] = [] sample['crop_polygon'] = [] sample['valid'] = [] for i_comp, _target in enumerate(_target_list): _target = np.expand_dims(_target, axis=-1) elem = 'image' _img = sample[elem] if _img.ndim == 2: _img = np.expand_dims(_img, axis=-1) _crop_img = [] for k in range(0, _target.shape[-1]): if np.max(_target[..., k]) == 0: _crop_img.append(np.zeros(_img.shape, dtype=_img.dtype)) else: _tmp_target = _target[..., k] _crop_img.append( helpers.crop_from_mask(_img, _tmp_target, relax=self.relax, zero_pad=self.zero_pad)) sample['crop_image'].append(_crop_img[0]) elem = 'gt' _img = sample[elem][i_comp] _crop_img = [] if _img.ndim == 2: _img = np.expand_dims(_img, axis=-1) for k in range(0, _target.shape[-1]): _tmp_img = _img[..., k] _tmp_target = _target[..., k] if np.max(_target[..., k]) == 0: _crop_img.append(np.zeros(_tmp_img.shape, dtype=_img.dtype)) else: _crop_img.append( helpers.crop_from_mask(_tmp_img, _tmp_target, relax=self.relax, zero_pad=self.zero_pad)) sample['crop_gt'].append(_crop_img[0]) # import ipdb # ipdb.set_trace() elem = 'gt_polygon' gt_polygon = sample[elem][i_comp] valid = 1 try: _crop_polygon = helpers.crop_from_mask_polygon( gt_polygon, _img, _target[..., 0], relax=self.relax, zero_pad=self.zero_pad) except: _crop_polygon = np.asarray([[0.5, 0.5], [0.5, 0.6], [0.6, 0.6], [0.6, 0.5]]) valid = 0 sample['valid'].append(valid) sample['crop_polygon'].append(_crop_polygon) return sample