本篇主要解读论文 "nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation" == nnU-Net:基于U-Net的自适应医学图像分割框架。
实现见本专栏下其他博文。直达链接
nnU-Net 如何安装--傻瓜式安装教程
nnU-Net实战一使用预训练nnU-Net模型进行推理
教你用4行命令轻松使用nnUNet训练自己的医学图像分割模型
点击下载论文
点击进入github code地址
nnU-Net 是什么,有多厉害
nnU-Net是由德国癌症研究中心、海德堡大学以及海德堡大学医院研究人员(Fabian Isensee
, Jens Petersen, Andre Klein)提出来的一个自适应任何新数据集的医学影像分割框架,该框架能根据给定数据集的属性自动调整所有超参数,整个过程无需人工干预。仅仅依赖于朴素的U-Net结构(就是原始U-Net)和鲁棒的训练方案,nnU-Net在六个得到公认的分割挑战中实现了最先进的性能。
没有对网络进行改进,通过对数据的自适应处理,能在多个挑战赛中取得第一名,足以见得这个框架是有多么优秀。简直就是医学图像分割界的王者。
听我说:
如果你要做医学图像分割,你就一定要会使用nnU-Net。理由2个。
- 首先用nnU-Net测试一下。看一下该任务的大致效果,心里有个大致预测。
- 第二,写论文的时候通常都要和nnU-Net对比,尤其是投英文期刊,SCI什么的。因为它太火了,审稿人都知道这个东西的,不要抱侥幸心理。要么战胜它,要么使用它。它的出现,真的是有好有坏,投论文更加难了~
如果你对它感兴趣的话,我们就一起来读读论文吧。
Abstract
U-Net于2015年发布。凭借其直接和成功的架构,它迅速发展成为医学图像分割中常用的基准(benchmark)。然而,U-Net对新问题的适应包括关于精确架构、预处理、训练和推理的多个自由度。这些选择并不是相互独立的,它们对整体性能有很大的影响。
本文介绍了nnU-Net(now-new-Net)(名字很有意思,说明它并非是一个新的网络),它是一种基于2D and 3D vanilla U-Nets 自适应框架。我们论证了一个强有力的理由,即去掉许多复杂的花哨网络设计,而将重点放在其他方面,这些方面决定了一种方法的性能和可推广性。
我们在医学图像分割十项挑战赛 Medical Segmentation Decathlon challenge中评估了nnU-Net性能。结果:nnU-Net achieves the highest mean dice scores across all classes and seven phase 1 tasks (except class 1 in BrainTumour) in the online leaderboard of the challenge.
注意:论文中,通常把原始U-Net
称为 vanilla U-Net
1 Introduction
目前医学图像分割主要采用深度卷积神经网络(CNNs)。然而,每个分割基准似乎都需要专门的结构设计和训练方案,以实现具有竞争力的性能[1、2、3、4、5]。这导致了该领域的大量出版物,加上通常仅对少数数据集甚至仅对单个数据集进行有限验证,使得研究人员越来越难以确定在有限的情况下是否能够实现其承诺的优越性的方法。
医学分割十项全能赛旨在专门解决这个问题:在这个挑战的参与者被要求创建一个分割算法,在10个数据集对应的人体不同实体概括。这些算法可以动态地适应特定数据集的具体情况,但只允许在全自动管理器中这样做。挑战分为两个连续的阶段:1)开发阶段,参与者可以访问7个数据集,以优化他们的方法,并使用最终的冻结方法,必须提交相应的7个测试集的分段。2) 第二阶段对3个之前未公开的数据集评估相同的精确方法。
总结
:通常的分割模型都是针对某一特定任务(如 心脏分割)进行研究的,需要特定的网络架构设计以及训练方法的设定,它只能解决特定问题而无法解决一系列问题。而这个医学分割十项全能赛就是希望参赛者能开发一个适应多种分割任务的算法。
在本文中,我们提出了nnU-Net (”no-new-Net”)
框架。它驻留在一组三个相对简单的U-Net模型上,只包含对原始U-Net的微小修改[6]。我们省略了最近提出的扩展,例如使用残差连接[7,8]、密集连接[5]或注意机制[4]。nnU-Net会自动根据给定的图像几何结构调整其结构。不过,更重要的是,nnU-Net框架彻底定义了围绕它们的所有其他步骤。
在这些步骤中,在这些步骤中,网络的大部分性能可以获得,也可以分别失去:预处理(例如重采样和标准化)、训练(例如损失、优化器设置和数据扩充),推理(例如,基于补丁的策略和通过跨测试时扩展模型的集成)和潜在的后处理(例如,强制执行单个连通成分分析,如果适用)。
总结
: 上述这些对数据的处理方法才是nnU-Net的精髓,如果有时间,查看源码,学习一下它对数据的处理方法。
2 Methods
2.1 Network architectures
医学图像通常包含三个维度,这就是为什么我们考虑一个基础的U-Net架构,主要包括三种Unet: 2D U-Net
, 3D U-Net
and a U-Net Cascade
(U-Net级联)。2D U-Net, 3D U-Net都是输入的全分辨率图像。 级联U-Net 首先使用低分辨率的图像做一个粗分割,再使用全分辨图像做细分割。与U-Net的原始公式相比,我们的架构修改几乎可以忽略不计,相反,我们致力于为这些模型设计一个自动训练管道。
总结
: 当我们查看代码的时候,就会发现nnU-Net提供了这三种架构。
U-Net[6]是近年来备受关注的一种成功的编解码网络。其编码器部分的工作原理与传统的分类CNN相似,它以减少空间信息为代价,连续地聚集语义信息。由于在分割过程中,语义和空间信息对网络的成功都至关重要,因此必须以某种方式恢复丢失的空间信息。U-Net通过解码器来实现这一点,解码器接收来自“U”底部的语义信息,并将其与通过跳过连接直接从编码器获得的更高分辨率特征图进行重新组合。与其他分割网络(如FCN[9]和以前的DeepLab迭代[10])不同,这使得U-Net能够很好地分割精细结构。
总结
: 这一段主要总结 U-Net 的优点,值得备注起来,以后写论文可以参考使用
就像原始的U-Net一样,我们在编码器中的池之间和解码器中的转置卷积操作之间使用两个普通的卷积层。 我们与原始体系结构的不同之处在于,我们用 leaky ReLUs
例如,斜率1e 2)替换了ReLU激活函数,并使用instance normalization
[11]代替了更流行的batch normalization
[12]。
总结
: 这里说明了对网络架构的两个小改动,修改了激活函数和归一化的方法。
2.1.1 2D U-Net
直观地,在3D医学图像分割的背景下使用2D U-Net似乎不是最佳选择,因为无法汇总和考虑沿z轴的有价值的信息。 但是,有证据[13]表示,如果数据集是各向异性的,则常规3D分割方法的性能会下降(请参阅“十项全能挑战”的前列腺数据集)。
2.1.2 3D U-Net
3D U-Net似乎是选择3D图像数据的适当方法。 在理想的世界中,我们将在整个患者的图像上训练。 但是实际上,我们受到可用GPU内存量的限制,这使我们只能在图像块(image patches)上训练此体系结构。 对于由较小图像组成的数据集(按每个患者的体素数量而言),例如脑肿瘤,海马和前列腺等挑战的数据集,基于 patch 的训练(这是由具有较大图像的数据集所规定的),这并不是问题。 肝,可能会妨碍训练。 这是由于体系结构的有限视野而导致的,因此不能将足够的上下文信息收集到例如计算机网络中。 正确地区分肝脏和其他器官。
总结
医学三维图像是很大的,不可能整个图像输入到网络中,因此就会把图像切成patch.而像肝这种大结构,切了之后就会损失很多上下文信息。
2.1.3 U-Net Cascade
为了解决3D U-Net在具有大图像尺寸的数据集上的实际缺陷,我们另外提出了一个级联模型。 因此,首先要对降采样的图像进行3D U-Net训练(阶段1)。 然后,将此U-Net的分割结果上采样到原始体素间距,并作为附加(一个热编码)输入通道传递到第二个3D U-Net,第二个3D U-Net在上以全分辨率进行训练(第2阶段)。 参见图1。
总结
: 这里给出了三种算法各自的优缺点,可以针对自己的任务进行选择。也可以都跑一遍,看哪个方法更优。
2.1.4 动态调整网络拓扑
由于图像大小差异很大(肝脏的中间形状为482×512×512,而海马为36×50×35),输入斑块的大小和每个轴的合并操作数(以及隐含的卷积层数) )必须针对每个数据集自动进行调整,以充分整合空间信息。 除了适应图像几何形状外,还有一些技术约束,例如要考虑的可用内存。 我们在这方面的指导原则是动态地将批量大小与网络容量进行权衡,以下将详细介绍:
我们从已知与硬件设置一起工作的网络配置开始。对于2D U-Net,此配置的输入补丁大小为256×256,在最高层中的批处理大小为42和30个特征图(每个下采样特征图的数量加倍)。我们自动将这些参数调整为每个数据集的中值平面大小(在这里,我们使用面内间距最小的平面,对应于最高分辨率),以便网络有效地训练整个切片。我们将网络配置为沿每个轴池化,直到该轴的要素图大小小于8(但最多不超过6个池化操作)。就像2D U-Net一样,我们的3D U-Net在最高分辨率的图层上使用30个特征图。在这里,我们从输入贴片大小128⇥128⇥128的基本配置开始,批处理大小为2。由于内存的限制,我们不会将输入贴片的体积增加到超过1283体素,而是匹配输入的长宽比补丁大小与以像素为单位的数据集的中值大小相匹配。如果数据集的中位数形状小于1283,则我们将中位数形状用作输入斑块大小,并增加批次大小(以便处理的体素总数与128⇥128⇥128相同,并且批次大小为2)。就像2D U-Net一样,我们沿每个轴合并(最多5次),直到要素图的大小为8。
对于任何网络,我们将每个优化器步骤处理的体素总数(定义为input patch乘以批处理大小)限制为最大数据集的5%。 对于过量的案例,我们减小了批量大小(下限为2)。
表2.1列出了为第1阶段数据集生成的所有网络拓扑。
“医疗分割十项全能”挑战的七个第1阶段任务自动生成的网络拓扑。 3D U-Net低分辨率是指U-Net级联的第一阶段。 U-Net级联的第二阶段的配置与3D U-Net相同。
2.2 Preprocessing (预处理)
预处理是我们的方法所组成的全自动分割流程的一部分,因此,下面介绍的步骤无需任何用户干预即可执行。
Crop: 所有数据都裁剪到非零值区域。 这对大多数数据集(例如肝脏CT)没有影响,但会减少颅骨剥脱MRI的大小(从而减少计算负担)。
Resampling: CNN本身并不了解体素间距。 在医学图像中,不同的扫描仪或不同的采集协议通常会产生具有不同体素间距的数据集。 为了使我们的网络能够正确学习空间语义,将所有患者重新采样到其各自数据集的中值体素间距,其中三阶样条插值用于图像数据,最近邻插值用于相应的分割蒙版。
U-Net级联的必要性由以下试探法确定:如果重采样数据的中值形状具有3D U-Net可以将其作为输入面片处理的体素的4倍以上(批大小为2) ,则有资格获得U-Net级联,并且此数据集还被重新采样为较低的分辨率。 这是通过将体素间距(降低分辨率)增加2倍来完成的,直到满足上述标准为止。 如果数据集是各向异性的,则首先对较低分辨率的轴进行下采样,直到它们与低分辨率轴匹配为止,然后才同时对所有轴进行下采样。 以下阶段1的数据集属于所描述的启发式方法,因此触发了U-Net级联的使用:心脏,肝脏,肺和胰腺。(机器翻译)
Normalization: 因为CT扫描的强度等级是绝对的,所以所有CT图像都会根据整个相应数据集的统计信息自动归一化:如果数据集的相应json解密器文件中的模态描述表示“ ct”,则所有强度值都发生在 收集训练数据集,并通过裁剪这些强度值的[0.5,99.5]百分位数对整个数据集进行归一化,然后基于所有收集的强度值的平均值和标准偏差对z评分进行归一化。 对于MRI或其他图像模态(即,如果在模态中未找到“ ct”字符串),则将简单的z分数归一化分别应用于患者。
如果裁剪使数据集中患者的平均大小(体素)减少1/4或更多,则仅在非零元素的掩码内进行归一化,并且掩码外的所有值均设置为0。
2.3 训练程序
从头开始训练所有模型,并在训练集上使用五折交叉验证对它们进行评估。 我们结合dice loss和交叉熵损失来训练我们的网络:
对于在几乎整个患者身上运行的3D U-Net(如果不需要级联,则是U-Net级联和3D U-Net的第一阶段),我们计算批次中每个样本的骰子损失,并计算批次中的平均值。 对于所有其他网络,我们将批次中的样本解释为伪体积,并计算批次中所有体素的骰子损失。
我们使用Adam优化器的初始学习率为, 所有实验都相同。我们将一个epoch定义为250个训练批次的迭代。在训练过程中,我们保持验证和训练损失的指数移动平均值.......(好多数字不好敲,我放弃了~~想了解的看原文)
2.3.1 Data Augmentation (数据增强)
当从有限的训练数据训练大型神经网络时,必须格外小心,以防止过度拟合。 我们通过利用各种各样的数据增强技术来解决这个问题。 在训练过程中,以下增强技术被实时应用(applied on the fly during training):随机旋转,随机缩放,随机弹性变形,伽玛校正增强和镜像。 数据增强是通过我们自己的内部框架完成的,该内部框架可在github.com/MIC-DKFZ/batchgenerators上公开获得。
我们分别为2D和3D U-Net定义了一组数据增强参数。 这些参数不会在数据集之间修改。
如果3D U-Net的输入面片大小的最大边缘长度大于最短长度的两倍,则应用三维数据增强可能不是最佳选择。 对于应用此标准的数据集,我们改用2D数据增强,然后将其逐片应用于每个样本。
U-Net级联的第二阶段接收上一步的分段作为附加输入通道。 为了防止强烈的共适应,我们应用了随机的形态学运算符(腐蚀,扩张,打开,闭合),并随机删除了这些分割的连接部分。
2.3.2 Patch Sampling (patch 采样)
为了提高我们网络训练的稳定性,我们强制要求一批中的三分之一以上的样本包含至少一个随机选择的前景类。
2.4 Inference (推理)
由于我们训练的基于patch的性质,所有推断也都基于patch进行。 由于网络准确性朝着patch的边界降低,因此,当汇总跨patch的预测时,我们将靠近中心的体素的权重提高为接近边界的体素。 通过按patch大小/ 2选择patch以使其重叠,我们通过沿所有有效轴镜像所有patch来进一步利用test time data augmentation
(测试时间数据扩充, 也叫TTA, 是一种在比赛中常用的方法)。
对于测试用例,我们使用从训练集交叉验证中获得的五个网络作为整体,以进一步提高模型的鲁棒性。
2.5 Postprocessing(后处理)
对训练数据进行所有地面真相分段标签的关联组件分析(该方法在国内通常叫连通成分分析。)。 如果在所有情况下一个类都位于单个连接的组件内,则此行为将被解释为数据集的常规属性。 因此,将在相应数据集的预测图像上自动删除该类连接最大组件外的所有组件。
总结
: 通过连通成分分析,删除除了最大连通域的其他连通域,以减少假阳性区域。
2.6 集成与提交
为了进一步提高分割性能和鲁棒性,我们为每个数据集汇总了三个模型中两个模型的所有可能组合。 对于最终提交,将自动选择在训练集交叉验证中达到最高平均前景骰子得分的模型(或集成模型)。
3 Experiments and Results
从表2中可以看出,我们的阶段1交叉验证结果在保留的测试集上得到了稳健的恢复,表明期望的不存在过度拟合。 导致所有前景类的性能下降的唯一数据集是BrainTumour。 此阶段1数据集的数据源于BRATS挑战[16],在BRATS挑战中,验证和测试之间的这种性能下降是常见现象,并且归因于相应数据和/或地面真相分布的较大变化。
4 Discussion
在本文中,我们提出了医学领域的nnU-Net分割框架,该框架直接围绕原始U-Net架构[6]构建,并动态地使其自身适应于任何给定数据集的细节。基于我们的假设,即非架构修改可能比最近提出的某些架构修改功能强大得多,该框架的本质是对自适应预处理,训练方案和推理的全面设计。
适应新的分割任务所需的所有设计选择均以全自动方式完成
,无需人工干预
。对于每个任务,nnU-Net会针对三个不同的自动配置的U-Net模型自动运行五倍交叉验证
,然后选择具有最高平均前景骰子得分的模型(或整体)进行最终提交。
在“医疗细分十项全能”的背景下,我们证明nnU-Net在7个高度不同的医疗数据集的保留测试集上具有竞争性,在所有任务的所有类别(除类别)上均获得最高的平均骰子得分提交手稿时,在线排行榜上的BrainTumour数据集中的第1个)。
我们承认,训练三个模型并为每个数据集独立选择最佳模型并不是最干净的解决方案。给定一个较大的时间尺度,可以在训练之前研究适当的启发式方法,以确定给定数据集的最佳模型。我们当前的趋势倾向于U-Net级联(如果无法应用级联,则倾向于3D U-Net), 唯一(接近)的例外是前列腺和肝脏任务。此外,我们许多设计选择的额外好处,例如使用Leaky ReLUs 而不是常规ReLU,并且我们的数据扩充参数不合适。
------- 完 -------