# -*- coding: utf-8 -*- # Running an Experiment Using CellViT cell segmentation network # # @ Fabian Hörst, fabian.hoerst@uk-essen.de # Institute for Artifical Intelligence in Medicine, # University Medicine Essen import inspect import os import sys currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) parentdir = os.path.dirname(currentdir) sys.path.insert(0, parentdir) import wandb from base_ml.base_cli import ExperimentBaseParser from cell_segmentation.experiments.experiment_cellvit_pannuke import ( ExperimentCellVitPanNuke, ) from cell_segmentation.experiments.experiment_cellvit_conic import ( ExperimentCellViTCoNic, ) from cell_segmentation.inference.inference_cellvit_experiment_pannuke import ( InferenceCellViT, ) if __name__ == "__main__": # Parse arguments configuration_parser = ExperimentBaseParser() configuration = configuration_parser.parse_arguments() if configuration["data"]["dataset"].lower() == "pannuke": experiment_class = ExperimentCellVitPanNuke elif configuration["data"]["dataset"].lower() == "conic": experiment_class = ExperimentCellViTCoNic # Setup experiment if "checkpoint" in configuration: # continue checkpoint experiment = experiment_class( default_conf=configuration, checkpoint=configuration["checkpoint"] ) outdir = experiment.run_experiment() inference = InferenceCellViT( run_dir=outdir, gpu=configuration["gpu"], checkpoint_name=configuration["eval_checkpoint"], magnification=configuration["data"].get("magnification", 40), ) ( trained_model, inference_dataloader, dataset_config, ) = inference.setup_patch_inference() inference.run_patch_inference( trained_model, inference_dataloader, dataset_config, generate_plots=False ) else: experiment = experiment_class(default_conf=configuration) if configuration["run_sweep"] is True: # run new sweep sweep_configuration = experiment_class.extract_sweep_arguments( configuration ) os.environ["WANDB_DIR"] = os.path.abspath( configuration["logging"]["wandb_dir"] ) sweep_id = wandb.sweep( sweep=sweep_configuration, project=configuration["logging"]["project"] ) wandb.agent(sweep_id=sweep_id, function=experiment.run_experiment) elif "agent" in configuration and configuration["agent"] is not None: # add agent to already existing sweep, not run sweep must be set to true configuration["run_sweep"] = True os.environ["WANDB_DIR"] = os.path.abspath( configuration["logging"]["wandb_dir"] ) wandb.agent( sweep_id=configuration["agent"], function=experiment.run_experiment ) else: # casual run outdir = experiment.run_experiment() inference = InferenceCellViT( run_dir=outdir, gpu=configuration["gpu"], checkpoint_name=configuration["eval_checkpoint"], magnification=configuration["data"].get("magnification", 40), ) ( trained_model, inference_dataloader, dataset_config, ) = inference.setup_patch_inference() inference.run_patch_inference( trained_model, inference_dataloader, dataset_config, generate_plots=False, ) wandb.finish()