V-Net

论文地址:https://ieeexplore.ieee.org/abstract/document/7785132
项目地址:https://github.com/faustomilletari/VNet
其他项目:
https://github.com/mattmacy/vnet.pytorch
https://github.com/MiguelMonteiro/VNet-Tensorflow

1. 论文背景

医学图像大部分是3D Volumetric(如MRI),2D slice-by-slice 的处理方法低效、冗余,又丢失了slices之间的关联性。

2. 论文亮点

(1)直接使用3D卷积对Volumetric Medical Image进行分割;
(2)使用了一种新的目标函数(Dice Loss);
(3)卷积阶段学习残差函数(ResNet思想)。

3. 论文细节

3.1 网络结构

V-Net_第1张图片

这里强调几点:
(1)将网络分成若干个阶段,每个阶段学习残差函数,以此来加快收敛速度。
V-Net_第2张图片

(2)如何实现降采样?This is performed through convolution with 2 × 2 × 2 voxels wide kernels applied with stride 2。注意:这里降采样不是采用Pooling,请思考为什么不采用Pooling?(在训练期间有更小的内存需求,反向传播过程不需要存储转换)
V-Net_第3张图片
注:与2D卷积基本没有区别。
(3)在压缩路径的每个阶段都采用卷积操作使得通道数加倍。
(4)最后一层通过Softmax voxel-wise将输出的2通道结果转化为前景与背景的分割概率。
V-Net_第4张图片

3.2 Dice Loss

本文在结构上与FCN、U-Net,3D U-Net并无很大区别,我觉得一个吸引人的地方就在于提出了Dice Loss,这是基于Dice Coefficient的。那么什么是Dice Loss呢?

3.2.1 Dice Coefficient

Dice Coefficient, 根据 Lee Raymond Dice命名,是一种集合相似度度量函数,通常用于计算两个样本的相似度(值范围为 [0, 1]):
s = 2 ( X ∩ Y ) ∣ X ∣ + ∣ Y ∣ s = \frac{2(X∩Y)}{|X| + |Y|} s=X+Y2(XY)
即 X 和 Y 之间的交集除以 X 和 Y 的元素个数之和,其中,分子中的系数 2,是因为分母存在重复计算 X 和 Y 之间的共同元素的原因。
对于语义分割问题而言,X - GT 分割图像,Y - Pred 分割图像。


举个例子:
V-Net_第5张图片

对于预测的分割图的 dice coefficient 计算,矩阵X与Y交集首先将 预测图 与 GT分割图之间点乘,并将点乘的元素结果逐元素相加。关于|X|与|Y| 和 的量化计算,可采用直接简单的元素相加;也有采用取元素平方求和的做法(paper中采用平方)。
V-Net_第6张图片


3.2.2 Dice loss layer

L o s s = 1 − 2 ( X ∩ Y ) ∣ X ∣ + ∣ Y ∣ Loss = 1 - \frac{2(X∩Y)}{|X| + |Y|} Loss=1X+Y2(XY)
其实负的Dice Coefficient与 Dice loss 无区别,只不过是加一个常数而已。

为什么要加负号呢? 因为我们希望对于激活的像素进行学习,惩罚低置信度的预测,较高值预测会得到更好的 Dice loss。对背景信息相当于进行了丢弃不参与学习。另外,这种loss也不用考虑re-weighting问题(we do not need to establish the right balance between foreground and background voxels, e.g. by assigning loss weights to samples of different classes )。

注:dice loss 比较适用于样本极度不均的情况,一般的情况下,使用 dice loss 会对反向传播造成不利的影响,容易使训练变得不稳定。


那么为什么不用cross-entropy loss了呢?
请参考:https://stats.stackexchange.com/questions/321460/dice-coefficient-loss-function-vs-cross-entropy


你可能感兴趣的:(Paper)