napari插件,用于迭代改进unet-watershed分割
项目描述
iterseg
napari插件,用于迭代改进基于深度学习的unet-watershed分割。
此napari插件是用Cookiecutter和@napari的cookiecutter-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)。
小部件出现在 napari 窗口的右侧后,输入您要给加载的数据起的名字(这将显示在窗口左侧的图层面板上)。选择您想加载的图层类型(图像、标签或形状:分割作为标签图层)。您可以使用“选择目录”(zarrs 被识别为文件文件夹)加载文件文件夹或 zarr 文件,或使用“选择文件”加载 tiff 文件。您可以告诉程序 3D 帧的尺度(格式为 (z, y, x))。
如果您使用的是单个图像文件(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)边距(块之间的重叠边界)。还有一个可选的复选框用于调试。如果选中此选项,将更容易识别错误,但在分割完成之前,您将无法与查看器交互。
分割图像可用于更快速地生成训练的地面真实值、评估分割质量或进行下游分析。
分割算法
亲和力 U-Net 水平集
亲和力 U-Net 水平集是一种基于特征的单例分割算法。训练好的 U-Net 预测边缘亲和力图(基本上是 x、y 和 z 轴上的边界),中心点图和指定哪些像素属于对象的掩码。特征图被馈送到修改后的水平集算法。使用对象中心点找到水平集的种子,使用亲和力图找到对象之间的边界。如果您使用 iterseg
训练网络,可以选择输出的网络文件进行分割。如果没有选择,我们将使用一个用于检测血小板训练好的网络。这可能适用于具有高各向异性的小对象。
DoG 凝胶分割
DoG 凝胶分割使用高斯差分(DoG)滤波器来查找具有凝胶形状的对象。DoG 滤波器用于查找对象种子、前景掩码,并将其馈送到水平集以标记对象。此算法不能进行训练,但可以使用配置文件进行配置。可以在本存储库的示例文件夹中看到示例配置文件。有关更多详细信息,请参阅 Segmentation_config.md 文件。
生成地面真实值
我们包括两个用于生成地面真实值的工具:“保存帧”和“从 ROI 生成地面真实值”。
保存帧
第一个工具是“保存帧”,可以在 plugins/iterseg/save_frames 找到。它允许您从一系列分割图像或时序数据中保存感兴趣的帧。
ROI的地面实况
“ROI的地面实况”工具可以在 plugins/iterseg/ground_truth_from_ROI 找到。该工具允许您将一小部分修正后的数据放入一个新帧中,这可以用于训练。新数据可以在新帧中进行平铺,以在训练数据集中过度表示数据。目前,必须通过添加形状层(使用橙色圆圈中的图标添加)然后添加矩形(蓝色圆圈)来选择ROI。
该矩形将用于选择xy平面的一个区域。这在下面的3D中可以看见。
目前,整个矩形上下方的整个z堆叠将被用于生成地面实况。我们旨在将来整合3D边界框。如果选择了多个ROI,将创建多个新的图像帧,每个帧只有一个ROI。当您从形状层生成地面实况时,您可以选择所需的形状层、图像层和标签层。此外,您可以选择要平铺ROI的次数以及留白的大小。平铺将从右上角开始,然后向下移动到下一行。您还可以选择保存名称和要保存数据的文件夹。
训练网络
iterseg
包含了一个用于训练 u-net 进行 u-net 相性水系的部件。训练部件可以在 plugins/iterseg/train_from_viewer 找到。在训练之前,您需要加载您想要训练的图像和地面实况。图像和地面实况应该是每个系列的三维帧,这些帧被堆叠成一层(我们建议从目录中的帧系列加载)。一旦加载,您可以选择一层作为地面实况和一层作为图像数据。您可以告诉程序输出帧的规模(格式为(z, y, x))。您可以选择要使用哪种中心预测(我们建议使用中心度),要使用哪种预测来使用掩码,以及您想要训练的相性范围(如果 n = 1,网络将仅在每个轴的对象之间预测直接边界,如果大于 1,网络仍将预测直接边界,但还将预测在 n 步之外的新对象的位置 - 可以用作辅助学习以增强训练)。相性范围是发展中的。如有任何问题,请提交问题。
对于 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"是免费的开源软件。
问题
如果你遇到任何问题,请详细描述后提交问题。
iterseg-0.3.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 02529b488c60d49e6e1e189a772fe9926d7981708a449f4335e1ea3707e8e96b |
|
MD5 | acf25c8a40e1bb91640e22fcd364bfd1 |
|
BLAKE2b-256 | df0d597f02c26839ee3623765f4322e6afab65d82456a2396b5bd96a4f3315a6 |
iterseg-0.3.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 160b4e85c2b45c12b39e47a85706b849d32efb45980d95f48cd679d428a368ba |
|
MD5 | 29d5ccb8f6a242d3093188af8d080dfc |
|
BLAKE2b-256 | 1dd2c1d78c8b625059ec99dd63a25bf53b03a472659925496a4d30d98f05f657 |