コード例 #1
0
ファイル: v8.py プロジェクト: dodler/kgl
from albumentations import Compose, Resize, HorizontalFlip, CenterCrop
from albumentations.pytorch import ToTensor

train_aug = Compose(
    [HorizontalFlip(p=0.3),
     Resize(128, 128, always_apply=True),
     ToTensor()])

valid_aug = Compose([
    CenterCrop(96, 96, always_apply=True),
    Resize(128, 128, always_apply=True),
    ToTensor()
])
コード例 #2
0
ファイル: v2.py プロジェクト: dodler/kgl
from albumentations import Compose, Resize, RandomCrop, Flip, HorizontalFlip, VerticalFlip, Transpose
from albumentations.pytorch import ToTensor

train_aug = Compose([
    RandomCrop(height=96, width=96, p=0.2),
    VerticalFlip(p=0.2),
    HorizontalFlip(p=0.3),
    Transpose(p=0.2),
    Resize(128, 128, always_apply=True),
    ToTensor()
])

valid_aug = Compose([Resize(128, 128, always_apply=True), ToTensor()])
コード例 #3
0
def pre_transforms(image_size=224):
    return Compose([
        Resize(image_size, image_size),
    ])
コード例 #4
0
        model.load_state_dict(torch.load(opt.pretrained_weights, map_location= "cpu" if not gpu else None))

    optimizer = optim.Adam(model.parameters(), lr=1e-3)
    scheduler = StepLR(optimizer, step_size=10, gamma=0.1)
    criterion = F.cross_entropy
    
    augmentation = Compose([
        HorizontalFlip(),
        OneOf([
            IAAAdditiveGaussianNoise(),
            GaussNoise(),
        ], p=0.2),
        OneOf([
            MotionBlur(p=0.2),
            MedianBlur(blur_limit=3, p=0.1),
            Blur(blur_limit=3, p=0.1),
        ], p=0.2),
        ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.2, rotate_limit=30, p=0.2),
        OneOf([
            CLAHE(clip_limit=2),
            IAASharpen(),
            IAAEmboss(),
            RandomBrightnessContrast(),
        ], p=0.3),
    ], p=0.9)

    data_train = OCTDataset(opt.path_to_train, transforms=augmentation, img_size=(opt.img_size, opt.img_size))
    data_test = OCTDataset(opt.path_to_test, img_size=(opt.img_size, opt.img_size))
    weights = get_weights(data_train)
    sampler_train = WeightedRandomSampler(weights, len(data_train))
    dataloader_train = DataLoader(data_train, batch_size=opt.batch_size, sampler=sampler_train, num_workers=opt.n_cpu)
コード例 #5
0
    canvas = canvas.astype(int)

    # applying canvas
    new_image = canvas + image

    #limiting brightness to 255
    new_image = np.vectorize(lambda x: x if x < 255 else 255)(new_image)

    return new_image


augmentations = Compose([
    ShiftScaleRotate(shift_limit=0.07,
                     scale_limit=0.07,
                     rotate_limit=50,
                     border_mode=cv2.BORDER_CONSTANT,
                     value=0,
                     p=0.95),
    Lambda(image=randomBlotch, p=0.7),
    ToFloat(max_value=255)  # normalizes the data to [0,1] in float
])


class AugmentedDataSequence(Sequence):
    def __init__(self, x_set, y_set, batch_size=32):
        self.x = x_set
        self.y = y_set
        self.batch_size = batch_size

    def __len__(self):
        return int(np.ceil((len(self.x) + 0.0) / self.batch_size))
コード例 #6
0
                                    hist_rater_b.view(1, num_classes)) /
             labels.shape[0]).sum()
    return nom / (denom + epsilon)


# def mixed_loss(logits, labels):
#     return .5 * qwk(logits, labels) + .5 * torch.nn.functional.cross_entropy(logits, labels)

augment_transform = Compose([
    HorizontalFlip(p=.5),
    VerticalFlip(p=.5),
    RandomRotate90(p=.5),
    ShiftScaleRotate(shift_limit=0, scale_limit=.1, rotate_limit=0, p=.5),
    OneOf([
        RandomContrast(limit=.2),
        RandomGamma(gamma_limit=(80, 120)),
        RandomBrightness(limit=.2)
    ],
          p=.5),
    Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225), p=1),
    # CenterCrop(IMG_CROP_SIZE, IMG_CROP_SIZE, p=.5),
    Resize(args.image_size, args.image_size),
    ToTensor()
])

base_transform = Compose([
    HorizontalFlip(p=.5),
    VerticalFlip(p=.5),
    RandomRotate90(p=.5),
    Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225), p=1),
    Resize(args.image_size, args.image_size),
    ToTensor()
コード例 #7
0
ファイル: trainorig.py プロジェクト: wenzhilv/rsna
png = np.array(png)
train = train.set_index('Image').loc[png].reset_index()

# get fold
valdf = train[train['fold'] == fold].reset_index(drop=True)
trndf = train[train['fold'] != fold].reset_index(drop=True)

# Data loaders
mean_img = [0.22363983, 0.18190407, 0.2523437]
std_img = [0.32451536, 0.2956294, 0.31335256]
transform_train = Compose([
    HorizontalFlip(p=0.5),
    ShiftScaleRotate(shift_limit=0.05,
                     scale_limit=0.05,
                     rotate_limit=20,
                     p=0.3,
                     border_mode=cv2.BORDER_REPLICATE),
    Transpose(p=0.5),
    Normalize(mean=mean_img, std=std_img, max_pixel_value=255.0, p=1.0),
    ToTensor()
])

HFLIPVAL = 1.0 if HFLIP == 'T' else 0.0
TRANSPOSEVAL = 1.0 if TRANSPOSE == 'P' else 0.0
transform_test = Compose([
    HorizontalFlip(p=HFLIPVAL),
    Transpose(p=TRANSPOSEVAL),
    Normalize(mean=mean_img, std=std_img, max_pixel_value=255.0, p=1.0),
    ToTensor()
])
コード例 #8
0
 def val_transform(p=1):
     return Compose([Normalize(p=1)], p=p)
 def build_test(self):
     return Compose([
         CenterCrop(64, 32),
         ToTensor(),
     ])
コード例 #10
0
    "spot": sparse_categorical_crossentropy
}
lossWeights = {"defect": 1.0, "lacuna": 1.0, "spoke": 1.0, "spot": 1.0}
model.compile(loss=sparse_categorical_crossentropy,
              optimizer='rmsprop',
              metrics=['accuracy'],
              loss_weights=lossWeights)

print('# 3) 데이터셋 생성')
AUGMENTATIONS_TRAIN = Compose([
    HorizontalFlip(p=0.5),
    VerticalFlip(p=0.5),
    ShiftScaleRotate(p=0.8),
    RandomRotate90(p=0.8),
    Transpose(p=0.5),
    RandomSizedCrop(min_max_height=(FLG.HEIGHT * 2 / 3, FLG.WIDTH * 2 / 3),
                    height=FLG.HEIGHT,
                    width=FLG.WIDTH,
                    p=0.5),
    RandomContrast(p=0.5),
    RandomGamma(p=0.5),
    RandomBrightness(p=0.5)
])

AUGMENTATIONS_TEST = Compose([VerticalFlip(p=0.5)])

data_dir = 'D:\Data\iris_pattern\Multi_output2_test40_train160'
dataLoader = {
    'TrainGenerator':
    ImageGenerator(data_dir + '/train', augmentations=AUGMENTATIONS_TRAIN),
    'ValGenerator':
    ImageGenerator(data_dir + '/test', augmentations=AUGMENTATIONS_TEST)
コード例 #11
0
 def train_transform(p=1):
     return Compose(
         [VerticalFlip(p=0.5),
          HorizontalFlip(p=0.5),
          Normalize(p=1)], p=p)
コード例 #12
0
        x_train, x_test, y_train, y_test = train_test_split(x_train, y_train, test_size=0.1, stratify=y_train,
                                                            random_state=17)

    # normalizes using train_set data
    channel_wise_mean = np.reshape(np.array([125.3, 123.0, 113.9]), (1, 1, 1, -1))
    channel_wise_std = np.reshape(np.array([63.0, 62.1, 66.7]), (1, 1, 1, -1))
    x_train = (x_train - channel_wise_mean) / channel_wise_std
    x_test = (x_test - channel_wise_mean) / channel_wise_std

    # Convert class vectors to binary class matrices.
    y_train = to_categorical(y_train, num_classes=10)
    y_test = to_categorical(y_test, num_classes=10)

    # data augmentation
    augmentation = Compose([PadIfNeeded(min_height=40, min_width=40, border_mode=cv2.BORDER_REFLECT_101, p=1.0),
                            RandomCrop(32, 32, p=1.0),
                            HorizontalFlip(p=0.5)])

    def real_data_augmentation_library(image, augmentation=augmentation):
        augmented = augmentation(image=image)
        return augmented['image']
    datagen = ImageDataGenerator(preprocessing_function=real_data_augmentation_library)

    # learning rate
    if args.lr_type == 'adam':
        optimizer = Adam(lr=args.learning_rate, beta_1=0.75)
        callbacks = []
    else:

        if args.lr_type == 'rmsprop':
            def step_decay(_, current_lr, decay_factor=args.lr_decay_ratio):
コード例 #13
0
    n_classes = 10
else:
    n_classes = 1

#alaska_data = Alaska(PATH, train_val_ratio, mode, multiclass_file='./multiclass_stega_df.csv')
alaska_data = Alaska(PATH, train_val_ratio, mode, multiclass_file='./multiclass_stega_df_ricard.csv')

data = alaska_data.build()
IMAGE_IDS_train = data[0]
IMAGE_LABELS_train = data[1]
IMAGE_IDS_val = data[2]
IMAGE_LABELS_val = data[3]

AUGMENTATIONS_TRAIN = Compose([
    VerticalFlip(p=0.5),
    HorizontalFlip(p=0.5),
    ToFloat(max_value=255),
    ToTensor()
], p=1)


AUGMENTATIONS_TEST = Compose([
    ToFloat(max_value=255),
    ToTensor()
], p=1)


train_dataset = Alaska2Dataset(IMAGE_IDS_train, IMAGE_LABELS_train, augmentations=AUGMENTATIONS_TRAIN, color_mode=color_mode)
valid_dataset = Alaska2Dataset(IMAGE_IDS_val, IMAGE_LABELS_val, augmentations=AUGMENTATIONS_TEST, color_mode=color_mode)

train_loader = torch.utils.data.DataLoader(train_dataset,
                                           batch_size=batch_size,
コード例 #14
0
ファイル: train.py プロジェクト: lppllppl920/Challenge2018
def val_transform(p=1):
    return Compose([
        Normalize(p=1, mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
    ], p=p)
コード例 #15
0
def apply_image_augmentation(augmentator, image):
    augmented_image = augmentator(image=image)["image"]
    return augmented_image


def horizontal_stack_images(image_1, image_2):
    return np.hstack((image_1, image_2))


if __name__ == "__main__":
    print("[INFO] Augmentation example, press 'q' to finish the example")
    # Instancia o objeto de augmentação
    augmentator = Compose([
        Rotate(15),
        Blur(5),
        IAAPerspective(scale=(0.025, 0.05), p=0.8),
        RandomBrightnessContrast(brightness_limit=0.35, contrast_limit=0.35)
    ],
                          p=0.7)

    dataset, (characters_images,
              characters_labels) = read_hdf5_dataset("characters_dataset.hdf5")

    for idx, image in enumerate(characters_images):
        augmented_image = apply_image_augmentation(augmentator, image)
        cv2.imshow("Character x Augmented character",
                   horizontal_stack_images(image, augmented_image))
        print("[INFO] Label => ", characters_labels[idx])

        key = cv2.waitKey(0) & 0xff
        if key == ord('q'):
コード例 #16
0
)

transformimg = transforms.Compose(
    [
        transforms.ToTensor(),
        transforms.Normalize(
            mean=[0.485, 0.456, 0.406][::-1], std=[0.225, 0.224, 0.225][::-1]
        ),
    ]
)

transformaug = Compose(
    [
        VerticalFlip(p=0.5),
        RandomRotate90(p=0.5),
        ISONoise(p=0.5),
        RandomBrightnessContrast(p=0.5),
        RandomGamma(p=0.5),
        RandomFog(fog_coef_lower=0.05, fog_coef_upper=0.15, p=0.5),
    ]
)


class XViewDataset(Dataset):
    def __init__(
        self, size=None, aug=True, pattern="data/train/images1024/*pre_disaster*.png"
    ):
        self.name = "train"
        self.aug = aug
        self.pre = glob(pattern)

        if size:
コード例 #17
0
 },
 'train': {
     'mean': [0.485, 0.456, 0.406],
     'std': [0.229, 0.224, 0.225],
     'loss': EXPERIMENT_TYPE_LOSS_SIMPLE,
     'data': EXPERIMENT_TYPE_USE_ORIGINAL,
     'contact': 13,
     'init_lr': 0.0005,
     'batch_size':  12,
     'epochs': 60,
     'train_transform': Compose(
         [RandomCrop(512, 512, p=1.0),
          HorizontalFlip(p=.5),
          VerticalFlip(p=.5),
          RandomRotate90(p=0.5),
          RandomBrightnessContrast(p=0.3),
          Blur(p=0.3),
          Normalize(mean=[0.485, 0.456, 0.406],
                    std=[0.229, 0.224, 0.225]),
          ToTensor(),
          ]),
     'valid_transform': Compose(
         [CenterCrop(512, 512, p=1.0),
          Normalize(mean=[0.485, 0.456, 0.406],
                    std=[0.229, 0.224, 0.225]),
          ToTensor()
          ]),
     'infer_transform': Compose(
         [
             Normalize(mean=[0.485, 0.456, 0.406],
                       std=[0.229, 0.224, 0.225]),
コード例 #18
0
def pad_img(h, w, interpolation=0):
    return Compose([
        PadIfNeeded(h, w, border_mode=0, always_apply=True),
        Resize(h, w, interpolation=interpolation, always_apply=True),
    ])
コード例 #19
0
def train(model, cfg, model_cfg, start_epoch=0):
    cfg.batch_size = 28 if cfg.batch_size < 1 else cfg.batch_size
    cfg.val_batch_size = cfg.batch_size

    cfg.input_normalization = model_cfg.input_normalization
    crop_size = model_cfg.crop_size

    loss_cfg = edict()
    loss_cfg.instance_loss = SigmoidBinaryCrossEntropyLoss()
    loss_cfg.instance_loss_weight = 1.0

    num_epochs = 120
    num_masks = 1

    train_augmentator = Compose([
        Flip(),
        RandomRotate90(),
        ShiftScaleRotate(shift_limit=0.03,
                         scale_limit=0,
                         rotate_limit=(-3, 3),
                         border_mode=0,
                         p=0.75),
        PadIfNeeded(
            min_height=crop_size[0], min_width=crop_size[1], border_mode=0),
        RandomCrop(*crop_size),
        RandomBrightnessContrast(brightness_limit=(-0.25, 0.25),
                                 contrast_limit=(-0.15, 0.4),
                                 p=0.75),
        RGBShift(r_shift_limit=10, g_shift_limit=10, b_shift_limit=10, p=0.75)
    ],
                                p=1.0)

    val_augmentator = Compose([
        PadIfNeeded(
            min_height=crop_size[0], min_width=crop_size[1], border_mode=0),
        RandomCrop(*crop_size)
    ],
                              p=1.0)

    def scale_func(image_shape):
        return random.uniform(0.75, 1.25)

    points_sampler = MultiPointSampler(model_cfg.num_max_points,
                                       prob_gamma=0.7,
                                       merge_objects_prob=0.15,
                                       max_num_merged_objects=2)

    trainset = SBDDataset(
        cfg.SBD_PATH,
        split='train',
        num_masks=num_masks,
        augmentator=train_augmentator,
        points_from_one_object=False,
        input_transform=model_cfg.input_transform,
        min_object_area=80,
        keep_background_prob=0.0,
        image_rescale=scale_func,
        points_sampler=points_sampler,
        samples_scores_path='./models/sbd/sbd_samples_weights.pkl',
        samples_scores_gamma=1.25)

    valset = SBDDataset(cfg.SBD_PATH,
                        split='val',
                        augmentator=val_augmentator,
                        num_masks=num_masks,
                        points_from_one_object=False,
                        input_transform=model_cfg.input_transform,
                        min_object_area=80,
                        image_rescale=scale_func,
                        points_sampler=points_sampler)

    optimizer_params = {'lr': 5e-4, 'betas': (0.9, 0.999), 'eps': 1e-8}

    lr_scheduler = partial(torch.optim.lr_scheduler.MultiStepLR,
                           milestones=[100],
                           gamma=0.1)
    trainer = ISTrainer(model,
                        cfg,
                        model_cfg,
                        loss_cfg,
                        trainset,
                        valset,
                        optimizer_params=optimizer_params,
                        lr_scheduler=lr_scheduler,
                        checkpoint_interval=5,
                        image_dump_interval=200,
                        metrics=[AdaptiveIoU()],
                        max_interactive_points=model_cfg.num_max_points)
    logger.info(f'Starting Epoch: {start_epoch}')
    logger.info(f'Total Epochs: {num_epochs}')
    for epoch in range(start_epoch, num_epochs):
        trainer.training(epoch)
        trainer.validation(epoch)
コード例 #20
0
def run(*options, cfg=None, debug=False):
    """Run training and validation of model

    Notes:
        Options can be passed in via the options argument and loaded from the cfg file
        Options from default.py will be overridden by options loaded from cfg file
        Options passed in via options argument will override option loaded from cfg file
    
    Args:
        *options (str,int ,optional): Options used to overide what is loaded from the
                                      config. To see what options are available consult
                                      default.py
        cfg (str, optional): Location of config file to load. Defaults to None.
        debug (bool): Places scripts in debug/test mode and only executes a few iterations
    """

    update_config(config, options=options, config_file=cfg)

    # Start logging
    load_log_configuration(config.LOG_CONFIG)
    logger = logging.getLogger(__name__)
    logger.debug(config.WORKERS)
    scheduler_step = config.TRAIN.END_EPOCH // config.TRAIN.SNAPSHOTS
    torch.backends.cudnn.benchmark = config.CUDNN.BENCHMARK

    torch.manual_seed(config.SEED)
    if torch.cuda.is_available():
        torch.cuda.manual_seed_all(config.SEED)
    np.random.seed(seed=config.SEED)

    # Setup Augmentations
    basic_aug = Compose([
        Normalize(mean=(config.TRAIN.MEAN, ),
                  std=(config.TRAIN.STD, ),
                  max_pixel_value=1),
        Resize(
            config.TRAIN.AUGMENTATIONS.RESIZE.HEIGHT,
            config.TRAIN.AUGMENTATIONS.RESIZE.WIDTH,
            always_apply=True,
        ),
        PadIfNeeded(
            min_height=config.TRAIN.AUGMENTATIONS.PAD.HEIGHT,
            min_width=config.TRAIN.AUGMENTATIONS.PAD.WIDTH,
            border_mode=cv2.BORDER_CONSTANT,
            always_apply=True,
            mask_value=255,
        ),
    ])
    if config.TRAIN.AUGMENTATION:
        train_aug = Compose([basic_aug, HorizontalFlip(p=0.5)])
        val_aug = basic_aug
    else:
        train_aug = val_aug = basic_aug

    TrainPatchLoader = get_patch_loader(config)

    train_set = TrainPatchLoader(
        config.DATASET.ROOT,
        split="train",
        is_transform=True,
        stride=config.TRAIN.STRIDE,
        patch_size=config.TRAIN.PATCH_SIZE,
        augmentations=train_aug,
    )

    val_set = TrainPatchLoader(
        config.DATASET.ROOT,
        split="val",
        is_transform=True,
        stride=config.TRAIN.STRIDE,
        patch_size=config.TRAIN.PATCH_SIZE,
        augmentations=val_aug,
    )

    n_classes = train_set.n_classes

    train_loader = data.DataLoader(
        train_set,
        batch_size=config.TRAIN.BATCH_SIZE_PER_GPU,
        num_workers=config.WORKERS,
        shuffle=True,
    )
    val_loader = data.DataLoader(
        val_set,
        batch_size=config.VALIDATION.BATCH_SIZE_PER_GPU,
        num_workers=config.WORKERS,
    )

    model = getattr(models, config.MODEL.NAME).get_seg_model(config)

    device = "cpu"
    if torch.cuda.is_available():
        device = "cuda"
    model = model.to(device)  # Send to GPU

    optimizer = torch.optim.SGD(
        model.parameters(),
        lr=config.TRAIN.MAX_LR,
        momentum=config.TRAIN.MOMENTUM,
        weight_decay=config.TRAIN.WEIGHT_DECAY,
    )

    try:
        output_dir = generate_path(
            config.OUTPUT_DIR,
            git_branch(),
            git_hash(),
            config.MODEL.NAME,
            current_datetime(),
        )
    except TypeError:
        output_dir = generate_path(
            config.OUTPUT_DIR,
            config.MODEL.NAME,
            current_datetime(),
        )

    summary_writer = create_summary_writer(
        log_dir=path.join(output_dir, config.LOG_DIR))

    snapshot_duration = scheduler_step * len(train_loader)
    scheduler = CosineAnnealingScheduler(optimizer, "lr", config.TRAIN.MAX_LR,
                                         config.TRAIN.MIN_LR,
                                         snapshot_duration)

    # weights are inversely proportional to the frequency of the classes in the
    # training set
    class_weights = torch.tensor(config.DATASET.CLASS_WEIGHTS,
                                 device=device,
                                 requires_grad=False)

    criterion = torch.nn.CrossEntropyLoss(weight=class_weights,
                                          ignore_index=255,
                                          reduction="mean")

    trainer = create_supervised_trainer(model,
                                        optimizer,
                                        criterion,
                                        prepare_batch,
                                        device=device)

    trainer.add_event_handler(Events.ITERATION_STARTED, scheduler)

    trainer.add_event_handler(
        Events.ITERATION_COMPLETED,
        logging_handlers.log_training_output(log_interval=config.PRINT_FREQ),
    )
    trainer.add_event_handler(Events.EPOCH_STARTED,
                              logging_handlers.log_lr(optimizer))
    trainer.add_event_handler(
        Events.EPOCH_STARTED,
        tensorboard_handlers.log_lr(summary_writer, optimizer, "epoch"),
    )
    trainer.add_event_handler(
        Events.ITERATION_COMPLETED,
        tensorboard_handlers.log_training_output(summary_writer),
    )

    def _select_pred_and_mask(model_out_dict):
        return (model_out_dict["y_pred"].squeeze(),
                model_out_dict["mask"].squeeze())

    evaluator = create_supervised_evaluator(
        model,
        prepare_batch,
        metrics={
            "nll":
            Loss(criterion, output_transform=_select_pred_and_mask),
            "pixacc":
            pixelwise_accuracy(n_classes,
                               output_transform=_select_pred_and_mask,
                               device=device),
            "cacc":
            class_accuracy(n_classes, output_transform=_select_pred_and_mask),
            "mca":
            mean_class_accuracy(n_classes,
                                output_transform=_select_pred_and_mask),
            "ciou":
            class_iou(n_classes, output_transform=_select_pred_and_mask),
            "mIoU":
            mean_iou(n_classes, output_transform=_select_pred_and_mask),
        },
        device=device,
    )

    # Set the validation run to start on the epoch completion of the training run
    if debug:
        logger.info("Running Validation in Debug/Test mode")
        val_loader = take(3, val_loader)

    trainer.add_event_handler(Events.EPOCH_COMPLETED,
                              Evaluator(evaluator, val_loader))

    evaluator.add_event_handler(
        Events.EPOCH_COMPLETED,
        logging_handlers.log_metrics(
            "Validation results",
            metrics_dict={
                "nll": "Avg loss :",
                "pixacc": "Pixelwise Accuracy :",
                "mca": "Avg Class Accuracy :",
                "mIoU": "Avg Class IoU :",
            },
        ),
    )

    evaluator.add_event_handler(
        Events.EPOCH_COMPLETED,
        tensorboard_handlers.log_metrics(
            summary_writer,
            trainer,
            "epoch",
            metrics_dict={
                "mIoU": "Validation/mIoU",
                "nll": "Validation/Loss",
                "mca": "Validation/MCA",
                "pixacc": "Validation/Pixel_Acc",
            },
        ),
    )

    def _select_max(pred_tensor):
        return pred_tensor.max(1)[1]

    def _tensor_to_numpy(pred_tensor):
        return pred_tensor.squeeze().cpu().numpy()

    transform_func = compose(np_to_tb, decode_segmap(n_classes=n_classes),
                             _tensor_to_numpy)

    transform_pred = compose(transform_func, _select_max)

    evaluator.add_event_handler(
        Events.EPOCH_COMPLETED,
        create_image_writer(summary_writer, "Validation/Image", "image"),
    )
    evaluator.add_event_handler(
        Events.EPOCH_COMPLETED,
        create_image_writer(summary_writer,
                            "Validation/Mask",
                            "mask",
                            transform_func=transform_func),
    )
    evaluator.add_event_handler(
        Events.EPOCH_COMPLETED,
        create_image_writer(summary_writer,
                            "Validation/Pred",
                            "y_pred",
                            transform_func=transform_pred),
    )

    def snapshot_function():
        return (trainer.state.iteration % snapshot_duration) == 0

    checkpoint_handler = SnapshotHandler(
        path.join(output_dir, config.TRAIN.MODEL_DIR),
        config.MODEL.NAME,
        extract_metric_from("mIoU"),
        snapshot_function,
    )
    evaluator.add_event_handler(Events.EPOCH_COMPLETED, checkpoint_handler,
                                {"model": model})

    logger.info("Starting training")
    if debug:
        logger.info("Running Training in Debug/Test mode")
        train_loader = take(3, train_loader)

    trainer.run(train_loader, max_epochs=config.TRAIN.END_EPOCH)
コード例 #21
0
AUGMENTATIONS_TRAIN = Compose(
    [
        HorizontalFlip(p=0.5),
        RandomContrast(limit=0.2, p=0.5),
        RandomGamma(gamma_limit=(80, 120), p=0.5),
        RandomBrightness(limit=1.2, p=0.5),
        HueSaturationValue(
            hue_shift_limit=5, sat_shift_limit=20, val_shift_limit=10, p=.5),
        #     CenterCrop(height=128, width=128, p=0.5),
        Cutout(p=0.5),
        OneOf([
            MotionBlur(p=0.2),
            MedianBlur(blur_limit=3, p=0.1),
            Blur(blur_limit=3, p=0.1),
        ],
              p=0.3),
        OneOf([
            IAAAdditiveGaussianNoise(),
            GaussNoise(),
        ], p=0.2),
        # CLAHE(p=1.0, clip_limit=2.0),
        ShiftScaleRotate(shift_limit=0.0625,
                         scale_limit=0.1,
                         rotate_limit=15,
                         border_mode=cv2.BORDER_REFLECT_101,
                         p=0.5),
        # ToFloat(max_value=1)
    ],
    p=1)
コード例 #22
0
ファイル: data_loader.py プロジェクト: fengbeiliu/geo-sem
])

seg_aug = Compose([
    Transpose(p=0.5),
    RandomRotate90(p=1),
    # RandomBrightnessContrast(p=1),
    # RandomGamma(p=1),
    OneOf([
        # GaussNoise(p=1),
        RandomBrightnessContrast(p=1),
        RandomGamma(p=1),
    ]),
    # OneOf([
    #     ElasticTransform(p=1, alpha=120, sigma=120 * 0.05, alpha_affine=120 * 0.03),
    #     ShiftScaleRotate(p=1),
    # ]),
    # ElasticTransform(p=1, alpha=120, sigma=120 * 0.05, alpha_affine=120 * 0.03),
    # # ElasticTransform(p=1, alpha=120, sigma=120 * 0.05, alpha_affine=120 * 0.03),
    OneOf([
        ElasticTransform(p=1,
                         alpha=120,
                         sigma=120 * 0.05,
                         alpha_affine=120 * 0.03),
        GridDistortion(p=1),
        # ShiftScaleRotate(p=1),
        OpticalDistortion(p=1, distort_limit=2, shift_limit=0.5)
    ]),
    RandomCrop(256, 256, p=1)
])

seg_aug_2 = Compose([
コード例 #23
0
 def valid_transforms(self,sz):
     return Compose([
         A.Resize(sz, sz),
         A.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], max_pixel_value=255.0, p=1.0),
         ToTensorV2(p=1.0),
     ], p=1.)
コード例 #24
0
        super(CarsRecognizer, self).__init__()
        self.backbone = EfficientNet.from_name('efficientnet-b5')
        self.avg_pooling = nn.AdaptiveAvgPool2d(1)
        self.dropout = nn.Dropout(0.15)
        self.linear = LazyLinear(in_features=None, out_features=n_classes)

    def forward(self, img):
        features = self.backbone.extract_features(img)
        features = self.avg_pooling(features).squeeze()
        features = self.dropout(features)
        logits = self.linear(features)
        return logits


test_transform = Compose(
    [Resize(IMAGE_SIZE, IMAGE_SIZE),
     Normalize(), ToTensor()])

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

model = CarsRecognizer(n_classes=11)
cp = torch.load(PATH_TO_WEIGHTS, map_location=device)
model.load_state_dict(cp['state_dict'])


def predict(image_path):
    id2cartype = {
        0: 'MAZDA_3_B',
        1: 'КIА_RIО_B',
        2: 'VОLКSWАGЕN_РОLО_B',
        3: 'VOLVO_ALLVOLVO_C',
コード例 #25
0
 def __init__(self):
     self.transform = Compose([
         Normalize((0.4914, 0.4822, 0.4465), ((0.2023, 0.1994, 0.2010))),
         ToTensor(),
     ])
コード例 #26
0
ファイル: train.py プロジェクト: trytolose/bengali_pnasnet
def train(args):
    # augmentations
    train_transform = Compose([

        Resize(args.img_size, args.img_size),
        Cutout(num_holes=8, max_h_size=20, max_w_size=20, fill_value=0, always_apply=False, p=0.5),
        Normalize(
                mean=[0.0692],
                std=[0.205],
            ),
        ToTensorV2()
    ])
    val_transform = Compose([
        Resize(args.img_size, args.img_size),
        Normalize(
            mean=[0.0692],
            std=[0.205],
        ),
        ToTensorV2() 
    ])

    
    # Load data
    df_train = pd.read_csv("../input/train_folds.csv")

    if args.fold == -1: 
        sys.exit()


    train = df_train[df_train['kfold']!=args.fold].reset_index(drop=True)#[:1000]
    val = df_train[df_train['kfold']==args.fold].reset_index(drop=True)#[:1000]

    train_data = ImageDataset('../input/images', train_transform, train)
    train_loader = utils.DataLoader(train_data, shuffle=True, num_workers=5, batch_size=args.batch_size, pin_memory=True)

    val_data = ImageDataset('../input/images', val_transform, val)
    val_loader = utils.DataLoader(val_data, shuffle=False, num_workers=5, batch_size=args.batch_size, pin_memory=True)   

# create model 

    device = torch.device(f"cuda:{args.gpu_n}")
    model = PretrainedCNN()
    
    
    if args.pretrain_path != "":
        model.load_state_dict(torch.load(args.pretrain_path, map_location=f"cuda:{args.gpu_n}"))
        print("weights loaded")
    model.to(device)
    
    
    
    optimizer = RAdam(model.parameters(), lr=args.start_lr)     

    opt_level = 'O1'
    model, optimizer = amp.initialize(model, optimizer, opt_level=opt_level)
    loss_fn = nn.CrossEntropyLoss()
    scheduler = ReduceLROnPlateau(optimizer, mode='max', verbose=True, patience=8, factor=0.6)

    best_models = deque(maxlen=5)
    best_score = 0.99302


    for e in range(args.epoch):

        # Training:
        train_loss = []
        model.train()

        for image, target in tqdm(train_loader, ncols = 70):   
            optimizer.zero_grad()
            xs = image.to(device)
            ys = target.to(device)

            # Cutmix using with BUG
            if np.random.rand()<0.5:
                 images, targets = cutmix(xs, ys[:,0], ys[:,1], ys[:,2], 1.0)
                 pred = model(xs)
                 output1 = pred[:,:168]
                 output2 = pred[:,168:179]
                 output3 = pred[:,179:]
                 loss = cutmix_criterion(output1,output2,output3, targets)

            else:
                pred = model(xs)
                grapheme = pred[:,:168]
                vowel = pred[:,168:179]
                cons = pred[:,179:]

                loss = loss_fn(grapheme, ys[:,0]) + loss_fn(vowel, ys[:,1])+ loss_fn(cons, ys[:,2])

            with amp.scale_loss(loss, optimizer) as scaled_loss:
                scaled_loss.backward()

            optimizer.step()
            train_loss.append(loss.item())

        
        #Validation    
        val_loss = []
        val_true = []
        val_pred = []
        model.eval()  
        with torch.no_grad():
            for image, target in val_loader:#tqdm(val_loader, ncols=50):
                xs = image.to(device)
                ys = target.to(device)

                pred = model(xs)
                grapheme = pred[:,:168]
                vowel = pred[:,168:179]
                cons = pred[:,179:]

                loss = loss_fn(grapheme, ys[:,0]) + loss_fn(vowel, ys[:,1])+ loss_fn(cons, ys[:,2])
                val_loss.append(loss.item())

                grapheme = grapheme.cpu().argmax(dim=1).data.numpy()
                vowel = vowel.cpu().argmax(dim=1).data.numpy()
                cons = cons.cpu().argmax(dim=1).data.numpy()
                val_true.append(target.numpy())
                val_pred.append(np.stack([grapheme, vowel, cons], axis=1))

        val_true = np.concatenate(val_true)
        val_pred = np.concatenate(val_pred)

        val_loss = np.mean(val_loss)
        train_loss = np.mean(train_loss)
        scores = []

        for i in [0,1,2]:
            scores.append(sklearn.metrics.recall_score(val_true[:,i], val_pred[:,i], average='macro'))
        final_score = np.average(scores, weights=[2,1,1])


        print(f'Epoch: {e:03d}; train_loss: {train_loss:.05f}; val_loss: {val_loss:.05f}; ', end='')
        print(f'score: {final_score:.5f} ', end='')

    
    #   Checkpoint model. If there are 2nd stage(224x224) save best 5 checkpoints
        if final_score > best_score:
            best_score = final_score
            state_dict = copy.deepcopy(model.state_dict()) 
            if args.save_queue==1:
                best_models.append(state_dict)
                for i, m in enumerate(best_models):
                    path = f"models/{args.exp_name}"
                    os.makedirs(path, exist_ok=True)
                    torch.save(m, join(path, f"{i}.pt"))
            else:
                path = f"models/{args.exp_name}"
                os.makedirs(path, exist_ok=True)
                torch.save(state_dict, join(path, "model.pt"))
            print('+')
        else:
            print()


        scheduler.step(final_score)
コード例 #27
0
path_to_data = "./data/test_images"
path_to_csv = "./data/test.csv"
path_to_checkpoint = "./logs/test/checkpoints/best.pth"
path_to_submission = "./data/sample_submission.csv"
image_size = 256
batch_size = 32
num_workers = 4

device = torch.device("cuda:0")
checkpoint = torch.load(path_to_checkpoint)
model = resnet34(num_classes=1)
model.load_state_dict(checkpoint['model_state_dict'])
model = model.to(device)
model.eval()

test_transforms = Compose([pre_transforms(image_size), post_transforms()])
test_dataset = RetinopathyDatasetTest(csv_file=path_to_csv,
                                      path_to_data=path_to_data,
                                      transform=test_transforms)

test_dl = torch.utils.data.DataLoader(test_dataset,
                                      batch_size=batch_size,
                                      shuffle=False,
                                      num_workers=num_workers)
test_preds = predict(test_dl)
test_preds = round_preds(test_preds)

sample = pd.read_csv(path_to_submission)
sample.diagnosis = test_preds.astype(int)
print(sample.head())
sample.to_csv("submission.csv", index=False)
コード例 #28
0
ファイル: VQA.py プロジェクト: raccooncoder/vqa-coursework
import jpeg4py
import cv2
import torch
from utils.preprocess import anno_open, questions_preproc
from torch.utils.data import Dataset
from albumentations.pytorch import ToTensor
from albumentations import (Compose, CenterCrop, VerticalFlip, RandomSizedCrop,
                            HorizontalFlip, HueSaturationValue,
                            ShiftScaleRotate, Resize, RandomCrop, Normalize,
                            Rotate, Normalize)

h, w = 224, 224
transforms = {
    'train': Compose([Resize(h, w), Normalize(),
                      ToTensor()]),
    'val': Compose([Resize(h, w), Normalize(),
                    ToTensor()]),
    'test': Compose([Resize(h, w), Normalize(),
                     ToTensor()]),
}


class VQA(Dataset):
    def __init__(self,
                 path,
                 bag_of_words,
                 ans_dict=None,
                 transfrom=transforms,
                 mode='train'):
        self.path = path
        self.ans_dict = ans_dict
コード例 #29
0
def post_transforms():
    return Compose([Normalize(), ToTensor()])
コード例 #30
0
ファイル: train.py プロジェクト: yzxstore/MF-TAPNet
def main():
    # check cuda available
    assert torch.cuda.is_available() == True

    # when the input dimension doesnot change, add this flag to speed up
    cudnn.benchmark = True

    num_classes = config.num_classes[config.problem_type]
    # input are RGB images in size 3 * h * w
    # output are binary
    model = config.model(3, num_classes)
    # data parallel
    model = nn.DataParallel(model, device_ids=config.device_ids).cuda()
    # loss function
    if num_classes == 2:
        loss = LossBinary(jaccard_weight=config.jaccard_weight)
        valid_metric = validation_binary
    else:
        loss = LossMulti(num_classes=num_classes,
                         jaccard_weight=config.jaccard_weight)
        valid_metric = validation_multi

    # train/valid filenmaes
    train_filenames, valid_filenames = trainval_split(config.fold)
    print('num of train / validation files = {} / {}'.format(
        len(train_filenames), len(valid_filenames)))

    # trainset transform
    train_transform = Compose([
        Resize(height=config.train_height, width=config.train_width, p=1),
        Normalize(p=1)
    ],
                              p=1)

    # validset transform
    valid_transform = Compose([
        Resize(height=config.train_height, width=config.train_width, p=1),
        Normalize(p=1)
    ],
                              p=1)

    # train dataloader
    train_loader = DataLoader(dataset=RobotSegDataset(
        train_filenames, transform=train_transform),
                              shuffle=True,
                              num_workers=config.num_workers,
                              batch_size=config.batch_size,
                              pin_memory=True)
    # valid dataloader
    valid_loader = DataLoader(
        dataset=RobotSegDataset(valid_filenames, transform=valid_transform),
        shuffle=True,
        num_workers=config.num_workers,
        batch_size=len(
            config.device_ids),  # in valid time use one img for each dataset
        pin_memory=True)

    train(model=model,
          loss_func=loss,
          train_loader=train_loader,
          valid_loader=valid_loader,
          valid_metric=valid_metric,
          fold=config.fold,
          num_classes=num_classes)