跳转到主要内容

napari插件,用于迭代改进unet-watershed分割

项目描述

iterseg

License PyPI Python Version napari hub

napari插件,用于迭代改进基于深度学习的unet-watershed分割。


napari插件是用Cookiecutter@naparicookiecutter-napari-plugin模板生成的。

安装

使用pip安装iterseg。假设您已安装python和pip(例如,通过miniconda),您只需在终端(MacOS/Linux)或annaconda提示(Windows)中输入一行即可安装iterseg。我们建议在新环境中安装,因为我们的某些依赖项可能与现有环境中某些版本的包不兼容。

pip install iterseg napari

打开iterseg

安装 iterseg 后,您可以通过 napari 观看器访问它,您可以从命令行(例如,终端(MacOS)、Anaconda 提示符(Windows)、git bash(Windows)等)打开它。要打开 napari,只需在命令行中键入

napari

加载数据

打开 napari 后,您可以通过 load_data 小部件加载图像、标签或形状数据。要打开小部件,请转到屏幕左上角的 插件/iterseg/load_data(MacOS)或查看器(Windows)。

find the widgets

小部件出现在 napari 窗口的右侧后,输入您要给加载的数据起的名字(这将显示在窗口左侧的图层面板上)。选择您想加载的图层类型(图像、标签或形状:分割作为标签图层)。您可以使用“选择目录”(zarrs 被识别为文件文件夹)加载文件文件夹或 zarr 文件,或使用“选择文件”加载 tiff 文件。您可以告诉程序 3D 帧的尺度(格式为 (z, y, x))。

load data

如果您使用的是单个图像文件(3D、4D、5D - ctzyx)或 3D 图像的文件夹(zyx),则在“数据类型”中选择“单个帧”。如果您使用的是 4D 图像的文件夹(tzyx),请选择“图像堆栈”。如果您加载的文件是 4D 或 5D,并且想将时间点(4D:tzyx、czyx)或通道(5D:ctzyx)作为单独的图层加载,请选择“拆分通道”。

图像分割

您可以使用“segment_data”小部件进行数据分割,该小部件位于 插件/iterseg/segment_data。小部件出现后,您可以选择(1)要分割的图像图层,(2)保存数据的文件夹,(3)要给输出文件起的名字,(4)要使用的分割类型,(5:可选)神经网络或配置文件的路径,(6:可选)训练期间生成的包含指向训练神经网络的元数据的图层的路径,(7)块大小(神经网络输入的大小),(8)边距(块之间的重叠边界)。还有一个可选的复选框用于调试。如果选中此选项,将更容易识别错误,但在分割完成之前,您将无法与查看器交互。

segmentation in progress

segmented data

分割图像可用于更快速地生成训练的地面真实值、评估分割质量或进行下游分析。

分割算法

亲和力 U-Net 水平集

亲和力 U-Net 水平集是一种基于特征的单例分割算法。训练好的 U-Net 预测边缘亲和力图(基本上是 x、y 和 z 轴上的边界),中心点图和指定哪些像素属于对象的掩码。特征图被馈送到修改后的水平集算法。使用对象中心点找到水平集的种子,使用亲和力图找到对象之间的边界。如果您使用 iterseg 训练网络,可以选择输出的网络文件进行分割。如果没有选择,我们将使用一个用于检测血小板训练好的网络。这可能适用于具有高各向异性的小对象。

DoG 凝胶分割

DoG 凝胶分割使用高斯差分(DoG)滤波器来查找具有凝胶形状的对象。DoG 滤波器用于查找对象种子、前景掩码,并将其馈送到水平集以标记对象。此算法不能进行训练,但可以使用配置文件进行配置。可以在本存储库的示例文件夹中看到示例配置文件。有关更多详细信息,请参阅 Segmentation_config.md 文件。

生成地面真实值

我们包括两个用于生成地面真实值的工具:“保存帧”和“从 ROI 生成地面真实值”。

保存帧

第一个工具是“保存帧”,可以在 plugins/iterseg/save_frames 找到。它允许您从一系列分割图像或时序数据中保存感兴趣的帧。

save frames

ROI的地面实况

“ROI的地面实况”工具可以在 plugins/iterseg/ground_truth_from_ROI 找到。该工具允许您将一小部分修正后的数据放入一个新帧中,这可以用于训练。新数据可以在新帧中进行平铺,以在训练数据集中过度表示数据。目前,必须通过添加形状层(使用橙色圆圈中的图标添加)然后添加矩形(蓝色圆圈)来选择ROI。

make an ROI

该矩形将用于选择xy平面的一个区域。这在下面的3D中可以看见。

2D ROI in 3D

目前,整个矩形上下方的整个z堆叠将被用于生成地面实况。我们旨在将来整合3D边界框。如果选择了多个ROI,将创建多个新的图像帧,每个帧只有一个ROI。当您从形状层生成地面实况时,您可以选择所需的形状层、图像层和标签层。此外,您可以选择要平铺ROI的次数以及留白的大小。平铺将从右上角开始,然后向下移动到下一行。您还可以选择保存名称和要保存数据的文件夹。

ground truth from ROI

训练网络

iterseg 包含了一个用于训练 u-net 进行 u-net 相性水系的部件。训练部件可以在 plugins/iterseg/train_from_viewer 找到。在训练之前,您需要加载您想要训练的图像和地面实况。图像和地面实况应该是每个系列的三维帧,这些帧被堆叠成一层(我们建议从目录中的帧系列加载)。一旦加载,您可以选择一层作为地面实况和一层作为图像数据。您可以告诉程序输出帧的规模(格式为(z, y, x))。您可以选择要使用哪种中心预测(我们建议使用中心度),要使用哪种预测来使用掩码,以及您想要训练的相性范围(如果 n = 1,网络将仅在每个轴的对象之间预测直接边界,如果大于 1,网络仍将预测直接边界,但还将预测在 n 步之外的新对象的位置 - 可以用作辅助学习以增强训练)。相性范围是发展中的。如有任何问题,请提交问题。

train from viewer

对于 U-net 训练,我们允许您选择用于训练网络的 ADAM优化器 的学习率。您还可以在二进制交叉熵损失(BCELoss)和 Dice 损失(DICELoss)之间进行选择。我们发现在我们的数据中 BCE 损失效果更好。您还可以选择每个帧产生多少数据块(n each)以及您想要训练多少个周期。训练将以 n_each * n_frames 批次进行,最小批大小为 1。

未来我们希望扩展此训练部件,以允许训练其他类型的网络。如果您觉得您可以帮助这项工作,请参与其中。

评估分割

iterseg 包含了评估和比较分割的部件。如果您想评估分割质量,您需要加载要评估的地面实况和分割。一旦加载,您可以使用在 plugins/iterseg/assess_segmentation 中找到的部件选择地面实况和分割(模型分割)。您可以选择要评估的指标。我们启用的指标是

  • 信息变化(VI):VI是一个两部分度量。它包括对下分割和上分割的度量。下分割是指如果你已经看到了分割,从查看真实情况中获得的新信息的量。它可以解释为错误合并的对象的比例。上分割是指如果你已经看到了真实情况,从查看分割中获得的新信息的量。它可以解释为错误分割的对象的比例。更多详情请参阅scikit-image 文档

  • 对象计数差异(OD):对象计数差异简单地是指真实情况和评估分割之间的对象数量差异(card(ground truth) - card(segmentation))。

  • 平均精度(AP):平均精度平均精度是模型在寻找真实正(真实)对象(我们称之为精度)和它找到的多少真实对象(这被称为召回率)的综合度量。判断一个对象是TP、FP和FN取决于对象之间重叠的阈值。这里我们使用交集并集(IoU),即真实情况和模型分割对象的边界框之间重叠的比例。AP使用不同的IoU阈值(从0.35-0.95)进行评估。结果数据将以IoU和AP的形式绘制。

    • 精度 = TP / (TP + FP) 回收率 = TP / (TP + FN)。
    • 缩写:FN,假阴性;TP,真阳性;FP,假阳性。

贡献

非常欢迎贡献。可以用tox运行测试,请确保在提交pull请求之前覆盖率至少保持不变。

许可

BSD-3许可下分发,"iterseg"是免费的开源软件。

问题

如果你遇到任何问题,请详细描述后提交问题

支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面