Source code for monai.apps.auto3dseg.utils

# Copyright (c) MONAI Consortium
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#     http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from __future__ import annotations

import os

from monai.apps.auto3dseg.bundle_gen import BundleAlgo
from monai.auto3dseg import algo_from_pickle, algo_to_pickle
from monai.utils.enums import AlgoKeys

__all__ = ["import_bundle_algo_history", "export_bundle_algo_history", "get_name_from_algo_id"]


[docs] def import_bundle_algo_history( output_folder: str = ".", template_path: str | None = None, only_trained: bool = True ) -> list: """ import the history of the bundleAlgo objects as a list of algo dicts. each algo_dict has keys name (folder name), algo (bundleAlgo), is_trained (bool), Args: output_folder: the root path of the algorithms templates. template_path: the algorithm_template. It must contain algo.py in the follow path: ``{algorithm_templates_dir}/{network}/scripts/algo.py``. only_trained: only read the algo history if the algo is trained. """ history = [] for name in sorted(os.listdir(output_folder)): write_path = os.path.join(output_folder, name) if not os.path.isdir(write_path): continue obj_filename = os.path.join(write_path, "algo_object.pkl") if not os.path.isfile(obj_filename): # saved mode pkl continue algo, algo_meta_data = algo_from_pickle(obj_filename, template_path=template_path) best_metric = algo_meta_data.get(AlgoKeys.SCORE, None) if best_metric is None: try: best_metric = algo.get_score() except BaseException: pass is_trained = best_metric is not None if (only_trained and is_trained) or not only_trained: history.append( {AlgoKeys.ID: name, AlgoKeys.ALGO: algo, AlgoKeys.SCORE: best_metric, AlgoKeys.IS_TRAINED: is_trained} ) return history
[docs] def export_bundle_algo_history(history: list[dict[str, BundleAlgo]]) -> None: """ Save all the BundleAlgo in the history to algo_object.pkl in each individual folder Args: history: a List of Bundle. Typically, the history can be obtained from BundleGen get_history method """ for algo_dict in history: algo = algo_dict[AlgoKeys.ALGO] algo_to_pickle(algo, template_path=algo.template_path)
[docs] def get_name_from_algo_id(id: str) -> str: """ Get the name of Algo from the identifier of the Algo. Args: id: identifier which follows a convention of "name_fold_other". Returns: name of the Algo. """ return id.split("_")[0]