| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| from batchgenerators.utilities.file_and_folder_operations import * |
|
|
|
|
| def pretend_to_be_nnUNetTrainer(folder, checkpoints=("model_best.model.pkl", "model_final_checkpoint.model.pkl")): |
| pretend_to_be_other_trainer(folder, "nnUNetTrainer", checkpoints) |
|
|
|
|
| def pretend_to_be_other_trainer(folder, new_trainer_name, checkpoints=("model_best.model.pkl", "model_final_checkpoint.model.pkl")): |
| folds = subdirs(folder, prefix="fold_", join=False) |
|
|
| if isdir(join(folder, 'all')): |
| folds.append('all') |
|
|
| for c in checkpoints: |
| for f in folds: |
| checkpoint_file = join(folder, f, c) |
| if isfile(checkpoint_file): |
| a = load_pickle(checkpoint_file) |
| a['name'] = new_trainer_name |
| save_pickle(a, checkpoint_file) |
|
|
|
|
| def main(): |
| import argparse |
| parser = argparse.ArgumentParser(description='Use this script to change the nnunet trainer class of a saved ' |
| 'model. Useful for models that were trained with trainers that do ' |
| 'not support inference (multi GPU trainers) or for trainer classes ' |
| 'whose source code is not available. For this to work the network ' |
| 'architecture must be identical between the original trainer ' |
| 'class and the trainer class we are changing to. This script is ' |
| 'experimental and only to be used by advanced users.') |
| parser.add_argument('-i', help='Folder containing the trained model. This folder is the one containing the ' |
| 'fold_X subfolders.') |
| parser.add_argument('-tr', help='Name of the new trainer class') |
| args = parser.parse_args() |
| pretend_to_be_other_trainer(args.i, args.tr) |
|
|