nnUNet and its customization
How it works?
- nnUNet是什么:会自动适应数据集的语义分割框架,主要用在医学。具体来说,包括网络超参、数据预处理等内容,它都会自动根据数据集来决定,训练出一个strong UNet baseline
- 为什么“自动配置”很重要:数据集太多样了,手动配置费劲、易错、难扩展
- 2D/3D;不同模态和通道数;图像尺寸和体素密度(voxel spacing);各向异性(anisotropy);类不平衡;目标结构性质(target-structure properties)
- 体素,对应像素,即3D图像的最小信息单元;spacing,我翻译叫密度,实际上比较接近2D图像的dpi(dot-per-inch)概念,也就是单位物理尺寸中的单元数(单位是 个),不过spacing是它的倒数,即一个体素的物理尺寸(单位是 毫米),一般由3个数构成,表示3个轴向的密度。其实spacing这个概念也适用于2D图像,用2个数表示
- 各向异性:spacing在不同轴上数值不同的情况,比如[0.5 0.5 1.0],此时物理上的正方体在图像上是长方体(1mm x 1mm x 1mm的正方体,占2 x 2 x 1的体素区域,深度方向被压扁了)
- 类不平衡:有类间不平衡和类内不平衡两种,类间很好理解:不同类别的数据量不平衡;类内(下面的内容来自AI,请自行甄别正误)有三种典型情况:子类不平衡、特征空间密度不均、难易样本失衡,例子如下
- 子类不平衡:鸟类可以分很多种具体的鸟,比如麻雀和鹦鹉,它们的数量不平衡
- 特征空间密度不均:因为视角等原因,同一个类的数据在特征空间中形成了多个簇,这些簇的样本数量不平衡,比如人脸图像中正脸和侧脸数量不同(子类不平衡也可能导致这个问题)
- 难易样本失衡:一般情况下是容易判别的样本多,难判别的样本少(但你也可能故意反过来收集或者构造数据)
- 目标结构性质:大概指的是要分割的物体(器官、细胞等)、场景(病变模式等)的结构性质(大小、形状等,甚至还有“物体嵌套在物体里”之类的物体间关系等)
- 应用场景:监督学习的语义分割,尤其适合 从头训练、生物医学数据集 和 非标准成像设置
- 非标准成像设置:简单来说,就是什么稀奇古怪的拍摄方式都无所谓,nnUNet只从实际数据中推断配置,不做过多要求
- 主要配置:根据数据集,nnUNet会产生 2d、3d_fullres、3d_lowres和3d_cascade_fullres 四种网络总体结构和其它相关配置,其中cascade似乎是最少创建的
- 自适应是怎么做到的:nnUNet有三种决策方式,用在不同配置项上
- 固定参数:有稳定的、默认的值,不随数据集而变
- 基于规则的:通过启发式规则根据 数据集指纹 决定取值
- 数据集指纹:一些对于决策比较重要的信息,比如图像尺寸、spacing等。nnU-Net 利用这些信息来确定预处理流程、目标spacing(不同的spacing要统一缩放到某个目标值)、patch尺寸和网络拓扑(比如网络层数等)
- 经验参数:靠经验或观察的结果选值
- 实际发生了什么:总体来说,工作流如下
- 把数据集变成nnUNet的格式
- 提取数据集指纹,创建plans,预处理
- 训练一个或多个配置
- 比较这些配置的结果,决定后处理流程
- 推理
(未完,26/8/5)
