Boundary-loss数据加载器实现揭秘:距离图预处理流程与关键代码解析
Boundary-loss数据加载器实现揭秘距离图预处理流程与关键代码解析【免费下载链接】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-lossBoundary-loss项目是MIDL 2019最佳论文 runner-up专注于解决高度不平衡分割问题。其核心创新点在于通过边界损失函数提升医学影像分割精度而数据加载器与距离图预处理是实现这一目标的关键技术环节。本文将深入剖析数据加载器的实现细节揭示距离图预处理的核心流程与代码逻辑。数据加载器架构概览Boundary-loss的数据加载系统主要通过dataloader.py实现采用PyTorch的Dataset和DataLoader架构支持多模态数据输入、在线数据增强和距离图动态生成。核心类SliceDataset负责数据读取与预处理配合自定义的PatientSampler实现患者级别的数据分组避免训练过程中的数据泄露。# 核心数据加载类定义 class SliceDataset(Dataset): def __init__(self, filenames: list[str], folders: list[Path], are_hots: list[bool], transforms: list[Callable], debugFalse, quietFalse, K4, in_memory: bool False, spacing_dict: dict[str, Tuple[float, ...]] None, augment: Optional[Callable] None, ignore_norm: bool False, dimensions: int 2, debug_size: int 10, no_assert: bool False) - None: # 初始化参数与数据检查 self.folders: list[Path] folders self.transforms: list[Callable[[Tuple, int], Callable[[D], Tensor]]] transforms self.are_hots: list[bool] are_hots self.filenames: list[str] filenames # ... 其他初始化逻辑数据加载流程主要包含三个阶段文件验证与加载、多模态数据转换和距离图生成。系统支持.png和.npy两种格式的文件输入并通过transforms参数灵活配置不同数据类型的预处理流程。距离图预处理核心流程距离图Distance Map是Boundary-loss实现边界感知的基础通过计算像素到目标边界的欧氏距离为损失函数提供边界位置信息。预处理流程主要通过utils.py中的one_hot2dist函数实现将One-Hot编码的分割标签转换为距离图。距离图生成算法距离图生成采用欧氏距离变换Euclidean Distance Transform具体实现如下def one_hot2dist(seg: np.ndarray, resolution: Tuple[float, float, float] None, dtypeNone) - np.ndarray: assert one_hot(torch.tensor(seg), axis0) K: int len(seg) res np.zeros_like(seg, dtypedtype) for k in range(K): posmask seg[k].astype(np.bool) if posmask.any(): negmask ~posmask res[k] eucl_distance(negmask, samplingresolution) * negmask \ - (eucl_distance(posmask, samplingresolution) - 1) * posmask return res算法核心步骤对每个类别K创建二值掩码posmask计算背景区域negmask到最近前景像素的距离计算前景区域到最近背景像素的距离组合距离值生成带符号的距离图背景为正前景为负数据转换管道在dataloader.py中距离图生成被集成到数据转换管道通过dist_map_transform函数实现def dist_map_transform(resolution: Tuple[float, ...], K: int) - Callable[[D], Tensor]: return transforms.Compose([ gt_transform(resolution, K), lambda t: t.cpu().numpy(), partial(one_hot2dist, resolutionresolution), lambda nd: torch.tensor(nd, dtypetorch.float32) ])该转换链将原始标签经过以下处理gt_transform将标签转换为One-Hot编码转换为NumPy数组进行距离计算one_hot2dist生成距离图转换回PyTorch张量供模型使用关键代码解析与优化技巧高效数据加载策略SliceDataset采用内存映射Memory Mapping技术通过load_images静态方法实现数据的按需加载或全内存加载staticmethod def load_images(folders: list[Path], filenames: list[str], in_memory: bool, quietFalse) - list[list[F]]: def load(folder: Path, filename: str) - F: p: Path Path(folder, filename) if in_memory: with open(p, rb) as data: res io.BytesIO(data.read()) return res return p # ... 加载逻辑通过in_memory参数控制加载模式全内存模式适合小数据集加载速度快按需加载适合大数据集节省内存空间患者级数据采样PatientSampler确保同一患者的所有切片不会同时出现在训练集和验证集中避免数据泄露class PatientSampler(Sampler): def __init__(self, dataset: SliceDataset, grp_regex, shuffleFalse, quietFalse) - None: filenames: list[str] dataset.filenames grouping_regex: Pattern re.compile(self.grp_regex) stems: list[str] [Path(filename).stem for filename in filenames] matches: list[Match] map_(grouping_regex.match, stems) patients: list[str] [match.group(1) for match in matches] # ... 患者分组逻辑通过正则表达式提取患者ID将同一患者的切片分组确保训练和验证的患者集合完全分离。预处理效果可视化距离图预处理显著提升了边界分割精度特别是在小目标和复杂边界区域。以下是ACDC数据集上的分割结果对比图ACDC四类别数据集上不同损失函数的分割结果对比。与CE损失和DSC损失相比边界损失能够更准确地分割目标边界。从左到右分别为Ground Truth金标准、CE损失结果、DSC损失结果和Boundary损失结果。可以清晰看到Boundary损失在心肌内膜和外膜边界的分割精度明显优于传统损失函数。另一组WMH脑白质高信号数据集的对比更直观展示了边界损失的优势图WMH数据集分割结果对比。(a)金标准 (b)GDL损失结果 (c)GDL边界损失结果。边界损失有效减少了假阳性和假阴性区域。实际应用与扩展多模态数据支持系统通过transforms参数支持多种数据类型例如png_transform处理PNG格式的医学影像npy_transform处理NumPy数组格式的 volumetric数据equalized_png带直方图均衡化的PNG预处理自定义损失权重生成unet_loss_weights_transform函数生成基于距离图的动态损失权重进一步提升边界区域的分割精度def unet_loss_weights_transform(resolution: Tuple[float, ...], K: int) - Callable[[D], Tensor]: w_0: float 10 sigma: float 5 def closure(in_: D) - Tensor: gt: Tensor gt_transform(resolution, K)(in_) signed_dist_map: Tensor dist_map_transform(resolution, K)(in_) dist_map: Tensor torch.abs(signed_dist_map).type(torch.float32) # ... 权重计算逻辑 return final return closure通过指数函数将距离值转换为损失权重使边界区域获得更高的训练关注度。快速上手指南要使用Boundary-loss的数据加载系统只需三步克隆仓库git clone https://gitcode.com/gh_mirrors/bo/boundary-loss配置数据集路径修改main.py或相应的.make文件如acdc.make、wmh.make设置数据路径运行训练make -f acdc.make系统会自动处理数据加载、距离图生成和模型训练的全过程。总结与展望Boundary-loss的数据加载器通过高效的距离图预处理流程为边界感知分割提供了强大支持。核心创新点包括动态距离图生成算法精确捕捉边界位置信息灵活的数据转换管道支持多模态医学影像患者级数据采样确保训练有效性基于距离的动态损失权重提升边界分割精度未来可以进一步优化的方向3D距离图的高效计算多尺度边界特征融合自适应分辨率调整通过深入理解这些实现细节开发者可以更好地将边界损失技术应用到自己的医学影像分割项目中解决高度不平衡数据的分割挑战。【免费下载链接】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),仅供参考

相关新闻

计算机毕业设计之基于SpringBoot的会议系统的设计与实现

计算机毕业设计之基于SpringBoot的会议系统的设计与实现

本论文借助 Java 编程语言,运用VUE 前端架构及SpringBoot 后端架构,以 MySQL 数据库为依托,对一套会议系统进行了分析和设计。此系统包括会议信息、会议报名等功能,并划分为参会者、主持人和管理员三个角色,各角色具备…

2026/7/27 16:14:34 阅读更多 →
VueLearnNotes揭秘:初学者必知的ES6箭头函数与this绑定技巧

VueLearnNotes揭秘:初学者必知的ES6箭头函数与this绑定技巧

VueLearnNotes揭秘:初学者必知的ES6箭头函数与this绑定技巧 【免费下载链接】VueLearnNotes Vue学习笔记 项目地址: https://gitcode.com/gh_mirrors/vu/VueLearnNotes VueLearnNotes是一个专注于Vue学习的开源项目,其中ES6箭头函数与this绑定是V…

2026/7/27 16:14:34 阅读更多 →
WannaCry蠕虫传播机制深度剖析:从永恒之蓝漏洞到自动化横向移动

WannaCry蠕虫传播机制深度剖析:从永恒之蓝漏洞到自动化横向移动

1. 项目概述:一次对“数字瘟疫”的逆向工程几年前,一场名为WannaCry的“数字瘟疫”席卷全球,其传播速度之快、影响范围之广,至今仍让安全从业者心有余悸。它不仅仅是一个勒索病毒,更是一个教科书级别的、结合了高级漏洞…

2026/7/27 16:14:34 阅读更多 →

最新新闻

基于经验模态分解 时序分析 核主成分分析 长短期记忆网络 多维时间序列预测 LSTM多维时间序列预测模型 LSTM和 MD-LSTM进行对比

基于经验模态分解 时序分析 核主成分分析 长短期记忆网络 多维时间序列预测 LSTM多维时间序列预测模型 LSTM和 MD-LSTM进行对比

EMD-KPCA-LSTM 基于经验模态分解和核主成分分析的长短期记忆网络多维时间序列预测MATLAB代码(含LSTM、EMD-LSTM、EMD-KPCA-LSTM三个模型的对比) matlab 参考文档:基于EMD-PCA-LSTM的光伏功率预测模型 研究内容:本案例使用数据集是…

2026/7/28 17:59:04 阅读更多 →
[Linux 驱动] -- platform_device 与 paltform_driver 的匹配(i2c_client 与 i2c_driver)

[Linux 驱动] -- platform_device 与 paltform_driver 的匹配(i2c_client 与 i2c_driver)

自己总结platform_device与platform_driver的匹配分为如下三种情况:基于设备树风格的匹配:platform_driver.device_driver.of_device_id->compatible 和 设备树中的compatible属性进行比较;匹配 id 表(id_table),即…

2026/7/28 17:59:04 阅读更多 →
nmap的使用

nmap的使用

Nmap(全称Network Mapper)是一款功能强大、界面简洁清晰的连接端口扫描软件。能够轻松扫描确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统,从而帮助用户管理网络以及评估网络系统安全!Nmap运行需要用到一个驱动程序WinPcap&am…

2026/7/28 17:59:04 阅读更多 →
经典CNN和GAN论文代码总结(未完待续... ...)

经典CNN和GAN论文代码总结(未完待续... ...)

经典CNN 经典GAN GAN Paper: https://arxiv.org/abs/1906.01529Code: https://github.com/sheqi/GAN_Review CGAN Paper: https://arxiv.org/abs/1411.1784Code: <> CycleGAN Paper: https://arxiv.org/abs/1703.10593v6Code: <> CoGAN Paper: https://arxiv.org…

2026/7/28 17:59:03 阅读更多 →
【自然语言处理】

【自然语言处理】

python做自然语言处理&#xff0c;持续更新。 import jieba # 分词库 seg_list jieba.cut("北京野生动物园轿车遭黑熊围堵") print ("Default Mode:", .join(seg_list))Default Mode: 北京 野生 动物园 轿车 遭 黑熊 围堵附作者相关研究&#xff1a; ***…

2026/7/28 17:59:03 阅读更多 →
LeetCode-Python-273. 整数转换英文表示

LeetCode-Python-273. 整数转换英文表示

将非负整数转换为其对应的英文表示。可以保证给定输入小于 231 - 1 。示例 1:输入: 123 输出: "One Hundred Twenty Three" 示例 2:输入: 12345 输出: "Twelve Thousand Three Hundred Forty Five" 示例 3:输入: 1234567 输出: "One Million Two Hund…

2026/7/28 17:58:03 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿&#xff01;3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑&#xff1a;把几百页的财报、法规、技术手册扔给向量库&#xff0c;问一个具体问题&#xff0c;搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了&#xff0c;要么藏在几十条结果的最下面。语义相似≠真正相关&#xff0c;这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营&#xff0c;从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候&#xff0c;每天刷半小时抖音&#xff0c;手动把爆款视频的口播敲进备忘录&#xff0c;一条2分钟的视频得花十来分钟&#xff0c;碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档&#xff0c;可以直接使用&#xff01;系统支持图片、视频、摄像头等多种方式检测裂缝&#xff0c;功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像&#xff01; pubg绝地求生目标检测数据集 1分类&#xff1a;e_body&#xff0c;14905个标签&#xff0c;txt格式 共计14244张图&#xff0c;99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别&#xff1a; allies enemy tag图片总量&#xff1a;7247张训练集&#xff1a;5139张验证集&#xff1a;1425张测试集&#xff1a;683张标注状态&#xff1a;全部已标注&#xff0c;即拿即用数据格式&#xff1a;支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻