CNN依旧能战:nnU-Net团队新研究揭示医学图像分割的验证误区,设定先进的验证标准与基线模型

news2024/11/20 9:48:24

这篇论文研究了在3D医学图像分割领近年引入了许多新的架构和方法,但大多数方法并没有超过2018年的原始nnU-Net基准。作者指出,许多关于新方法的优越性的声称在进行严格验证后并不成立,这揭示了当前在方法验证上存在的不严谨性。

揭示验证短板:深入探讨了当前医学图像分割研究中存在的验证不足问题,特别是在新方法与旧基准的比较中缺乏严格的科学验证和不公平的比较基准。

系统性的基准测试:通过广泛的实验,作者系统地评估了现有的多种分割方法(包括基于CNN、基于Transformer和Mamba的方法),强调了合适的配置和现代硬件资源的重要性,以及在严格控制条件下的性能比较。

更新标准化基线:发布了一系列基于nnU-Net框架的更新标准化基线,这些基线适配了不同的硬件配置,以便更公平、更一致地评估不同方法的性能。

强调科学验证的重要性:论文提倡在未来的研究中应更加重视科学严谨的验证流程,以确保方法的改进是实质性的而非表象上的提升。

论文最终呼吁整个领域需要文化上的转变,即在评估新方法时应将验证的质量视为与网络架构的创新同等重要,以推动真正的科学进步。

验证短板

论文中对当前医学图像分割研究中存在的验证不足问题进行了详细的描述,特别指出了新方法与旧基准之间比较时常见的几个问题。这些问题包括:

  1. 基线设置不当:在比较新方法与现有方法时,经常使用设置不当或优化不足的基线。这种情况下,新方法可能看起来性能较好,但这种比较是在不公平的条件下进行的,因为基线方法没有得到同等水平的优化或配置。
  2. 数据集的使用不适当:论文指出,在很多研究中,所使用的数据集数量不足或不具代表性,这限制了方法性能的普适性和可信度。此外,有些研究可能过度依赖某些特定数据集的特征,而这些特征不一定能代表更广泛的应用场景。
  3. 计算资源的忽略:新方法往往在资源消耗更大的条件下运行,例如使用更高的VRAM或更长的训练时间,而这些条件并未在与旧基准的比较中透明化。这导致比较结果可能偏向于资源消耗更大的新方法,而非真实反映算法的效率和效果。
  4. 性能提升的误导性归因:有时候性能提升被错误地归因于新引入的架构或技术,而实际上这些提升可能来源于如额外的训练数据、预训练模型或更复杂的数据增强技术等其他因素。

论文呼吁采用更严格的验证标准和方法。所以提出需要系统地识别和避免这些验证误区,提供了一系列的建议和措施,如确保进行公平的基线比较、使用足够多和具有挑战性的数据集、以及透明化计算资源的使用。通过这种方式,研究社区能更准确地评估新方法的真实效能和实用价值,推动医学图像分割领域的科学进展。

系统性的基准测试

论文中详细讨论了各种3D医学图像分割方法的性能,主要通过Dice Similarity Coefficient (DSC)分数来量化各方法的准确性。

以下是一些关键的性能提升数据及其与以前研究的比较:

  1. nnU-Net 及其变体的性能:- 原始 nnU-Net 在不同数据集上的DSC分数:BTCV (83.08%), ACDC (91.54%), LiTS (80.09%), BraTS (91.24%), KiTS (86.04%), AMOS (88.64%).- nnU-Net ResEnc M/L/XL 在不同数据集上的DSC分数逐步提升,如在KiTS数据集上,nnU-Net ResEnc XL 达到了 88.67% 的 DSC 分数。
  2. MedNeXt 的表现:- MedNeXt L k3 在不同数据集上的最高DSC分数:BTCV (84.70%), ACDC (92.65%), LiTS (82.14%), BraTS (91.35%), KiTS (88.25%), AMOS (89.62%).- 这表明 MedNeXt 在大多数数据集上的性能优于原始 nnU-Net 和其他变体。
  3. Transformer 和 Mamba 基方法的比较:- Transformer方法如SwinUNETR和nnFormer在多个数据集上的表现通常低于CNN基方法,如SwinUNETR在ACDC数据集上的DSC为91.29%,而nnU-Net为91.54%。
  4. 效率和VRAM使用:- 不同模型的VRAM使用和训练时间也被报告,如nnU-Net ResEnc XL使用36.60GB VRAM且训练时间达66小时,显示出在处理大型数据集时,模型缩放和硬件资源的充分利用对性能有显著影响。

这些性能数据的提出是基于与以前方法的直接比较。比如,通过将nnU-Net的各种配置与新的Transformer和Mamba方法进行比较,显示了尽管后者在理论上可能具有优势,但在实际医学图像分割任务中,经典的CNN方法(特别是经过精心配置和适配现代硬件的方法)仍然显示出更高的效率和准确率。此外,通过更新和标准化的基线测试,本文能够提供一种更为严谨和可比较的方法性能评估,这对于未来的研究方向具有指导意义。

新标准化基线模型

论文中提到的nnU-Net及其不同变体(如ResEnc M/L/XL)是基于U-Net架构的优化版本,具体设计考虑了不同的硬件能力和数据集特性。这些变体在nnU-Net的框架内进行了特定的调整以适应更广泛的应用场景。

  1. nnU-Net (原始):- 架构:基于经典的U-Net架构,使用标准的卷积层、池化层和上采样层。- 自适应配置:nnU-Net的一个重要特点是其自动化的配置过程,能够根据具体的数据集自动调整网络的参数和训练策略。
  2. nnU-Net ResEnc M/L/XL:- M(Medium):设计用于中等规模的VRAM和处理能力。- L(Large):针对较大的VRAM和更高的计算需求进行优化。- XL(Extra Large):为最大的VRAM和计算能力配置,适合处理非常大的数据集和复杂的模型训练任务。- 架构:这些变体在原始nnU-Net的基础上引入了残差连接(Residual connections)。残差连接帮助改善了网络在深层中的信息流,有助于解决梯度消失的问题,特别是在更深的网络结构中。- 尺寸变体:- 自适应批次和补丁尺寸:不同的变体通过调整批次大小和补丁尺寸来适应不同的VRAM预算。
  3. 训练参数和优化:- 学习率:学习率的配置也是自动化的,根据网络的训练反馈进行调整。- 数据增强:nnU-Net使用广泛的数据增强技术来提高模型的泛化能力,包括旋转、缩放、弹性形变等。

这些基线的设计显示了nnU-Net在自动化、标准化和适应不同硬件能力方面的优势,使其在多个数据集上都能达到或超越其他先进方法的性能。此外,论文还提供了关于这些基线的实施细节和训练策略,这有助于研究社区更容易地复现和利用这些模型进行进一步的研究和应用。

这个论文最有意思的地方就是这部分没有说明白,没有详细说明nnU-Net ResEnc M/L/XL各变体的具体参数细节,把结果引向了Github,具体的参数配置需要我们自己看源代码。

所以在最后我们来介绍如何使用nnUNet

nnUNet代码示例

上面论文也说到了,nnUNetv2包含了标准化的基线模型,也就是说我们可以运行命令行的方式以进行训练、评估和推理,所以我们首先安装

 pip install nnunetv2

作为一个集成框架,我们需要使用nnUNet的自定义推理管道,我们呢再安装官方的包

 git clone https://github.com/MIC-DKFZ/nnUNet.git
 cd nnUNet
 pip install -e .

然后就可以配置数据集了,这里需要三个变量

  • nnUNet_raw:放置数据的地方。它应该是遵循nnUNet数据集命名约定的数据。我们将在下一节中对此进行更详细的解释。
  • nnUNet_preprocessed:这是一个将保存预处理数据的文件夹。运行预处理命令(我们将在下面介绍)时,nnUNet将使用这个文件夹来保存预处理的数据。
  • nnUNet_results:这是nnUNet将保存训练工件的文件夹,包括模型权重、配置JSON文件和调试输出。

可以通过多种方式设置这些环境变量。但是最简单的选择是在要运行nnUNet命令的终端中直接设置它们。例如,对于Linux机器上的环境变量nnUNet_raw,你可以这样做:

 export nnUNet_raw="/path/to/your/deephub_nnUNet_raw" # Linux
 set nnUNet_raw=C:\path\to\your\deephub_nnUNet_raw # Windows

因为是标准化的处理,所以框架要求数据集具有非常特定的格式,如果你在使用Medical Segmentation Decathlon (MSD) 的数据,那么可以直接运行 nnUNetv2_convert_MSD_dataset 来进行转换

 #显示帮助信息
 nnUNetv2_convert_MSD_dataset -h

如果正在使用MSD以外的任何数据集,则需要以nnUNet格式组织和命名数据集。

nnUNet格式要求如下

 Dataset[IDENTIFIER]_[Name]
IDENTIFIER

是一个数字标识,并且应该有3位数字,这个数字代表着我们数据集的ID,也就是说一个数据集一个ID

Name

是数据集的名称。例如用于分割主动脉的数据集,我的文件夹名称可以是

Dataset300_Aorta

在这个主文件夹中,需要创建一个名为imagesTr的训练图像文件夹和一个名为labelsTr的包含训练标签(分割)的文件夹。另外还可以添加一个包含测试图像的测试文件夹,它应该被称为imagesTs。不需要为测试映像添加标签。

图片的命名格式如下:

 {CASE_IDENTIFIER}_{XXXX}.{FILE_ENDING}

CASE_IDENTIFIER数据集的唯一名称,它应该是唯一标识符号。例如训练图像(CT扫描)被命名为aorta_000_000 .nrrd。

对于分割结果也就是labelsTr的文件格式如下:

 {CASE_IDENTIFER}.{FILE_ENDING}

主动脉数据集中的一个例子是AORTA_000.nrrd。

最后就是dataset.json的json文件。这个文件包含关于数据集的元信息。

 {   
     "channel_names": {
         "0": "CT"
     }, 
     "labels": {
         "background": 0,
         "AORTA": 1
     }, 
     "numTraining": 51, 
     "file_ending": ".nrrd",
     "overwrite_image_reader_writer": "SimpleITKIO"
  }

在这个文件中,指定了channel_names,这个例子中就是CT。还指定了标签,还有numTraining,这是训练图像(扫描)的数量,还有file_ending是扩展名。

最后一个overwrite_image_reader_writer是可选的。因为要读取nrrd文件,所以我将其设置为SimpleITKIO。也可以不设置,那么nnUNet将根据文件扩展名匹配加载工具。

最后完成的数据集文件夹如下:

开始训练

训练nnUNet模型是一个多步骤的过程,从预处理数据集开始,这一步是通过nnUNetv2_plan_and_preprocess命令完成的。该命令将预处理放在nnUNet_raw文件夹路径中的数据,并将预处理后的数据保存到nnUNet_preprocessed文件夹路径中。

 nnUNetv2_plan_and_preprocess -d DATASET_ID --verify_dataset_integrity -np 1

这里的DATASET_ID将是数据集标识符,也就是300。

-np是运行预处理的进程或工作进程的数量。这个CPU的核数相关,但是太大可能会占用很多内存,这也是需要考虑的问题

然后就是训练了

 nnUNetv2_train 300 3d_fullres all -tr nnUNetTrainer_250epochs

300为数据集ID。

3d_fullres是我们选择的nnUNet配置。还有其他3个:2d, 3d_lowres, 3d_cascade_fullres。因为是3D图像所以我们选这个。

All指的是我们想要使用整个训练文件夹来进行训练,而不是进行交叉验证。

-tr nnUNetTrainer_250epochs 是一个特定的训练器配置,我们运行250个epoch的训练。这个配置是写死再python代码中的

 #nnunetv2/training/nnUNetTrainer/variants/training_length/nnUNetTrainer_Xepochs.py
 classnnUNetTrainer_250epochs(nnUNetTrainer):
     def__init__(self, plans: dict, configuration: str, fold: int, dataset_json: dict, unpack_dataset: bool=True,
                  device: torch.device=torch.device('cuda')):
         super().__init__(plans, configuration, fold, dataset_json, unpack_dataset, device)
         self.num_epochs=250

推理和评估

nnUNetv2_train训练完成后就可以进行推理了。使用nnUNetv2_predict命令,可以轻松地将训练好的模型应用到新的数据集并生成预测。

 nnUNetv2_predict -i nnUNet_dirs/nnUNet_raw/Dataset300_Aorta/imagesTs -o nnUNet_dirs/nnUNet_raw/nnUNet_tests/ -d 300 -c 3d_fullres -tr nnUNetTrainer_250epochs -f all

如果需要评估,则使用nnUNetv2_evaluate_folder

 nnUNetv2_evaluate_folder /nnUNet_tests/gt/ /nnUNet_tests/predictions/ -djfile Dataset300_Aorta/nnUNetTrainer_250epochs__nnUNetPlans__3d_fullres/dataset.json -pfile Dataset300_Aorta/nnUNetTrainer_250epochs__nnUNetPlans__3d_fullres/plans.json

这个命令的第一个参数是ground truth文件夹。

第二个参数是预测文件夹。

-djfile是数据集的dataset.json文件。

-pfile是计划的plans.json文件,该文件在预处理步骤中创建。

当你运行评估命令时,会得到这样的结果:

下面是在主动脉数据集上训练nnUNet的输出样本:

总结

最后不要忘了我们介绍的这篇论文:《nnU-Net Revisited: A Call for Rigorous Validation in 3D Medical Image Segmentation》重新审视了3D医学图像分割领域,特别是关注在新方法与旧基准的比较中存在的验证不足问题。作者通过批判性地评估现有研究中的常见短板,揭示了许多新颖方法性能超越传统方法的声称在严格验证后难以站得住脚。论文不仅挑战了当前研究的一些普遍实践,也为未来的研究方向提供了明确的指导,旨在推动3D医学图像分割领域向更加严谨和有效的方向发展。

论文地址:

https://avoid.overfit.cn/post/fc43928c41574818a0d61958f572e9cb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1798801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL将错乱的水果信息,截取展示为 品名 英文名 价格 三列展示

将错乱的水果信息,截取展示为 品名 英文名 价格 三列展示 idname1苹果Apple72Plum6李子3Pineapple8菠萝4Mango5芒果5龙吐珠5Buddha’sHand6Olive9橄榄7Raspberry4树莓8Apricot5杏子9Grapefruit9柚子10火龙果Dragonfruit911倒挂金钟Hanging6LobsterClaw12巨峰葡萄Co…

论道数字化:2024年企业增长密码在哪里?

企业微信正在成为一个中国TO B数字化工具中的特殊个体。 它既具备TO B服务的能力,能帮助企业构建从办公到内部协同管理,帮助企业修炼内功;同时它更是企业面向C端的连接器,基于自身足够显著的C端标签,其几乎可以算是国…

企业必备技能导航栏的写法

创建一个导航栏是网页设计中的一个重要环节,它不仅有助于用户快速找到他们需要的信息,还能提升整个网站的用户体验。以下是一些基本步骤和技巧,可以帮助你快速制作一个高效且美观的导航栏: 确定导航栏位置:导航栏通常位…

Stable Diffusion WebUI 各操作系统安装教程

最近几天在 2 台 Mac、2 台 PC、一台云无 GPU 的 Linux 安装了 Stable Diffusion WebUI,这里记录下如何安装,以及一些注意点和坑。 以下内容针对 Windows(N 卡)、MacOS(m 系列芯片)、Linux(Ubu…

打造精美电子画册,提升企业形象的方法

在当今数字化时代,企业形象的表达方式正在发生深刻变革。精美电子画册作为一种新兴的传播媒介,不仅能够展现企业风采、提升品牌价值,还能够吸引潜在客户、增强市场竞争力。 接下来告诉大家一些简单的制作方法,可以收藏起来哦 1.首…

vue3+vite插件开发

插件开发目的:由于我司使用的前端技术栈为vue3tsvite2.Xaxios,在前端代码框架设计初期,做了把axios挂载到proxy对象上的操作,具体可见我的另一篇文章vue3TS自动化封装全局api_ts 封装腾讯位置api-CSDN博客 现在可以实现vue2的类似this.$api.xxx去调用接口,但是vue2源码使用的是…

Visual C++ Redistributable下载

安装程序的时候提示丢失mfc140u.dll 如下图,查了资料说可以下载Visual C Redistributable来进行处理 下载Visual C Redistributable 1.打开网站 https://www.microsoft.com/zh-cn/download/details.aspx?id48145&751be11f-ede8-5a0c-058c-2ee190a24fa6True) 2.点击下载 …

Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明

Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明 目录 Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明 一、简单介绍 二、处理文本数据 三、用…

linux 服务器上离线安装 node nvm

因为是离线环境 如果你是可以访问外网的 下面内容仅供参考 也可以继续按步骤来 node 安装路径 Node.js — Download Node.js nvm 安装路径 Tags nvm-sh/nvm GitHub 后来发现 nvm安装后 nvm use 版本号 报错 让我去nvm install 版本 我是内网环境 install不了 下面 你要 把安…

K210视觉识别模块学习笔记4: (MaixHub)训练与使用自己的模型_识别字母

今日开始学习K210视觉识别模块: 模型训练与使用_识别字母 亚博智能的K210视觉识别模块...... 固件库: maixpy_v0.6.2_52_gb1a1c5c5d_minimum_with_ide_support.bin 文章提供测试代码讲解、完整代码贴出、测试效果图、测试工程下载 这里也算是正式开始进入到视觉识别的领域了…

问题:1、彩色餐巾可以渲染就餐气氛,下列说法错误的是 #知识分享#其他

问题:1、彩色餐巾可以渲染就餐气氛,下列说法错误的是 A.如艳红、大红餐巾给人以庄重热烈的感觉; B.橘黄、鹅黄色餐巾给人以高贵典雅的感觉; C.湖蓝色在夏天能给人以凉爽、舒适之感&#xff1…

python脚本打包为exe并在服务器上设置定时执行

python脚本打包为exe并在服务器上设置定时执行 1. Python脚本打包2. 将打包好的Python脚本放入服务器3. 在服务器上设置其定时执行 1. Python脚本打包 首先,下载pyinstaller 键盘winR打开终端,输入命令:pip install pyinstaller,…

AI大模型,普通人如何抓到红利?AI+产品经理还有哪些机会

前言 随着人工智能技术的飞速发展,AI大模型正逐渐渗透到我们的工作和生活中,为普通人带来了前所未有的便利和机遇。然而,如何有效地抓住这些红利,让AI大模型为我们所用,成为了许多人关注的焦点。 对于普通人而言&…

GIGE 协议摘录 —— 引导寄存器(四)

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 —— 设备发现(一) GIGE 协议摘录 —— GVCP 协议(二) GIGE 协议摘录 —— GVSP 协议(三) GIGE 协议摘录 —— 引导寄存器(四) GIGE 协议…

计算机视觉与模式识别实验2-2 SIFT特征提取与匹配

文章目录 🧡🧡实验流程🧡🧡SIFT算法原理总结:实现SIFT特征检测和匹配通过RANSAC 实现图片拼接更换其他图片再次测试效果(依次进行SIFT特征提取、RANSAC 拼接) 🧡🧡全部代…

基于Texture2D 实现Unity 截屏功能

实现 截屏 Texture2D texture new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false); texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0); texture.Apply(); 存储 byte[] array ImageConversion.EncodeToPNG(texture); if (!…

MATLAB format

在MATLAB中,format 是一个函数,用于控制命令窗口中数值的显示格式。这个函数可以设置数值的精度、显示的位数等。以下是一些常用的 format 命令: format long:以默认的长格式显示数值,通常显示15位有效数字。format s…

揭秘!如何从精益生产转向智能制造

企业在“工业4.0、智能制造、互联网”等概念满天飞的环境下迷失了方向,不知该如何下手,盲目跟风。 君不见,很多企业在“工业4.0、智能制造、互联网”等概念满天飞的环境下迷失了方向,不知该如何下手,盲目跟风&#xf…

完美落地的自动化测试框架(pytest):智能生成?业务依赖?动态替换?报告构建?你来,这儿有!

前言 随着软件测试行业的快速发展,去测试化、全员测开化的趋势,技术测试已成为确保软件质量不可或缺的一环。 但对于许多没有代码基础或缺乏系统性自动化知识的测试人员来说,如何入手并实现高质量的自动化测试成为了一个挑战。 为此&#xff…

怎么将3d的模型同比例缩放?---模大狮模型网

在展览3d模型设计过程中,经常需要对3d模型进行缩放以满足不同的需求。然而,有时候缩放操作可能会导致模型失去比例,造成不必要的麻烦。模大狮将介绍如何将展览3D模型按比例缩放,帮助展览设计师们更好地掌握这一关键的模型设计技巧…