Boundary-loss 3D距离图计算:WMH数据集预处理与3D-CNN扩展技巧

Boundary-loss 3D距离图计算:WMH数据集预处理与3D-CNN扩展技巧

【免费下载链接】boundary-lossOfficial code for "Boundary loss for highly unbalanced segmentation", runner-up for best paper award at MIDL 2019. Extended version in MedIA, volume 67, January 2021.项目地址: https://gitcode.com/gh_mirrors/bo/boundary-loss

Boundary-loss是GitHub加速计划中一个专注于医学图像分割的开源项目,其核心功能是通过边界损失函数解决高度不平衡分割问题,尤其在3D距离图计算和WMH数据集预处理方面表现出色。本文将详细介绍如何利用Boundary-loss进行3D距离图计算、WMH数据集预处理以及3D-CNN扩展的实用技巧。

一、3D距离图计算核心原理

Boundary-loss的边界损失函数本质上是网络预测(softmax输出)与预计算距离图之间的逐像素乘法,因此距离图的计算是实现边界损失的关键环节。项目中距离图的计算主要通过one_hot2dist函数实现,该函数定义在utils.py中。

距离图的计算需要考虑图像的分辨率信息,在preprocess/slice_wmh.py中可以看到相关代码实现:

distmap: np.ndarray = one_hot2dist(one_hot_gt.numpy(), resolution=(rx, ry, rz), dtype=np.float32)

其中rxryrz分别表示三个维度的分辨率,通过原始图像的物理尺寸计算得到。这种基于分辨率的距离图计算方法能够确保距离值的物理意义准确性,为后续的边界损失计算提供可靠基础。

二、WMH数据集预处理完整流程

WMH(脑白质高信号)数据集的预处理是Boundary-loss项目中的重要环节,主要通过preprocess/slice_wmh.py实现。预处理流程包括以下关键步骤:

2.1 数据加载与分辨率调整

首先加载原始WMH数据,包括FLAIR序列、T1序列和对应的 ground truth 标签。然后根据目标尺寸(通常为256x256)对图像进行重采样,同时计算各维度的分辨率参数。

2.2 3D距离图预计算

在WMH数据集预处理中,3D距离图的计算是核心步骤之一。代码中明确标注了这一过程:

# Pre-compute the 3d distance map rx = dx * w / 256 ry = dy * h / 256 rz = dz one_hot_gt: Tensor = class2one_hot(torch.tensor(resized_gt[None, ...], dtype=torch.int64), K=2)[0] distmap: np.ndarray = one_hot2dist(one_hot_gt.numpy(), resolution=(rx, ry, rz), dtype=np.float32)

这段代码首先将标签转换为one-hot编码格式,然后调用one_hot2dist函数计算3D距离图,并将结果保存到指定目录。

2.3 数据保存与组织

预处理后的数据会被保存到不同的目录中,便于后续模型训练使用:

save_dir_flair: Path = Path(dest_dir, flair_dir) save_dir_t1: Path = Path(dest_dir, t1_dir) save_dir_gt: Path = Path(dest_dir, gt_dir) save_dir_distmap_npy: Path = Path(dest_dir, "3d_distmap")

这种结构化的数据组织方式有助于提高训练过程中的数据读取效率。

三、3D-CNN扩展实用技巧

虽然Boundary-loss项目中主要使用2D网络进行图像分割,但扩展到3D-CNN并不复杂。根据项目文档,扩展到3D-CNN的关键在于以下几点:

3.1 3D距离图计算

扩展到3D-CNN的首要任务是预计算3D距离图。在处理3D体积数据时,最简单的方法是在将3D体积切片为2D图像时计算距离图,如preprocess/slice_wmh.py中所示。对于纯3D处理,可以直接对整个3D体积计算距离图。

3.2 网络结构调整

项目提供了多种网络模型,包括UNet、ResidualUNet等,定义在models/目录下。其中models/unet_3d.py是专门为3D图像分割设计的网络结构,可以直接用于3D-CNN扩展。

3.3 数据预处理适配

3D-CNN需要处理3D体积数据,因此在数据预处理阶段需要调整数据的维度和组织方式。可以参考WMH数据集的预处理流程,将2D处理扩展到3D,确保距离图与输入图像的维度匹配。

四、Boundary-loss分割效果对比

Boundary-loss在医学图像分割中表现出优异的性能,特别是在边界区域的分割准确性上。以下是使用不同损失函数在ACDC数据集上的分割结果对比:

图:ACDC数据集上不同损失函数的分割结果对比。从左到右分别为Ground truth、交叉熵损失(ℒ_CE)、Dice损失(ℒ_DSC)和边界损失(ℒ_B)。边界损失能够更准确地分割对象边界。

另一个对比展示了在脑部图像分割中使用边界损失的效果提升:

图:脑部图像分割结果对比。(a)为Ground truth,(b)为使用GDL损失的分割结果,(c)为使用GDL+边界损失的分割结果。加入边界损失后,小病灶区域的分割准确性明显提高。

五、常见问题与解决方案

5.1 距离图是否需要归一化?

根据项目文档,距离图不需要归一化。距离图是有符号的,对象内部的距离为负值,完美的预测只会累加负距离,这在最小化损失的设置中不是问题。

5.2 如何处理3D数据中的内存问题?

处理3D数据时,内存消耗会显著增加。可以采用分块处理的方法,将3D体积分成多个子块进行处理,如preprocess/slice_wmh.py中所示的切片处理方式。

5.3 距离图计算的效率优化

距离图的计算是预处理阶段的耗时操作。项目中通过在预处理时预先计算距离图并保存为npy文件,避免了在训练过程中重复计算,有效提高了训练效率。

通过本文介绍的3D距离图计算方法、WMH数据集预处理流程和3D-CNN扩展技巧,您可以充分利用Boundary-loss项目进行医学图像分割任务。无论是2D还是3D分割,Boundary-loss的边界损失函数都能帮助您获得更准确的分割结果,特别是在处理高度不平衡的医学图像数据时。

要开始使用Boundary-loss项目,请克隆仓库:git clone https://gitcode.com/gh_mirrors/bo/boundary-loss,然后参考项目中的readme.md获取详细的安装和使用指南。

【免费下载链接】boundary-lossOfficial code for "Boundary loss for highly unbalanced segmentation", runner-up for best paper award at MIDL 2019. Extended version in MedIA, volume 67, January 2021.项目地址: https://gitcode.com/gh_mirrors/bo/boundary-loss

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考