今天将分享kaggle系列挑战赛之肺炎二分类的完整实现过程,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
一、比赛介绍

上图是肺炎患者胸部 X 射线的示例,与图相关正常胸部 X 光片(左图)显示肺部清晰,图像中没有任何异常混浊区域。细菌性肺炎(中)通常表现出局灶性肺叶实变,在这种情况下发生在右上叶(白色箭头),而病毒性肺炎(右)则表现为双肺更弥漫的“间质性”模式。
数据集分为 3 个文件夹(train、test、val),并包含每个图像类别(肺炎/正常)的子文件夹。有 5,863 张 X 射线图像 (JPEG) 和 2 个类别(肺炎/正常)。
胸部 X 射线图像(前后)选自广州市妇女儿童医学中心的 1 至 5 岁儿科患者的回顾性数据。所有胸部 X 射线成像都是作为患者常规临床护理的一部分进行的。
为了分析胸部 X 射线图像,首先通过删除所有低质量或不可读的扫描来筛选所有胸部 X 光片以进行质量控制。然后,图像的诊断结果由两名专家医师进行分级,然后才被批准用于训练 AI 系统。为了解决任何评分错误,评估集还由第三位专家检查。
二、技术路线
1、加载csv文件,读取X光图像和对应标签值。
2、将对应训练集,验证集和测试集生成csv文件。
3、对所有的图像进行统一缩放处理,大小统一大小是256x256,图像归一化,用均值是0和方差是1的方式进行归一化。
4、网络采用的是VGG16网络结构,损失是交叉熵,学习率是0.001,droupout是0.5,epoch是20,batchsize是64。
5、训练结果
训练损失函数结果:

训练精度函数结果:

验证损失函数结果:

验证精度函数结果:

6、测试结果
ROC曲线及数值

混淆矩阵

分类指标
precision recall f1-score support
0.0 0.99 0.50 0.66 234
1.0 0.77 1.00 0.87 390
avg / total 0.85 0.81 0.79 624
7、问题分析
从上面结果可以看到,测试结果相比于验证集结果还是存在比较大偏差的。原因分析,数据训练数据,验证数据与测试数据分布存在差异性,接下来采用相同的训练网络,首先将所有数据进行随机打乱,然后再按照7:1:2的比例分配训练集,验证集和测试集。结果如下,可以看到测试结果有明显提高。
训练损失结果:

训练精度结果:

验证损失结果:

验证精度结果:

ROC曲线及ROC面积值:

混淆矩阵:

分类指标:
precision recall f1-score support
0.0 0.91 0.96 0.94 273
1.0 0.99 0.97 0.98 727
avg / total 0.97 0.96 0.97 1000
为了方便大家更高效地学习,后期会将相关项目代码更新到github上,点击原文链接即可访问官方比赛网址,可以直接下载训练和测试数据。
如果大家觉得这个项目还不错,希望大家给个Star并Fork,可以让更多的人学习。如果有任何问题,随时给我留言我会及时回复的。