记录一下沈阳的第四届图像计算与数字医学国际研讨会(The 4th International Symposium on Image Computing and Digital Medicine, ISICDM)挑战赛的竞赛过程。不得不吐槽一下整个过程项目三的主办方的各种延误和低级错误,比如标签给的JPG格式,槽点太多,吐槽不过来。
挑战赛官方网址:http://isicdm2020.imagecomputing.org/cn/Challenges.html


一、竞赛背景

  • 我国在工业化发展过程中,由于高度的空气污染、高吸烟率和较差的生产保护条件,导致肺癌、慢阻肺等肺部疾病的发病率一直维持在较高水平,并呈加剧趋势。另外,SARS、 COVID-19等冠状病毒肺炎传染速度快,已被列为威胁全球公众健康的重大传染性疾病。肺部疾病已经成为危害人民健康、社会及经济可持续发展的严重公共卫生问题和社会问题。 当前医学影像已经成为肺部疾病临床检测和诊断、治疗方案规划和术后评估等各个环节的重要依据。近年来,国内外研究者在肺部影像智能辅助诊疗技术方面已取得显著研究进展,在肺部疾病的早期诊断、精准治疗等方面开始发挥重要作用。传统采用检测图像中病变特征区域的异常依赖方案,对于正常组织的关注度较低,不符合专业医师的工作思路,在临床应用中具有局限性。由于肺部结构复杂、相邻组织区分度低、结构边界不清晰、区域密度不均匀和形状不规则,如何实现肺部多层次组织结构的精准提取和定量评估,已成为肺部影像智能化、定量化、精准化临床应用需求的难题和共性问题。

二、数据说明

  • 本数据集包含训练集和测试集两部分。训练集包含10例胸部CT平扫影像和10例CTA增强影像(注射血管造影剂,灰度值增强),层厚小于 2.0mm,分辨率512*512,DICOM格式,包括肺实质、支气管、肺部血管等组织的标注结构。测试集将分别由5例胸部CT影像、5例CTA影像组成。
  • 本数据集由竞赛参加人填写申请表后,提供下载链接,本数据集仅限于做本次竞赛和科研使用,不得用于任何商业用途。

三、评价说明

  • 评价采用测试集机器评价与医生主观评价相结合的方式,按照得分顺序进行排名。

四、数据处理

One-Hot编码

  • 在图像分割中,lable也是图片,进行训练时,需要将lable image转换成one hot编码的形式。本文仅使用np.equal,np.all,np.stack,三个操作实现one hot编码。其中label为gt image, label_values为class RGB Values list。
  • np.equal实现把label image每个像素的RGB值与某个class的RGB值进行比对,变成RGB bool值。
  • np.all 把RGB bool值,变成一个bool值,即实现某个class 的label mask。使用for循环,生成所有class的label mask。
  • np.stack实现所有class的label mask的堆叠。最终depth size 为num_classes的数量。

处理流程

  • 本次比赛的数据处理和训练的Pipeline如下图。
    Pipeline

五、模型选择

  • 本次比赛都选择生成对抗网络(GAN)作为Backbone,再在生成器部分做大量尝试,将UNet等分割网络作为生成器,再在生成器的输出处进行深度监督(像素级)。
    肺实质分割网络
    肺气管分割网络
    肺血管分割网络

  • 生成器部分的尝试包括:
    (1)U-Net
    (2)Two Stage(模型框架源自于HMOENet)
    (3)U-Net with Inception Module

  • 模型细节设计
    生成器和判别器输出都不需要Sigmoid,会在训练中处理
    附Codes: https://github.com/SvyJ/svyj.github.io/blob/master/codes/ISICDM

六、训练细节

  • 模型训练细节

(1)固定判别器,训练生成器
(2)固定生成器,训练判别器

  • 损失函数细节

(1)生成器G_Loss:由三部分组成,像素点损失BCELoss,DiceLoss和一致性损失ConsistencyLoss(来自判别器)

1
G_Loss = 0.5\*(loss_ce + loss_dice) + consisitency_loss\*consistency_weight

(2)判别器D_Loss:由两部分组成,real & fake

1
2
GAN:D_loss = D_loss_real + D_loss_fake
WGAN:D_loss = torch.abs(D_outputs_fake.mean() - D_outputs_real.mean())
  • 参数控制细节

(1)学习率:根据评价指标降低学习率,指标在patience个batch后不变化则降低factor比例

1
2
scheduler_d = torch.optim.lr_scheduler.ReduceLROnPlateau(D_optimizer, mode='max', factor=0.5, patience=10)
scheduler_g = torch.optim.lr_scheduler.ReduceLROnPlateau(G_optimizer, mode='max', factor=0.5, patience=10)

(2)权重:控制权重在clamp_lower=-0.01和clamp_upper=0.01之间

1
2
for p in D.parameters():
p.data.clamp_(clamp_lower, clamp_upper)

(3)梯度:防止梯度爆炸

1
nn.utils.clip_grad_value_(D.parameters(), 0.1)

七、实验结果

  • 涨经验去了,请忽略本菜鸡们的成绩(Team49)
    热身赛成绩排名
    排位赛成绩排名
    决赛成绩排名