Auto3dseg#

class monai.auto3dseg.Algo[源代码]#

在此上下文中,算法广义上定义为由多个组件组成的数据处理管线,例如图像预处理,随后是深度学习模型训练和评估。

get_output_path(*args, **kwargs)[源代码]#

返回算法脚本位置的输出路径

get_score(*args, **kwargs)[源代码]#

根据训练和验证数据集返回模型质量度量。

predict(*args, **kwargs)[源代码]#

读取测试数据并输出模型预测结果。

set_data_stats(*args, **kwargs)[源代码]#

提供数据集(和摘要),以便模型创建可以依赖于输入数据集。

train(*args, **kwargs)[源代码]#

读取训练/验证数据并输出模型。

class monai.auto3dseg.AlgoGen[源代码]#

一个数据驱动的算法生成器。它可选地接受以下输入:

  • 训练数据集属性(例如来自 monai.auto3dseg.analyzer 的数据统计信息),

  • 衡量模型质量的先前算法分数,

  • 计算预算,

并生成 Algo 实例。生成的算法将使用训练数据集进行训练。

                          scores
                +------------------------+
                |   +---------+          |
+-----------+   +-->|         |    +-----+----+
| Dataset,  |       | AlgoGen |--->|   Algo   |
| summaries |------>|         |    +----------+
+-----+-----+       +---------+          ^
      |                                  |
      +----------------------------------+

此类还维护先前生成的 Algo 及其相应验证分数的历史记录。Algo 生成过程可能是随机的(使用 Randomizable.R 作为随机状态源)。

generate()[源代码]#

生成新的 Algo – 基于 data_stats、预算和先前算法生成的历史记录。

get_budget(*args, **kwargs)[源代码]#

获取当前的计算预算。

get_data_stats(*args, **kwargs)[源代码]#

获取当前数据集摘要。

get_history(*args, **kwargs)[源代码]#

获取先前生成的算法。

run_algo(*args, **kwargs)[源代码]#

启动算法。这对于无需分布式训练作业的轻量级算法非常有用。

如果生成的算法需要大量并行执行调度,则最好使用单独实现的作业调度器/控制器来运行它们。在这种情况下,控制器还应报告分数和算法历史记录,以便未来的 AlgoGen.generate 可以利用这些信息。

set_budget(*args, **kwargs)[源代码]#

提供计算预算,以便生成器输出需要合理资源的算法。

set_data_stats(*args, **kwargs)[源代码]#

提供数据集摘要/属性,以便生成器可以根据输入数据集进行调整。

set_score(*args, **kwargs)[源代码]#

来自先前生成的算法的反馈,该分数可用于新的 Algo 生成。

class monai.auto3dseg.Analyzer(stats_name, report_format)[源代码]#

Analyzer 组件是一个基类。继承此类的其他类将提供一个具有相同类名的可调用对象,并为输入数据生成一个预格式化的字典。格式由继承此基类的类的 init 函数预定义。函数操作也可以在可调用对象运行时之前注册。

参数:

report_format (dict) – 概述报告格式关键结构的字典。

get_report_format()[源代码]#

通过递归解析已注册的操作来获取报告格式。

返回值:

None} 对。

返回类型:

一个字典,包含 {键

resolve_format(report)[源代码]#

解析预定义报告的格式。

参数:

report (dict) – 要解析的字典。值将原地替换。

返回类型:

None

static unwrap_ops(func)[源代码]#

展开函数值并在运行时实际调用函数时在字典中生成相同的键集合

参数:

func – 表示统计操作的操作子类对象。func 对象应该有一个 data 字典,用于存储统计操作信息。对于某些操作(例如 ImageStats),它可能还包含 data_addon 属性,这是更新过程的一部分。

返回值:

一个包含一组键的字典。

update_ops(key, op)[源代码]#

向 Analyzer 注册统计操作并更新 report_format。

参数:
  • key (str) – 报告中的值键。

  • op (Operations) – 表示统计操作的操作子类对象。

返回类型:

None

update_ops_nested_label(nested_key, op)[源代码]#

更新嵌套标签格式的操作。report_format 中的操作值将被解析为一个只包含键的字典。

参数:
  • nested_key (str) – 格式为 ‘key1#0#key2’ 的字符串。

  • op (Operations) – 表示统计操作的操作子类对象。

返回类型:

None

class monai.auto3dseg.FgImageStats(image_key, label_key, stats_name=image_foreground_stats)[源代码]#

用于提取每个案例(图像和标签)前景标签属性的分析器。

参数:
  • 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)[源代码]#

此摘要分析器处理 dict 列表中的特定键 stats_name 的值。通常,dict 列表是相似名称(FgImageStats)下案例分析器的输出。

参数:
  • stats_name – 要处理的值在 dict 中的键。

  • average – 是否跨不同图像模态平均统计值。

class monai.auto3dseg.FilenameStats(key, stats_name)[源代码]#

此类查找加载的图像/标签的文件路径,并将信息写入数据管线作为 monai 变换。

参数:
  • key – 获取文件名的键(例如,“image”,“label”)。

  • stats_name – 在输出统计报告中存储文件名的键。

class monai.auto3dseg.ImageStats(image_key, stats_name=image_stats)[源代码]#

用于提取每个案例(图像)图像统计属性的分析器。

参数:

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 数组,则间距统计信息将是数组的 [1.0] * ndims,其中 ndims 是图像维度和 3 之间的较小值。

class monai.auto3dseg.ImageStatsSumm(stats_name=image_stats, average=True)[源代码]#

此摘要分析器处理 dict 列表中的特定键 stats_name 的值。通常,dict 列表是相同前缀(ImageStats)下案例分析器的输出。

参数:
  • stats_name – 要处理的值在 dict 中的键。

  • average – 是否跨不同图像模态平均统计值。

class monai.auto3dseg.LabelStats(image_key, label_key, stats_name=label_stats, do_ccp=True)[源代码]#

用于提取每个案例(图像和标签)标签统计属性的分析器。

参数:
  • image_key – 在可调用函数输入 (data) 中查找图像数据的键

  • label_key – 在可调用函数输入 (data) 中查找标签数据的键

  • do_ccp – 执行连通分量分析。默认为 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)[源代码]#

此摘要分析器处理 dict 列表中的特定键 stats_name 的值。通常,dict 列表是相似名称(LabelStats)下案例分析器的输出。

参数:
  • stats_name – 要处理的值在 dict 中的键。

  • average – 是否跨不同图像模态平均统计值。

class monai.auto3dseg.Operations(dict=None, /, **kwargs)[源代码]#

操作接口的基类

evaluate(data, **kwargs)[源代码]#

对于 self.data 中的键值对,如果值是可调用的,则此函数将对输入数据应用可调用对象。结果将写入输出 dict 中相同的键下。

参数:

data (Any) – 输入数据。

返回类型:

dict

返回值:

一个字典,如果值是可调用的,则具有与 self.data 相同的键。

是可调用的。

class monai.auto3dseg.SampleOperations[源代码]#

对样本(图像/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))
evaluate(data, **kwargs)[源代码]#

将可调用对象应用于数据,并将数字转换为列表或 Python 数字类型(int/float)。

参数:

data (Any) – 输入数据

返回类型:

dict

class monai.auto3dseg.SegSummarizer(image_key, label_key, average=True, do_ccp=True, hist_bins=None, hist_range=None, histogram_only=False)[源代码]#

SegSummarizer 序列化 Auto3dseg 管线中的数据分析操作。它加载两种类型的分析器函数并以不同方式执行。第一种分析器是 CaseAnalyzer,类似于传统的 monai 变换。它可以与其他变换组合以处理具有图像/标签键的数据字典。第二种分析器是 SummaryAnalyzer,它只处理字典列表。每个字典是案例分析器在单个数据集上的输出。

参数:
  • image_key – 用户为图像指定的字符串。DataAnalyzer 将在 datalist 中查找它以定位数据集的图像文件。

  • label_key – 用户为标签指定的字符串。DataAnalyzer 将在 datalist 中查找它以定位数据集的标签文件。如果 label_key 为 None,DataAnalyzer 将跳过查找标签及所有标签相关操作。

  • do_ccp – 应用连通分量算法处理标签/图像。

  • hist_bins – 正整数列表(每个通道一个),用于设置计算直方图时使用的 bin 数量。默认为 [100]。

  • hist_range – 包含两个浮点数的列表(每个通道一个),用于设置计算直方图的强度范围。默认为 [-500, 500]。

  • histogram_only – 是否仅计算直方图。默认为 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)[源代码]#

向引擎添加新的分析器,以便可调用函数和 summarize 函数将利用新的分析器进行统计计算。

参数:
  • case_analyzer – 处理每个数据的分析器。

  • summary_analyzer – 处理统计信息字典列表(case_analyzers 的输出)的分析器。

示例

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)
summarize(data)[源代码]#

汇总输入数据列表,并生成可供 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[源代码]#

应用统计操作来汇总一个字典。键值看起来像:{“max”,“min”,“mean”,....}。值可能包含列表格式的多个值。然后此操作将对该列表应用操作。通常,该字典由多个 SampleOperationconcat_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"
evaluate(data, **kwargs)[源代码]#

将可调用对象应用于数据,并将数字转换为列表或 Python 数字类型(int/float)。

参数:

data (Any) – 输入数据

返回类型:

dict

monai.auto3dseg.algo_from_pickle(pkl_filename, template_path=None, **kwargs)[源代码]#

从 pickle 文件导入 Algo 对象。

参数:
  • pkl_filename – pickle 文件的名称。

  • template_path – 包含实例化 Algo 的文件的文件夹。除了 template_path

  • directory (此函数还将尝试使用保存在 pickle 文件中的 template_path 和一个)

  • file. (位于包含 pickle 文件文件夹的父文件夹中的 algorithm_templates)

返回值:

保存在 pickle 文件中的 Algo 对象。algo_meta_data: 保存在 pickle 文件中的附加关键字,例如 acc/best_metrics。

返回类型:

algo

抛出:
  • 如果 pkl_filename 不包含字典,或字典不包含 algo_bytes,则抛出 ValueError。

  • 如果无法实例化 Algo 类,则抛出 ModuleNotFoundError。

monai.auto3dseg.algo_to_pickle(algo, template_path=None, **algo_meta_data)[源代码]#

将 Algo 对象导出到 pickle 文件。

参数:
  • algo – Algo 类对象。

  • template_path – 需要添加到 sys.path 的字符串路径以实例化类。

  • algo_meta_data – 要保存到字典中的附加关键字,例如模型训练信息,如 acc/best_metrics

返回值:

已 pickle 化的 Algo 对象的文件名

monai.auto3dseg.concat_multikeys_to_dict(data_list, fixed_keys, keys, zero_insert=True, **kwargs)[源代码]#

迭代所有键,获取共享相同结构的字典列表中的嵌套值。它返回一个字典,其键是找到的值,值是 nd.ndarray。

参数:
  • data_list – 字典列表 {key1: {key2: np.ndarray}}。

  • fixed_keys – 记录字典元素中值路径的键列表。

  • keys – 将迭代以生成字典输出的字符串键列表。

  • zero_insert – 在列表中插入一个零,以便在获取键之前找到元素 0 中的值

  • flatten – 如果为 True,则在连接之前将数字展平。

返回值:

一个包含键的字典 - 连接数组对的 nd.array。

monai.auto3dseg.concat_val_to_np(data_list, fixed_keys, ragged=False, allow_missing=False, **kwargs)[源代码]#

获取共享相同结构的字典列表中的嵌套值。

参数:
  • data_list – 字典列表 {key1: {key2: np.ndarray}}。

  • fixed_keys – 记录字典元素中值路径的键列表。

  • ragged – 如果为 True,数字可以是列表的列表或不规则格式,因此需要更改连接模式。

  • allow_missing – 如果为 True,则如果找不到值,将返回 None。

返回值:

连接数组的 nd.array。

monai.auto3dseg.datafold_read(datalist, basedir, fold=0, key='training')[源代码]#

读取数据字典列表 datalist

参数:
  • datalist – 列出数据的 JSON 文件名,或一个字典。

  • basedir – 图像文件的目录。

  • fold – 使用哪个折叠(如果在训练集中,则为 0..1)。

  • key – 通常是 ‘training’,但可以尝试 ‘validation’ 或 ‘testing’ 来获取没有标签的列表数据(用于挑战赛)。

返回值:

包含两个数组的元组(training,validation)。

monai.auto3dseg.get_foreground_image(image)[源代码]#

通过移除图像边缘的所有零矩形来获取前景图像。开发者注意:如果前景定义不同,请更新 select_fn。

参数:

image (MetaTensor) – 要分割的 ndarray 图像。

返回类型:

ndarray

返回值:

通过移除所有零边缘得到的前景图像的 ndarray。

注意

输出尺寸小于输入尺寸。

monai.auto3dseg.get_foreground_label(image, label)[源代码]#

获取前景图像像素值并遮蔽非标签区域。

参数

image: 要分割的 ndarray 图像。label: 带有类别 ID 注释的 ndarray 图像输入。

返回类型:

MetaTensor

返回值:

带有 label > 0 的前景图像的 1D 数组

monai.auto3dseg.get_label_ccp(mask_index, use_gpu=True)[源代码]#

查找所有连通分量及其边界形状。后端可以是 cuPy/cuCIM 或 Numpy,具体取决于硬件。

参数:
  • mask_index (MetaTensor) – 二进制掩码。

  • use_gpu (bool) – 是否使用 GPU/CUDA 的开关。如果 GPU 不可用,无论此设置如何,都将使用 CPU。

返回类型:

tuple[list[Any], int]

monai.auto3dseg.verify_report_format(report, report_format)[源代码]#

比较报告和仅包含键的 report_format。

参数:
  • report (dict) – 包含实际值的字典。

  • report_format (dict) – 仅包含键和列表嵌套值的字典。

返回类型:

bool