with_crf = Switch(False, epoch_to_value={100: True}) # predict @unpack_args @add_extract_dims(1, 2) def predict(image, spacing): return inference_step(image, spacing, architecture=model, activation=torch.sigmoid) # metrics individual_metrics = { 'dice': binary_to_bool(drop_spacing(dice_score)), 'surface_dice': binary_to_bool(surface_dice), } val_metrics = convert_to_aggregated(individual_metrics) # run experiment logger = TBLogger(EXPERIMENT_PATH / FOLD / 'logs') commands.populate(EXPERIMENT_PATH / 'config.json', save_json, CONFIG, EXPERIMENT_PATH / 'config.json') commands.populate( EXPERIMENT_PATH / FOLD / 'model.pth', lambda: [ train(crf_train_step, batch_iter, n_epochs=CONFIG['n_epochs'], logger=logger, validate=lambda:
).to(CONFIG['device']) criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=CONFIG['lr']) # predict @patches_grid(patch_size=PATCH_SIZE, stride=7 * PATCH_SIZE // 8) @add_extract_dims(1) def predict(image): return inference_step(image, architecture=model, activation=nn.Softmax(1)) # metrics individual_metrics = { **{f'dice_{c}': multiclass_to_bool(drop_spacing(dice_score), c) for c in range(1, dataset.n_classes)}, **{f'surface_dice_{c}': multiclass_to_bool(surface_dice, c) for c in range(1, dataset.n_classes)} } val_metrics = convert_to_aggregated(individual_metrics) # run experiment logger = TBLogger(EXPERIMENT_PATH / FOLD / 'logs') commands.populate(EXPERIMENT_PATH / 'config.json', save_json, CONFIG, EXPERIMENT_PATH / 'config.json') commands.populate(EXPERIMENT_PATH / FOLD / 'model.pth', lambda : [ train(train_step, batch_iter, n_epochs=CONFIG['n_epochs'], logger=logger, validate=lambda : compute_metrics(predict, train_dataset.load_image, lambda i: (train_dataset.load_gt(i), train_dataset.load_spacing(i)), val_ids, val_metrics), architecture=model, optimizer=optimizer, criterion=criterion, lr=CONFIG['lr']), save_model_state(model, EXPERIMENT_PATH / FOLD / 'model.pth')
# predict @unpack_args @add_extract_dims(1) def predict(image, spacing): return inference_step(image, spacing, architecture=model, activation=nn.Softmax(1)) # metrics individual_metrics = { **{ f'dice_{c}': multiclass_to_bool(drop_spacing(dice_score), c) for c in range(1, dataset.n_classes) }, **{ f'surface_dice_{c}': multiclass_to_bool(surface_dice, c) for c in range(1, dataset.n_classes) } } val_metrics = convert_to_aggregated(individual_metrics) # run experiment logger = TBLogger(EXPERIMENT_PATH / FOLD / 'logs') commands.populate(EXPERIMENT_PATH / 'config.json', save_json, CONFIG, EXPERIMENT_PATH / 'config.json') commands.populate( EXPERIMENT_PATH / FOLD / 'model.pth', lambda: [