描述
在这个比赛中,要构建一个算法用来检测医学图像中的肺炎视觉信息。具体的说,算法需要自动定位胸部X光片上肺部不透明(lung opacities)位置。
背景
在国际上,肺炎占所有5岁以下儿童死亡的15%以上。2015年,有920,000名5岁以下的儿童死于该疾病。在美国,肺炎导致急诊就诊的人数超过500,000,2015年死亡人数超过50,000,使该疾病成为美国十大死亡原因之一。
肺炎检测通常是通过由训练有素的专家检查胸部X线片(CXR)进行的,通常表现为CXR上不透明度增加的区域或多个区域,诊断通过临床病史、生命体征和实验室检查进一步证实。
肺炎在CXR上的诊断是复杂的,因为肺部存在其他情况,如液体超载,出血,体积损失,肺癌,辐射后或手术改变。比较患者在不同时间点的CXR,并与临床病症和病史相联系,有助于做出诊断。
CXR 是最常见的影像学诊断研究。许多因素(例如患者的位置和吸气深度)可能会改变CXR的外观,从而使解释更加复杂。另外,临床医生每班都要面对大量的图像读取。为了提高诊断服务的效率和覆盖范围,北美放射学会(RSNA®)已与Kaggle的机器学习社区联系,并与美国国立卫生研究院,胸腔放射学会和MD.ai合作开发应对这一挑战的丰富数据集。
RSNA是一个由放射科医生、医学物理学家和其他医学专业人士组成的国际性协会,拥有来自全球146个国家的54000多名会员。ML有可能自动对潜在肺炎病例进行初步检测(影像筛查),以便优先考虑和加快审查。
评估
该竞赛采用不同交并比(IOU)阈值的平均精度进行评价。一组预测边界盒和地面真实边界盒的IoU计算如下:
度量标准会扫描IoU阈值范围,并在每个点上计算平均精度值。 阈值范围为0.4到0.75,步长为0.05:(0.4、0.45、0.5、0.55、0.6、0.65、0.7、0.75)。 换句话说,在0.5的阈值处,如果预测对象与真实标签对象的交并比大于0.5,则将其视为“命中”。
在每个阈值t处,根据将预测对象与所有地面真实对象进行比较而得出的真阳性(TP),假阴性(FN)和假阳性(FP)的数量来计算精度值:
当单个预测对象与IoU高于阈值的地面真值对象匹配时,计算真阳性。假阳性表示预测对象和基本真实对象没有关联。假阴性表示基本真实对象和预测对象没有关联。
重要提示:如果给定图像根本没有基本真实对象,任何数量的预测(误报)都将导致该图像获得0分,并包含在平均精度中。
将单个图像的平均精度计算为上述每个IoU阈值处精度值的平均值:
在提交中,还要求您为每个边界框提供一个置信度confidence。 在上述过程中,将按照边界框的置信度水平对其进行评估。 这意味着将首先检查具有较高置信度的边界框是否与解决方案匹配,从而确定哪些框为真阳性和假阳性。
注意: 几乎在所有情况下,置信度都不会影响评分。 它主要用于允许按特定顺序评估提交框,以解决极端情况。 已知这些边缘情况都不存在于数据集中。 如果您不希望使用或计算置信度,则可以使用占位符值(例如1.0)来表示没有特定的顺序适用于提交框的评估。
最后,竞争指标返回的分数是测试数据集中每个图像的各个平均精度所占的平均值。
介绍总结
在以上信息中首先是要了解是对肺部视觉信息进行检测。
这里介绍了一些基础的项目背景:医学基础介绍
CXR是什么?
在介绍中提到了CXR的信息,那么CXR是什么,其实是Chest X Ray英文的缩写,也就是胸部X光片,在拍摄图像的过程中,X射线会穿过人体并到达另一侧的检测器。具有稀疏物质的组织(例如充满空气的肺)不会吸收X射线,并且在图像中显示为黑色。密集的组织(例如骨头)会吸收X射线,并在图像中显示为白色。
总的来说就是:
黑色=空气
白色=骨头
灰色=组织或液体
什么是lung opacities
阴影(opacity)是一个非常宽松的术语-“阴影(opacity)是指优先衰减X射线束并因此比周围区域看起来更不透明的任何区域。它是一个非特定术语,不表示异常的大小或病理性质。
通常,肺部充满 空气。当某人患有肺炎时,肺中的空气会被其他物质(如液体,细菌,免疫系统细胞等)所替代。这就是为什么混浊区域为灰色区域,但应更呈黑色。当我们看到它们时,我们了解到该区域的肺组织可能不健康。
也就是说对于正常的肺部来说通常为黑色的呈现出来,有阴影的地方可能是有其他物质。
怎么评估
IoU
用到了IoU的概念,首先要知道什么是IoU及IoU是怎么实现的。
这是之前总结的IoU,主要通过边框位置交集和并集进行计算得出交并比的数。
平均精度
这里的TP、FP、FN是:
TP(真阳性):单个预测对象与IoU高于阈值的地面真值对象匹配
FP(假阳性):预测对象和基本真实对象没有关联
FN(假阴性):基本真实对象和预测对象没有关联
上面提到对于给定的图像没有基本真实对象的话,对于图像的误报也包含在平均精度中
confidence
文中提到了“置信度confidence”
置信度主要用于对TF和TP的判断。
数据集
文件描述:
- stage_2_train.csv: 训练集。包含patientId 和bounding box/目标信息。
- stage_2_sample_submission.csv:正确格式的样例提交文件。包含测试集的patientid。注意,样例提交的每个图像包含一个框,但是分配给给定图像的边界框的数量没有限制。
- stage_2_detailed_class_info.csv:提供关于每个图像的正类或负类类型的详细信息。
数据信息介绍:https://www.kaggle.com/peterchang77/exploratory-data-analysis
标签数据
下载之后的文件如图
首先是对于stage_2_train.csv文件:
可以看出有6个值:
patientId:是对应图片的名称也是唯一的ID
x:指的是boundbox x坐标
y:指的是boundbox y坐标
width: boundbox宽度
height: boundbox高度
Target:目标,也就是对于检测是否有boundbox出现,0是指没有,1指的是有
stage_2_sample_submission.csv:
样式文件。
stage_2_detailed_class_info.csv:
其中的两个属性是一个指的是图片,class是表明类型,
类型:
Normal:正常
Lung Opacity:肺炎
No Lung Opacity/Not Normal:第三种情况,据表明某些图片确定不存在肺炎,但图像上仍可能存在某种类型的异常
可视化数据 记录(5.2)
创建了项目将数据复制进去:
统计图片个数
训练集数据数量为:26684
测试集数据数量为:3000
代码如下:
import os
path = * #图片地址
count = 0
for root,dirs,files in os.walk(path): #遍历统计
for each in files:
count += 1 #统计文件夹下文件个数
print(count) #输出结果
分类图片显示
代码:
import pydicom
#进行绘图
import pylab
# 打开文件
filePath= * #图片位置
ds=pydicom.read_file(filePath)
# 查看属性
print(ds.dir("pat"))
# 获取影像矩阵
pix = ds.pixel_array
# 显示图片
pylab.imshow(ds.pixel_array, cmap=pylab.cm.bone)
pylab.show()
我们在stage_2_detailed_class_info.csv文件:
复制ID在我们实现的代码中呈现出来:
同样的我们找到其他两类: