コード例 #1
0
 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
コード例 #2
0
 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
コード例 #3
0
 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
コード例 #4
0
    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
コード例 #5
0
 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
コード例 #6
0
    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
コード例 #7
0
    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