Auto3dseg#
- class monai.auto3dseg.AlgoGen[源代码]#
一个数据驱动的算法生成器。它可选地接受以下输入:
训练数据集属性(例如来自
monai.auto3dseg.analyzer
的数据统计信息),衡量模型质量的先前算法分数,
计算预算,
并生成
Algo
实例。生成的算法将使用训练数据集进行训练。scores +------------------------+ | +---------+ | +-----------+ +-->| | +-----+----+ | Dataset, | | AlgoGen |--->| Algo | | summaries |------>| | +----------+ +-----+-----+ +---------+ ^ | | +----------------------------------+
此类还维护先前生成的 Algo 及其相应验证分数的历史记录。Algo 生成过程可能是随机的(使用
Randomizable.R
作为随机状态源)。
- class monai.auto3dseg.Analyzer(stats_name, report_format)[源代码]#
Analyzer 组件是一个基类。继承此类的其他类将提供一个具有相同类名的可调用对象,并为输入数据生成一个预格式化的字典。格式由继承此基类的类的 init 函数预定义。函数操作也可以在可调用对象运行时之前注册。
- 参数:
report_format (
dict
) – 概述报告格式关键结构的字典。
- 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.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))
- 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”,....}。值可能包含列表格式的多个值。然后此操作将对该列表应用操作。通常,该字典由多个 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_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 图像输入。
- 返回类型:
- 返回值:
带有 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
]