Auto3dseg#
- class monai.auto3dseg.Algo[source]#
在此语境下,算法被宽泛地定义为由多个组件组成的数据处理流水线,例如图像预处理,随后是深度学习模型的训练和评估。
注意
当通过
algo_to_json/algo_from_json进行序列化时,子类将通过monai.bundle.ConfigParser从其完全限定的类名重新实例化。这要求子类具有默认构造函数(没有必需的位置参数);之后通过load_state_dict恢复状态。- load_state_dict(state)[source]#
从字典恢复状态。
子类应重写此方法,以从 state_dict() 返回的字典中恢复其状态。
- 参数:
state (
dict) – 包含要恢复状态的字典。- 返回类型:
None
- class monai.auto3dseg.AlgoGen[source]#
一种数据驱动的算法生成器。它可选择性地接收以下输入:
训练数据集属性(例如来自
monai.auto3dseg.analyzer的数据统计信息),之前评估模型质量的算法分数,
计算预算,
并生成
Algo实例。生成的算法将使用训练数据集进行训练。scores +------------------------+ | +---------+ | +-----------+ +-->| | +-----+----+ | Dataset, | | AlgoGen |--->| Algo | | summaries |------>| | +----------+ +-----+-----+ +---------+ ^ | | +----------------------------------+
此类还维护先前生成的算法及其相应验证分数的历史记录。算法生成过程可能是随机的(使用
Randomizable.R作为随机源)。
- class monai.auto3dseg.Analyzer(stats_name, report_format)[source]#
Analyzer 组件是一个基类。继承此类的其他类将提供一个与类名相同的可调用对象,并为输入数据生成一个预格式化的字典。格式由继承此基类的类的 init 函数预定义。函数操作也可以在可调用对象运行时之前注册。
- 参数:
report_format (
dict) – 概述报告格式关键结构的字典。
- static unwrap_ops(func)[source]#
解包函数值,并在运行时实际调用函数时在字典中生成同一组键。
- 参数:
func – 表示统计操作的操作子类对象。func 对象应有一个 data 字典,用于存储统计操作信息。对于某些操作(例如 ImageStats),它可能还包含 data_addon 属性,这是更新过程的一部分。
- 返回:
带有特定键集的字典。
- update_ops(key, op)[source]#
向 Analyzer 注册一个统计操作并更新 report_format。
- 参数:
key (
str) – 报告中的值键。op (
Operations) – 表示统计操作的操作子类对象。
- 返回类型:
None
- update_ops_nested_label(nested_key, op)[source]#
更新嵌套标签格式的操作。report_format 中的操作值将被解析为一个仅包含键的字典。
- 参数:
nested_key (
str) – 格式为 ‘key1#0#key2’ 的字符串。op (
Operations) – 表示统计操作的操作子类对象。
- 返回类型:
None
- class monai.auto3dseg.FgImageStats(image_key, label_key, stats_name=image_foreground_stats)[source]#
用于为每个案例(图像和标签)提取前景标签属性的分析器。
- 参数:
image_key (
str) – 在可调用函数输入 (data) 中查找图像数据的键。label_key (
str) – 在可调用函数输入 (data) 中查找标签数据的键。
示例
import numpy as np from monai.auto3dseg import FgImageStats input = {} input['image'] = np.random.rand(1,30,30,30) input['label'] = np.ones([30,30,30]) analyzer = FgImageStats(image_key='image', label_key='label') print(analyzer(input)["image_foreground_stats"])
- class monai.auto3dseg.FgImageStatsSumm(stats_name=image_foreground_stats, average=True)[source]#
此摘要分析器处理字典列表中特定键 stats_name 的值。通常,字典列表是同名案例分析器 (FgImageStats) 的输出。
- 参数:
stats_name (
str) – 字典中待处理值的键。average (
UnionType[bool,None]) – 是否跨不同图像模态平均统计值。
- class monai.auto3dseg.FilenameStats(key, stats_name)[source]#
此类查找加载的图像/标签的文件路径,并将该信息作为 monai 变换写入数据流水线。
- 参数:
key (
UnionType[str,None]) – 用于获取文件名的键(例如,“image”,“label”)。stats_name (
str) – 用于在输出统计报告中存储文件名的键。
- class monai.auto3dseg.ImageStats(image_key, stats_name=image_stats)[source]#
用于提取每个案例(图像)的图像统计属性的分析器。
- 参数:
image_key (
str) – 在可调用函数输入 (data) 中查找图像数据的键。
示例
import numpy as np from monai.auto3dseg import ImageStats from monai.data import MetaTensor input = {} input['image'] = np.random.rand(1,30,30,30) input['image'] = MetaTensor(np.random.rand(1,30,30,30)) # MetaTensor analyzer = ImageStats(image_key="image") print(analyzer(input)["image_stats"])
注意
如果图像数据是 NumPy 数组,间距统计信息将是数组 ndims 的 [1.0] * ndims,其中 ndims 是图像维度和 3 之间的较小值。
- class monai.auto3dseg.ImageStatsSumm(stats_name=image_stats, average=True)[source]#
此摘要分析器处理字典列表中特定键 stats_name 的值。通常,字典列表是同名前缀案例分析器 (ImageStats) 的输出。
- 参数:
stats_name (
str) – 字典中待处理值的键。average (
UnionType[bool,None]) – 是否跨不同图像模态平均统计值。
- class monai.auto3dseg.LabelStats(image_key, label_key, stats_name=label_stats, do_ccp=True)[source]#
用于提取每个案例(图像和标签)的标签统计属性的分析器。
- 参数:
image_key (
str) – 在可调用函数输入 (data) 中查找图像数据的键。label_key (
str) – 在可调用函数输入 (data) 中查找标签数据的键。do_ccp (
UnionType[bool,None]) – 执行连通分量分析。默认为 True。
示例
import numpy as np from monai.auto3dseg import LabelStats input = {} input['image'] = np.random.rand(1,30,30,30) input['label'] = np.ones([30,30,30]) analyzer = LabelStats(image_key='image', label_key='label') print(analyzer(input)["label_stats"])
- class monai.auto3dseg.LabelStatsSumm(stats_name=label_stats, average=True, do_ccp=True)[source]#
此摘要分析器处理字典列表中特定键 stats_name 的值。通常,字典列表是同名案例分析器 (LabelStats) 的输出。
- 参数:
stats_name (
str) – 字典中待处理值的键。average (
UnionType[bool,None]) – 是否跨不同图像模态平均统计值。
- class monai.auto3dseg.SampleOperations[source]#
对样本(图像/ndarray/张量)应用统计操作。
注意
百分位数操作使用一个嵌入不同 kwargs (q) 的偏函数。为了美观地打印结果,添加了 data_addon 以将百分位数生成的数字映射到不同的键(例如“percentile_00_5”)。后缀注释表示百分位数计算的百分比。例如,_00_5 表示 0.5%,_99_5 表示 99.5%。
示例
# use the existing operations import numpy as np op = SampleOperations() data_np = np.random.rand(10, 10).astype(np.float64) print(op.evaluate(data_np)) # add a new operation op.update({"sum": np.sum}) print(op.evaluate(data_np))
- class monai.auto3dseg.SegSummarizer(image_key, label_key, average=True, do_ccp=True, hist_bins=None, hist_range=None, histogram_only=False)[source]#
SegSummarizer 为 Auto3Dseg 流水线中的数据分析序列化操作。它加载两种类型的分析器函数并以不同方式执行。第一种类型的分析器是 CaseAnalyzer,类似于传统的 monai 变换。它可以与其他变换组合使用,以处理具有图像/标签键的数据字典。第二种类型的分析器是 SummaryAnalyzer,仅适用于字典列表。每个字典都是单个数据集上案例分析器的输出。
- 参数:
image_key (
str) – 用户为图像指定的字符串。DataAnalyzer 将在 datalist 中查找它以定位数据集的图像文件。label_key (
UnionType[str,None]) – 用户为标签指定的字符串。DataAnalyzer 将在 datalist 中查找它以定位数据集的标签文件。如果 label_key 为 None,DataAnalyzer 将跳过查找标签及所有与标签相关的操作。do_ccp (
bool) – 应用连通分量算法来处理标签/图像。hist_bins (
Union[list[int],int,None]) – 正整数列表(每个通道一个),用于设置计算直方图时使用的 bin 数量。默认为 [100]。hist_range (
Optional[list,None]) – 两个浮点数列表的列表(每个通道一个),用于设置计算直方图的强度范围。默认为 [-500, 500]。histogram_only (
bool) – 是否仅计算直方图。默认为 False。
示例
# imports summarizer = SegSummarizer("image", "label") transform_list = [ LoadImaged(keys=keys), EnsureChannelFirstd(keys=keys), # this creates label to be (1,H,W,D) ToDeviced(keys=keys, device=device, non_blocking=True), Orientationd(keys=keys, axcodes="RAS"), EnsureTyped(keys=keys, data_type="tensor"), Lambdad(keys="label", func=lambda x: torch.argmax(x, dim=0, keepdim=True) if x.shape[0] > 1 else x), SqueezeDimd(keys=["label"], dim=0), summarizer, ] ... # skip some steps to set up data loader dataset = data.DataLoader(ds, batch_size=1, shuffle=False, num_workers=n_workers, collate_fn=no_collation) transform = Compose(transform_list) stats = [] for batch_data in dataset: d = transform(batch_data[0]) stats.append(d) report = summarizer.summarize(stats)
- add_analyzer(case_analyzer, summary_analyzer)[source]#
向引擎添加新的分析器,以便可调用和总结函数利用这些新分析器进行统计计算。
- 参数:
示例
from monai.auto3dseg import Analyzer from monai.auto3dseg.utils import concat_val_to_np from monai.auto3dseg.analyzer_engine import SegSummarizer class UserAnalyzer(Analyzer): def __init__(self, image_key="image", stats_name="user_stats"): self.image_key = image_key report_format = {"ndims": None} super().__init__(stats_name, report_format) def __call__(self, data): d = dict(data) report = deepcopy(self.get_report_format()) report["ndims"] = d[self.image_key].ndim d[self.stats_name] = report return d class UserSummaryAnalyzer(Analyzer): def __init__(stats_name="user_stats"): report_format = {"ndims": None} super().__init__(stats_name, report_format) self.update_ops("ndims", SampleOperations()) def __call__(self, data): report = deepcopy(self.get_report_format()) v_np = concat_val_to_np(data, [self.stats_name, "ndims"]) report["ndims"] = self.ops["ndims"].evaluate(v_np) return report summarizer = SegSummarizer() summarizer.add_analyzer(UserAnalyzer, UserSummaryAnalyzer)
- 返回类型:
None
- summarize(data)[source]#
总结输入数据列表,并生成准备导出为 json/yaml 的报告。
- 参数:
data (
list[dict]) – 数据字典列表。- 返回类型:
dict[str,dict]- 返回:
总结数据样本统计信息的字典。
示例
- stats_summary
- image_foreground_stats
intensity: {…}
- image_stats
channels: {…} cropped_shape: {…} …
- label_stats
image_intensity: {…} label: - image_intensity: {…} - image_intensity: {…} - image_intensity: {…} - image_intensity: {…}
- class monai.auto3dseg.SummaryOperations[source]#
应用统计操作来总结字典。键值如下:{“max”, “min” ,”mean”, …. }。值可能以列表格式包含多个值。此操作将对该列表应用操作。通常,该字典由多个 SampleOperation 和 concat_multikeys_to_dict 函数生成。
示例
import numpy as np data = { "min": np.random.rand(4), "max": np.random.rand(4), "mean": np.random.rand(4), "sum": np.random.rand(4), } op = SummaryOperations() print(op.evaluate(data)) # "sum" is not registered yet, so it won't contain "sum" op.update({"sum", np.sum}) print(op.evaluate(data)) # output has "sum"
- monai.auto3dseg.algo_from_json(filename, template_path=None, **kwargs)[source]#
从 JSON 文件导入 Algo 对象(无 pickle 序列化)。
- 参数:
filename (
str) – 保存的文件名 (algo_object.json 或旧版 algo_object.pkl)。template_path (
Union[str,PathLike,None]) – 包含实例化 Algo 所需文件的文件夹。除了 template_path,此函数还将尝试使用文件中保存的 template_path 以及包含该文件的文件夹的父文件夹中名为 algorithm_templates 的目录。kwargs (
Any) – 额外的关键字参数(保留供将来使用)。
- 返回:
文件中保存的 Algo 对象。algo_meta_data:文件中保存的额外关键字,例如 acc/best_metrics。
- 返回类型:
algo
- 引发异常:
ValueError – 如果文件格式无效或无法实例化 Algo 类。
ModuleNotFoundError – 如果无法实例化 Algo 类。
- monai.auto3dseg.algo_from_pickle(pkl_filename, template_path=None, **kwargs)[source]#
从 pickle 文件导入 Algo 对象。不安全;建议优先使用
algo_from_json。除非设置了
MONAI_ALLOW_PICKLE=1,否则该功能将被禁用。有关模板路径解析的详细信息,请参见_load_legacy_pickle。- 返回类型:
Any
- monai.auto3dseg.algo_to_json(algo, template_path=None, **algo_meta_data)[source]#
将 Algo 对象导出为 JSON 文件(无 pickle 序列化)。
- 参数:
algo (
Algo) – 类 Algo 对象(通常是 BundleAlgo 或其子类)。template_path (
Union[str,PathLike,None]) – 加载自定义 Algo 类时 sys.path 设置所需的路径。algo_meta_data (
Any) – 要保存的额外元数据(例如 best_metric, score)。
- 返回类型:
str- 返回:
保存的 Algo 对象的文件名 (algo_object.json)。
- monai.auto3dseg.algo_to_pickle(algo, template_path=None, **algo_meta_data)[source]#
将 Algo 对象导出为 pickle 文件。不安全;建议优先使用
algo_to_json。Pickle 加载时可执行任意代码。除非设置了环境变量
MONAI_ALLOW_PICKLE=1,否则此功能被禁用,即使在启用时也会发出UserWarning。请使用algo_to_json进行安全的、无 pickle 的序列化。- 参数:
algo (
Algo) – 类 Algo 对象。template_path (
Union[str,PathLike,None]) – 加载时实例化类所需的需要添加到sys.path的字符串路径。algo_meta_data (
Any) – 要保存的额外关键字(例如 acc/best_metrics)。
- 返回类型:
str- 返回:
Pickle 化的 Algo 对象的文件名。
- monai.auto3dseg.concat_multikeys_to_dict(data_list, fixed_keys, keys, zero_insert=True, **kwargs)[source]#
获取字典列表中在所有键上共享相同结构的嵌套值。它返回一个字典,其中的键对应找到的 nd.ndarray 值。
- 参数:
data_list (
list[dict]) – 字典列表 {key1: {key2: np.ndarray}}。fixed_keys (
list[UnionType[str,int]]) – 记录字典元素中值路径的键列表。keys (
list[str]) – 将被迭代以生成字典输出的字符串键列表。zero_insert (
bool) – 在列表中插入一个零,以便在获取键之前可以找到元素 0 中的值。flatten – 如果为 True,数字在拼接前会被扁平化。
- 返回类型:
dict[str,ndarray]- 返回:
带有键 - 拼接数组对的 nd.array 的字典。
- monai.auto3dseg.concat_val_to_np(data_list, fixed_keys, ragged=False, allow_missing=False, **kwargs)[source]#
获取共享相同结构的字典列表中的嵌套值。
- 参数:
data_list (
list[dict]) – 字典列表 {key1: {key2: np.ndarray}}。fixed_keys (
list[UnionType[str,int]]) – 记录字典元素中值路径的键列表。ragged (
UnionType[bool,None]) – 如果为 True,数字可以是列表的列表或不规则格式,因此需要更改拼接模式。allow_missing (
UnionType[bool,None]) – 如果为 True,当找不到值时将返回 None。
- 返回类型:
ndarray- 返回:
拼接数组的 nd.array。
- monai.auto3dseg.datafold_read(datalist, basedir, fold=0, key='training')[source]#
读取数据字典列表 datalist。
- 参数:
datalist (
UnionType[str,dict]) – 列出数据的 JSON 文件名,或一个字典。basedir (
str) – 图像文件所在的目录。fold (
int) – 使用哪个折叠 (0..1,如果在训练集中)。key (
str) – 通常是 ‘training’,但可以尝试 ‘validation’ 或 ‘testing’ 来获取没有标签的列表数据(用于挑战赛)。
- 返回类型:
tuple[list,list]- 返回:
包含两个数组(训练,验证)的元组。
- monai.auto3dseg.get_foreground_image(image)[source]#
通过移除图像边缘上的全零矩形来获取前景图像。开发者注意:如果前景定义不同,请更新 select_fn。
- 参数:
image (
MetaTensor) – 要分割的 ndarray 图像。- 返回类型:
ndarray- 返回:
通过移除全零边缘获得的前景图像的 ndarray。
注意
输出大小小于输入大小。
- monai.auto3dseg.get_foreground_label(image, label)[source]#
获取前景图像像素值并屏蔽掉非标记区域。
- 参数
image:要分割的 ndarray 图像。label:带有类 ID 注释的图像输入 ndarray。
- 返回类型:
- 返回:
标签 > 0 的前景图像的一维数组。
- monai.auto3dseg.get_label_ccp(mask_index, use_gpu=True)[source]#
查找所有连通分量及其边界形状。后端可以是 cuPy/cuCIM 或 Numpy,具体取决于硬件。
- 参数:
mask_index (
MetaTensor) – 二进制掩码。use_gpu (
bool) – 是否使用 GPU/CUDA 的开关。如果 GPU 不可用,无论此设置如何,都将使用 CPU。
- 返回类型:
tuple[list[Any],int]