此项目是CCF BDCI平台举办的训练赛-阿尔茨海默症的识别
- 赛题背景
阿尔茨海默症是一种起病隐匿的进行性发展的神经系统退行性疾病。临床上以记忆障碍、失语、失用、失认、视空间技能损害、执行功能障碍以及人格和行为改变等全面性痴呆表现为特征,病因迄今未明。患者的日常生活能力进行性减退,伴有各种神经精神症状和行为障碍。多发于老年人,通常病情呈现进行性加重,并逐渐丧失独立生活能力,发病后10到20年因并发症而死亡。
近年来全球阿茨海默症发病率呈明显上升趋势,截止至2018年全球约有5千万人患有阿尔茨海默症,到2050年,这一数字将增至1.52亿,将是现在的三倍之多。据估计,2018年全球社会阿尔茨海默症相关成本为1万亿美元,到2030年,这一数字将增至2万亿美元。我国的阿尔茨海默症发病率为0.71%,约有1000万阿尔茨海默症患者。在我国阿尔茨海默症在65岁以上人群中的发病率是5%,每增加10岁,发病率就增加5%,也就是说,85岁的人群中,每2-3个就有一个阿尔兹海默症患者。阿尔茨海默症的临床前期也被称作轻度认知障碍(MCI),这是一个介于正常和重度之间的过渡状态。由于病人及家属对病情认知的局限,67%的患者在确诊时为中重度,已错过最佳干预阶段。因此,对阿尔茨海默症以及轻度认知障碍的准确诊断具有重要意义。
- 赛题任务
本次比赛提供的数据集为人的头部3D MRI扫描图像,包含三种类别,分别是健康样本、轻度认知障碍样本和阿尔茨海默症样本。要求参赛者使用该影像数据(mat格式)训练模型算法,在独立的测试数据集中以尽量高的准确率把这三种类别的样本区分开来。每个样本都是3D的数据图像,希望参赛者能够充分利用这一特点,而且对于阿尔茨海默症具体涉及到大脑的哪一部分尚不明朗,这也是比赛的难点。
竞赛期望参赛者可以提出好的算法,以达到辅助医生进行阿尔茨海默症诊断的目的。通过计算机辅助手段,我们希望可以提高检测的速度和精度。
鼓励参赛者使用和设计深度学习算法来进行阿尔茨海默症的检测,但并不局限于此。赛题组希望参赛者可以充分发挥想象力和算法创造力,在医学影像领域展示出原创性并取得好的结果。
- 医疗数据特点
医疗数据的比较难收集,主要是以下原因:
个人隐私问题
数据分散问题(大部分病并不是集中在特定地区,所以分布很随机)
收集成本高
数据标注、清洗困难
所以 医疗数据大部分都是“小数据集”(一个实验过程,有1~2百多人就算不小了),这对于以“大数据”为基础的深度学习矛盾,也许随着科技的发展,国家对医疗数据的重视,通过较长时间累积应该会有更多“大”的医疗数据集出现。针对本次竞赛而言因为数据量不大,模型的泛化能力没有办法验证,结果很可能是 过拟合 Test集。所以本次探索意义大于结果成绩。
- MRI(磁共振)
磁共振成像(MRI)是一种利用磁共振现象产生的信号来重建图像的成像技术。它只是相当于氢质子的振动,然后平静下来,去感受到图像中的振动的方式。
优势:1.基于目前的研究,MRI对人体没有伤害;2.MRI可以获得脑和脊柱的立体图像,而CT图像则是组织的切片2D图像,使得医生很容易漏掉不明显的病变组织。
劣势:1.对于肺部的诊断效果没有CT好,但是费用比CT高;2.对于胃肠道的病变检查效果不如内窥镜
赛会提供给就是MRI数据,结构是:(300,1,79,95,79) 。其中300代表采样个体(应该是患者人数),1代表 通道数,79代表MRI数据切片层数(切片并不是连续,大约间隔5mm一层,也可以根据需要减小间隙提高3D成像效果),95*79代表切片图像(浮点型灰度图)
- 评审标准
采用宏平均F1-score进行评价
AWS EC2 GPU实例:p2.xlarge(便宜)
conda env create -f environment.yaml
或者
pip install -r requirements.txt
- 2D Model
将(300,1,79,95,79)数据集reshape成(300,79,95,79),当做300张799579的图像,其中图像channel为79,图像size为95*79,(仿照2D RGB图像处理方式),
使用ImageNet数据集上的预训练模型ResNet50进行模型训练,最终结果提交,
epoch:100 ,初始lr=0.001
得分为:0.73087549000
- 3D BaseModel
3D BaseModel参考了此项目优秀选手的构建方法,用以加深对3D深度网络构建的理解,在此感谢大佬的分享,
epoch:100 ,初始lr=0.01
得分为:0.75654924000
- MedicalNet
感谢腾讯开源的预训练模型Med3D,使我们站在一个新的高度上。因为数据集只有300例数据,需要更多数据或是相似的预训练模型,Medicalnet正好满足我的需要,如果利用MedicalNet的权重,迁移学习能够获得更好的成绩。 因为数据量很小,所以尽量选用层数浅的模型,基于上述分析,最终选用了ResNet10 。充分利用MedicalNet的主干网络(backbone部分),将github的代码Convolution Layers 和 Segementation Results部分更换成 Fully-connected Layer层,从而完成Classificaiton任务。
epoch:100 ,初始lr=0.001
得分为:0.92160189000
- MedicalNet + SKFlod
由于数据集只有300例,还要划分为训练集合验证集,如果只采用8:2划分的话,难免会造成过拟合;故结合SKFlod交叉验证,将多折模型结果融合,将多模型测试结果进行概率平均和投票表决两种方案
n_splits = 5,保持8:2数据集划分比率
epoch:60 ,初始lr=0.001
概率平均得分:0.86126125000
投票表决得分:0.84349591000
- 损失函数
torch.nn.CrossEntropyLoss()
- 优化器
torch.optim.Adam()
- 学习率调整策略
torch.optim.lr_scheduler.ExponentialLR()