def from_config(cls, cfg, is_train: bool = True): augs = utils.build_augmentation(cfg, is_train) if cfg.INPUT.CROP.ENABLED and is_train: augs.insert(0, T.RandomCrop(cfg.INPUT.CROP.TYPE, cfg.INPUT.CROP.SIZE)) recompute_boxes = cfg.MODEL.MASK_ON else: recompute_boxes = False ret = { "is_train": is_train, "augmentations": augs, "image_format": cfg.INPUT.FORMAT, "use_instance_mask": cfg.MODEL.MASK_ON, "instance_mask_format": cfg.INPUT.MASK_FORMAT, "use_keypoint": cfg.MODEL.KEYPOINT_ON, "recompute_boxes": recompute_boxes, } if cfg.MODEL.KEYPOINT_ON: ret["keypoint_hflip_indices"] = utils.create_keypoint_hflip_indices(cfg.DATASETS.TRAIN) if cfg.MODEL.LOAD_PROPOSALS: ret["precomputed_proposal_topk"] = ( cfg.DATASETS.PRECOMPUTED_PROPOSAL_TOPK_TRAIN if is_train else cfg.DATASETS.PRECOMPUTED_PROPOSAL_TOPK_TEST ) return ret
def __init__(self, cfg, is_train=True): if cfg.INPUT.CROP.ENABLED and is_train: self.crop_aug = T.RandomCrop(cfg.INPUT.CROP.TYPE, cfg.INPUT.CROP.SIZE) logging.getLogger(__name__).info("CropGen used in training: " + str(self.crop_aug)) else: self.crop_aug = None self.augmentation = utils.build_augmentation(cfg, is_train) if cfg.INPUT.COLOR_AUG_SSD: self.augmentation.append( ColorAugSSDTransform(img_format=cfg.INPUT.FORMAT)) logging.getLogger( __name__).info("Color augmnetation used in training: " + str(self.augmentation[-1])) # fmt: off self.img_format = cfg.INPUT.FORMAT self.single_category_max_area = cfg.INPUT.CROP.SINGLE_CATEGORY_MAX_AREA self.ignore_value = cfg.MODEL.SEM_SEG_HEAD.IGNORE_VALUE # fmt: on self.is_train = is_train
def __init__(self, cfg, is_train=True): self.augmentation = utils.build_augmentation(cfg, is_train) if cfg.INPUT.CROP.ENABLED and is_train: self.augmentation.insert( 0, T.RandomCrop(cfg.INPUT.CROP.TYPE, cfg.INPUT.CROP.SIZE)) logging.getLogger(__name__).info("Cropping used in training: " + str(self.augmentation[0])) self.compute_tight_boxes = True else: self.compute_tight_boxes = False # fmt: off self.img_format = cfg.INPUT.FORMAT self.mask_on = cfg.MODEL.MASK_ON self.mask_format = cfg.INPUT.MASK_FORMAT self.keypoint_on = cfg.MODEL.KEYPOINT_ON self.load_proposals = cfg.MODEL.LOAD_PROPOSALS # fmt: on if self.keypoint_on and is_train: # Flip only makes sense in training self.keypoint_hflip_indices = utils.create_keypoint_hflip_indices( cfg.DATASETS.TRAIN) else: self.keypoint_hflip_indices = None if self.load_proposals: self.proposal_min_box_size = cfg.MODEL.PROPOSAL_GENERATOR.MIN_SIZE self.proposal_topk = (cfg.DATASETS.PRECOMPUTED_PROPOSAL_TOPK_TRAIN if is_train else cfg.DATASETS.PRECOMPUTED_PROPOSAL_TOPK_TEST) self.is_train = is_train
def build_augmentation(self): result = dutils.build_augmentation(self.cfg, is_train=self.is_train) if self.is_train: # resize = T.Resize((800, 800)) # result.extend([resize, ]) pass return result
def build_augmentation(cfg, is_train): logger = logging.getLogger(__name__) result = utils.build_augmentation(cfg, is_train) if is_train: random_rotation = T.RandomRotation( cfg.INPUT.ROTATION_ANGLES, expand=False, sample_style="choice" ) result.append(random_rotation) logger.info("DensePose-specific augmentation used in training: " + str(random_rotation)) return result
def from_config(cls, cfg, is_train: bool = True): augs = utils.build_augmentation(cfg, is_train) if cfg.INPUT.CROP.ENABLED and is_train: raise ValueError("Crop augmentation not supported to point supervision.") ret = { "is_train": is_train, "augmentations": augs, "image_format": cfg.INPUT.FORMAT, "sample_points": cfg.INPUT.SAMPLE_POINTS, } return ret
def build_mapper(cls, cfg, is_train=True): augs = detection_utils.build_augmentation(cfg, is_train) #if cfg.INPUT.CROP.ENABLED and is_train: # augs.insert(0, T.RandomCrop(cfg.INPUT.CROP.TYPE, cfg.INPUT.CROP.SIZE)) # Define a sequence of augmentations: TODO augs.append(T.RandomBrightness(0.9, 1.1)) augs.append(MyColorAugmentation()) # augs.append(T.RandomRotation([5,10,15,20,25,30], expand=True, center=None)) # T.RandomCrop("absolute", (640, 640)), # MyCustomResize() # type: T.Augmentation return DatasetMapper(cfg, is_train=is_train, augmentations=augs)
def build_augmentation(cfg, is_train): logger = logging.getLogger(__name__) result = utils.build_augmentation(cfg, is_train) if is_train: random_rotation = T.RandomRotation(cfg.INPUT.ROTATION_ANGLES, expand=False, sample_style="choice") # if cfg.MODEL.CONDINST.RAND_FLIP: # random_hflip = T.HFlipTransform(width=0) # result.append(random_hflip) logger.info("DensePose-specific augmentation used in training: " + str(random_rotation)) return result
def test_apply_rotated_boxes(self): np.random.seed(125) cfg = get_cfg() is_train = True augs = detection_utils.build_augmentation(cfg, is_train) image = np.random.rand(200, 300) image, transforms = T.apply_augmentations(augs, image) image_shape = image.shape[:2] # h, w assert image_shape == (800, 1200) annotation = {"bbox": [179, 97, 62, 40, -56]} boxes = np.array([annotation["bbox"]], dtype=np.float64) # boxes.shape = (1, 5) transformed_bbox = transforms.apply_rotated_box(boxes)[0] expected_bbox = np.array([484, 388, 248, 160, 56], dtype=np.float64) err_msg = "transformed_bbox = {}, expected {}".format(transformed_bbox, expected_bbox) assert np.allclose(transformed_bbox, expected_bbox), err_msg
def build_train_dataloader(cfg): # like 'build_detection_train_loader' if 'coco_2017_train' in cfg.DATASETS.TRAIN: descs_train: List[Dict] = DatasetCatalog.get("coco_2017_train") ds_train = DatasetFromList(descs_train, copy=False) mapper = DatasetMapper(cfg, True) else: # Open-Image-Dataset if 'get_detection_dataset_dicts': all_descs_train: List[Dict] = DatasetCatalog.get("oid_train") if 'rebalancing': image_id_vs_idx = {} for idx, desc in enumerate(all_descs_train): image_id_vs_idx[desc['image_id']] = idx descs_train = list(map(lambda img_id: all_descs_train[image_id_vs_idx[img_id]], sample_image_ids())) print('_' * 50 + f'train dataset len: {len(descs_train)}') ds_train = DatasetFromList(descs_train, copy=False) if 'DatasetMapper': augs = [RandomContrast(0.8, 1.2), RandomBrightness(0.8, 1.2), RandomSaturation(0.8, 1.2)] augs.extend(build_augmentation(cfg, is_train=True)) mapper = make_mapper('oid_train', is_train=True, augmentations=T.AugmentationList(augs)) ds_train = MapDataset(ds_train, mapper) sampler = TrainingSampler(len(ds_train)) data_loader = build_batch_data_loader( ds_train, sampler, cfg.SOLVER.IMS_PER_BATCH, aspect_ratio_grouping=cfg.DATALOADER.ASPECT_RATIO_GROUPING, num_workers=cfg.DATALOADER.NUM_WORKERS, ) global DATA_LOADER DATA_LOADER = data_loader return data_loader
def build_augmentation(cls, cfg: CfgNode, is_train: bool = True): result = detection_utils.build_augmentation(cfg, is_train=is_train) return result