医学图像分割常用网络,Unet 和他的升级版
Unet
一、前人工作
sliding window:
优势:
- localize的功能
- 训练的patch很多(是不是表示有个很多个分割出来的sliding window)
劣势:
- slow
- localization accuracy 和 the use of context的权衡
二、Unet闪亮登场
结构
23个conv,U型,长连接
输出output segmentation map是2个channel: 本质是每个像素点的二分类问题。图像分为前景后景,两个channel分别表示每个像素点对应前后景的分数,谁大就是谁
展示的结果是把图像的每个像素点打上0或者255,效果就是那种黑白图,注意和上面区分(不过上面说的output map也有可能表示这个,具体看语境)
结构特点
- U型结构,encoder+decoder,提高output的分辨率
- 采用长连接skip connection
- upsampling有很多channel,更好地传播语义信息
- overlap-tile strategy:这个需要分2步解释。① 一个比较大的图像不好一次性扔到网络里进行分割,于是就将他分割为小块(tile)分割后再接起来(所以可能进网络之前就已经变成很多小块了)。② 网络的输出会比输入小一点,在周围padding一圈,小块拼起来的时候会弥补上seam
- excessive data augmentation - elastic deformation(更贴近医学图像的特点)
training
①Energy Function:(cross entropy)
$E = \sum\limits_{X\to \Omega}\omega(X)log(p_{l(X)}(X))$
其中 $p_{k}(X)=exp(a_{k(X)}/(\sum_{k’=1}^Kexp(a_{k’}(X)))$ , 感觉是计算x属于哪一类的可能性(归一化)
$l(x)$代表x真正属于的分类,K代表总共多少类别
②challenge(相同类别可能有很多细胞,这些细胞距离很近touching objects,给分类造成困难),提出使用:
weighted loss:
$w(x)=w_c(x)+w_0\cdot exp(- \frac{(d_1(x)+d_2(x))^2}{2\sigma^2})$
其中$d_1(x)$表示距离最近cell的距离,$d_2(x)$表示距离第二近的 如何理解weighted loss?相当于“越靠近边界的位置,权重越高,网络出错的代价就越高”,所以网络会学习尽量让他不出错。d2 是为了处理可能好多个object汇聚在一起的地方(作者可能也试过d3然后发现没有什么乱用。。)
③a good initialization of weights is extremely important
高斯随机分布,标准差$\sqrt{(2/N)}$,N 代表接下来神经元节点数
Unet++
a series of nested, densed skip pathways
一、结构介绍
总体特点
- re-designed skip pathways (密集的短连接),好处是可以让语义上更接近的feature融合,获得更好地效果
- deep supervision 深度监督
implementation details
训练过程中对几个模型的Dice coefficient, IoU进行监督
采用early stop
添加了wide U-net,保证参数量和Unet近似,以排除参数量对实验结果的干扰(控制变量法)
Adam optimizer,学习率3e-4
第一行4个目标节点后面都加上了一个1x1的conv, sigmoid 激活函数
deep supervision的细节
两种模式:
- accurate mode:所有segmentation branches 的output 被平均
- fast mode: 从4个segmentation branches 中选择一个作为输出,选择的依据是the extent of model pruning and speed gain (更小的branch精度可能会下降一些,但是速度会快)
deep supervision可以很好地帮助我们理解对于一个神经网络,到底多深才合适的问题。理解了这个问题之后,我们就可以在选择稍微降低一点精度的情况下大大提升网络运行的速度