今天将分享kaggle系列挑战赛之肺炎分类及肺炎区域检测的完整实现过程,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
一、比赛介绍
对X光图像进行是否肺炎判断,并将有肺炎的区域标识出来。一共有26684张训练数据,3000张测试数据。
二、技术路线
A、判断是否有肺炎
1、加载csv文件,读取X光图像和对应类别标签值,统计正负样本比值:大约是1:3.5。
2、将所有标注数据分成9:1分成训练数据和验证数据,然后对训练数据中正样本进行2倍扩充,验证数据不扩充。
3、对所有的图像进行统一缩放处理,大小统一大小是256x256,图像归一化,用均值是0和方差是1的方式进行归一化。
4、网络采用的是VGG16网络结构,损失是交叉熵,学习率是0.001,droupout是0.5,epoch是20,batchsize是64。
5、训练结果
训练损失函数结果
训练精度函数结果
验证损失函数结果
验证精度函数结果
6、验证数据结果
通过上面曲线可以看到,随着训练的进行,训练结果越来越好,而验证数据却不是的,这说明出现过拟合现象,此时采用提早结束训练网络。将最后保存的网络权重用来对验证数据进行测试,并查看一下相关评价指标。
a、ROC曲线
b、ROC曲线面积——0.8289450000000002
c、混淆矩阵
d、其他评价指标
precision recall f1-score support
0.0 0.86 0.89 0.87 2000
1.0 0.58 0.52 0.55 600
avg / total 0.80 0.80 0.80 2600
B、标识肺炎区域
1、加载csv文件,读取X光图像和对应框的数值(左上点坐标和长宽数值),并将框生成区域实体框图像(使用opencv画框函数可实现该功能)。
2、将训练数据分成9:1分成网络训练数据和验证数据。
3、对所有的图像进行统一缩放处理,大小统一大小是256x256,图像归一化,用均值是0和方差是1的方式进行归一化。
4、网络采用的是VNet2d网络结构,损失是二值dice,学习率是0.001,droupout是0.5,epoch是20,batchsize是64。
5、训练结果
训练损失函数结果
训练精度函数结果
6、验证数据结果
下图是原始x光图像,左边是金标准图像,右边是预测结果。
为了方便大家更高效地学习,后期会将相关项目代码更新到github上,点击原文链接即可访问官方比赛网址,可以直接下载训练和测试数据。