Senyh/UCMT

结肠数据集的一些问题

Closed this issue · 5 comments

您好,
我最近在复现结肠数据集的测试结果,但是遇到了一些问题。
由于代码中没有这部分的数据集处理,所以我采用了PraNet的数据集,采用合并训练的方法。并结合您在ISIC数据集的预处理方法(即:通过imread打开,类型转换,resize(512,512),数据增强,将标签转为tensor并增加维度),同时我还参考了代码中ISIC数据集划分有标签数据与无标签数据的方法(即:采用整个训练集作为无标签,随机选择其中的15%作为有标签,将其索引保存在文件中,并将有标签数据复制,直到与训练集长度一致)。
在这种设置下我进行了训练与测试,测试结果在Kvasir上dice分数低了5个百分点,在CVC-Clinic数据集上低了9个百分点。我不确定是数据集处理中哪一步出了问题,所以想向您请教一下。
谢谢!

感谢您对我们工作的关注。
息肉分割和ISIC的数据处理方式基本一致。按理说,随机性不至于导致这么大的性能差异,有可能数据划分不同造成的。我建议您验证下Mean-Teacher和CPS是不是也是类似的结果。

您好,我正在尝试验证Mean-Teacher和CPS,
CPS
由于在Mean-Teacher中使用原论文的损失函数效果十分不理想,于是在CPS中我使用的损失函数是您的代码中的DSCloss而不是原论文的CrossEntropyLoss,总体损失函数的构成参考了CPS原论文(即:有标签的部分计算CPS与loss_sup,无标签的部分计算CPS),同时采用了原论文的学习率动态调整。
30%有标签数据训练50个epoch,在Kasir数据集上验证,最好分数为87.17,与论文中的结果接近。在CVC-ClinicDB数据集上验证,最好分数为80.26,远低于论文中的结果。
Mean-Teacher
Mean-Teacher我本想采用原代码中的损失函数(CrossEntropyLoss,losses.softmax_mse_loss),但训练出的效果极不理想,在25个epoch下,30%比例,Kasir数据集上分数为77.16,CVC-ClinicDB数据集上分数为66.96
实验设置参数如下:
总体损失只结合了两部分(有监督的交叉熵,无监督的losses.softmax_mse_loss),concistency=2.0,学习率采用余弦退火
lr = ramps.linear_rampup(epoch, args.lr_rampup) * (0.01 - args.initial_lr) + args.initial_lr)
其中args.lr_rampup设置为2,args.initial_lr设置为0。
50 epoch的结果还在训练中。
对此我有五个问题:
1.在CPS中我修改损失函数的做法是否正确,是否符合您复现CPS时的设置?
2.此前训练的UCMT(25 epoch,30%有标签),Kasir数据集上分数为87.14,低于CPS的87.17。在CVC-ClinicDB数据集上分数为80.05,低于CPS的80.26。我猜测UCMT低于CPS的原因或许是没有采用动态学习率调整。不知道是否与此有关?
3.我查看了30%有标签的数据组成,一共435张图像中有255张来自于Kasir,180张来自CVC-ClinicDB。我不清楚这种比例是否会导致模型在Kasir和CVC-ClinicDB上的性能差异?
4.此前训练的UCMT,在15%有标签的前提下得出的结果:Kasir数据集上分数为83.78,CVC-ClinicDB数据集上分数为79.89,在Kasir数据集上与30%有标签的结果(Kasir:87.14,CVC-ClinicDBCVC-ClinicDB:80.05)存在较大差距,我查看了15%有标签数据的组成(30%有标签的数据包含了全部的15%有标签数据),一共217张图像中有135张来自于Kasir,82张来自CVC-ClinicDB。 我不清楚这种差异是否属于正常范围?
5.您在复现Mean-Teacher的结果时采用的实验设置是什么?

您好

在我们的实验中,所有方法采用相同的实验设置。因此:

  1. 正确
  2. 所有方法均没有动态学习率调整
  3. 如果用的是PraNet的数据,有差异是正常的。
  4. 你的基础模型是U-Net还是Deeplabv3?
  5. mean-teacher也采用DSC loss,用硬标签,而不是MSE loss的软标签

非常感谢您的回答,这让我理解了Mean-Teacher的实验结果。
关于您给出的第二点答案,我会去除学习率动态调整再次进行训练,来寻找UCMT与原论文性能产生差异的原因。
关于您提出的第四点,我采用的基础模型是Deeplabv3。
还有一个问题就是CVC-ClinicDB数据集的验证结果一直与Kasir数据集的结果存在较大差距,不知您是否可以给我一些建议来提升CVC-ClinicDB数据集的分数?
十分感谢您的耐心回答,谢谢!

数据集之间的结果存在差异应该是正常的。可以通过数据增强提升性能,对无标注数据还可以通过阈值筛选提升伪标签质量从而提升模型分割性能。