简介
弱监督:labelling chest CT scans requires significant domain expertise,time,and effort.因此作者提出了一种在感染区域只通过单像素值的点标注方式来减少工作量。传统上使用point-level annotations的分割模型一般都用交叉熵损失函数。然而,这些模型的准确度都很低,因此,作者提出了一个consistency-based(CB)loss function去鼓励模型的预测输出跟输入图像经过空间变换之后模型的输出一致。这个实验在三种开源的COVID-19 datasets的分割效果跟全监督的方式差不多。
创新点
作者提出了一种使用consistency-based loss function在只用point-level标注的CT图像来训练图像分割模型的框架。
论文提出的方案
论文弱监督的损失函数包括了有监督的point-level 损失还有无监督的consistency 损失。
Xi: input an image of size W × H
Yi: Yi is aW × H matrix with non-zero entries that indicate the locations of the object instances.
λ: λ is used to weigh between the two loss terms.
fθ(Xi)jYj: is the output corresponding to class Yj for pixel j, and ζi is the set of labeled pixels for image Xi.
tk: An example of tk is horizontal flipping, which can be used to transform an image Xi and its corresponding label Yi collectively to their flipped version.
Pi: is the set of pixels for image Xi.
第一个loss只关注被标注的像素点的预测概率。(有个疑问?这样的话模型输出全部为前景的概率不就好了 )。这个疑问其实有个误区,被标注的点还有背景,所以模型不会把输出的都预测为背景,但是这个loss无疑会有很多假阳性,可以这么说这个loss就是尽可能的包括所有被标注的点。
第二个loss就是一致性loss,其原理就是输入一张图片到网络中得到一个预测图,将预测图进行空间变换,得到一个伪标签,将原始的输入图像进行同样的空间变换,输入到同样的网络中,得到一个输出结果,如果模型学习到的特征对空间变换有鲁棒性的话,那么对于这种变换,模型也应该需要输出相同的结果,所以这个loss就是为了增强模型对空间变换的一个鲁棒性,让模型学习到一些与空间变换无关的特征。
如何验证(数据集、度量、和哪些方法做了对比)?
论文在三个COVID-19数据集上进行了实验。
每一种数据集的原始mask都是pixel-level的,因此需要将其变换为point-level mask,采取的方法是在每个单独的感染区域通过距离变换最大的像素值作为质心(taking the pixel with the largest distance transform as the centroid这个我也不是很理解)。对于背景区域,随机采样跟前景区域点标注数量相同的像素作为ground-truth points。
实验数据集介绍
COVID-19-A
包含了由意大利医学和介入放射协会提供的60位COVID-19患者的肺CT图像组成的100张轴向肺CT的JPEG图像。每一幅图像都被放射科医生标记了ground-glass,consolidation,和胸腔积液三种标签,实验中丢弃了两幅低分辨率的图像。所有图像都被被resize为352x352和使用ImageNet statics进行了归一化。因此最后的数据集包含了98幅图像,50幅作为训练集,5幅作为验证集,48幅作为测试集。
COVID-19-B
包含了9幅DICOM格式的体COVID-19胸部CT图像,总共有829个切片。图像首先将Houndsfield units转换为unsigned 8-bits,然后再resize为352x352,最后再通过ImageNet statics进行一个归一化。
使用两种不同的方式对COVID-19-B数据集进行拆分,分别是分离和混合。对于分离这种方式,用来训练、验证和测试的切片来自于不同的CT图像,其目的是为了训练出来的模型对新的病人的CT图像有泛化能力。最终,5幅CT图像用来作为训练,第六幅CT图像作为验证,剩余的图像作为测试集。对于混合这种方式,用于训练、验证和测试的切片来自同一CT图像,这么做的目的是为了使训练出来的模型能够推断剩余的那些只标注了少量mask的CT图像。因此前5幅CT图像作为训练集,第六幅CT图像作为验证集,剩余的那些图像作为测试集,对于每一幅图像,CT图中45%的切片作为训练集,5%的切片作为验证集,剩余的50%作为测试集。
COVID-19-C
包含了20幅CT图像,每一幅3维的CT图像将Houndsfield units转换为unsigned 8-bits,然后通过ImageNet statistics进行归一化。跟COVID-19-B一样,将数据集分为seperate和mixed两种去评估我们模型的有效性。对于seperate split,分配了15幅CT图像作为训练集,1幅CT图像作为验证集和4幅CT图像作为测试集。对于mixed split这种方式,将每一幅CT图像的前百分之45%作为训练,5%作为验证,剩余的50%作为测试。
度量方式
IOU
F1 Score
也叫DICE系数,相对于IOU,给了交集更大的权重。
PPV
其实就是precision,模型预测为阳性的样本中,真正的阳性有多少。
Sensitivity
S
e
n
s
i
t
i
v
i
t
y
=
T
P
T
P
+
F
N
Sensitivity = \frac{TP}{TP+FN}
Sensitivity=TP+FNTP
也叫召回率,其实就是模型预测正确的阳性里占所有真正阳性的比例。
Specificity
S
p
e
c
i
f
i
c
i
t
y
=
T
N
F
P
+
T
N
Specificity = \frac{TN}{FP+TN}
Specificity=FP+TNTN
特异度,模型预测正确的阴性样本里占所有真正阴性样本的比例。
对比实验
基于不同的损失函数,做了四个实验
1)Point loss
2)CB(Flip)+PL
3)CB(Flip,Rot)+PL
4)Fully supervised
实现细节
{
'base':'fcn8_vgg16'
'batch_size': 8,
'num_channels':1,
'max_epoch': [101],
'optimizer': [ "adam"],
'lr': [1e-4,],
}
Loss Function | Dice | Iou | PPV | Sens. | Spec. |
---|---|---|---|---|---|
Fully Supervise | 0.57/0.65 | 0.40/0.48 | 0.43/0.52 | 0.87/0.85 | 0.78/0.85 |
Point Loss | 0.51/0.54 | 0.35/0.37 | 0.38/0.39 | 0.78/0.88 | 0.76/0.73 |
CB(Flip) + PL(Ours) | 0.60/0.58 | 0.43/0.41 | 0.45/0.46 | 0.90/0.80 | 0.80/0.82 |
CB(Flip,Rot) + PL(Ours) | 0.63/0.73 | 0.46/0.57 | 0.50/0.65 | 0.86/0.82 | 0.84/0.92 |
Loss Function | Dice | Iou | PPV | Sens. | Spec. |
---|---|---|---|---|---|
Fully Supervise | 0.48/0.24 | 0.32/0.14 | 0.84/0.89 | 0.34/0.14 | 0.99/1.00 |
Point Loss | 0.61/0.57 | 0.44/0.40 | 0.49/0.44 | 0.82/0.82 | 0.95/0.94 |
CB(Flip) + PL(Ours) | 0.54/0.69 | 0.37/0.53 | 0.41/0.72 | 0.78/0.66 | 0.93/0.99 |
CB(Flip,Rot) + PL(Ours) | 0.70/0.72 | 0.54/0.56 | 0.69/0.73 | 0.71/0.70 | 0.98/0.98 |
备注:/左边为在COVID-19-A数据集使用2080ti,以batchsize为4进行的复现结果。
存在的问题
1.COVID19_V1这个数据集只有98张352x352的JPEG图片,其中训练的时候只用了45张,验证5张,测试48张。送入训练的时候使用torch.utils.data.sample函数进行重复采样(2倍),没有其他的数据扩充操作,数据量很少,很难说明问题。
2.实验结果显示会出现全监督的效果比论文提出来的效果还要差?