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.
import os
from typing import Dict, List, Optional
from monai.apps.auto3dseg.bundle_gen import BundleAlgo
from monai.auto3dseg import algo_from_pickle, algo_to_pickle
[docs]def import_bundle_algo_history(
output_folder: str = ".", template_path: Optional[str] = None, only_trained: bool = True
) -> List:
"""
import the history of the bundleAlgo object with their names/identifiers
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 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)
if isinstance(algo, BundleAlgo): # algo's template path needs override
algo.template_path = algo_meta_data["template_path"]
if only_trained:
if "best_metrics" in algo_meta_data:
history.append({name: algo})
else:
history.append({name: algo})
return history
[docs]def export_bundle_algo_history(history: List[Dict[str, BundleAlgo]]):
"""
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 task in history:
for _, algo in task.items():
algo_to_pickle(algo, template_path=algo.template_path)