LUNA16数据集(一)简介
LUNA16,全称Lung Nodule Analysis 16,是16年推出的一个肺部结节检测数据集,旨在作为评估各种CAD(computer aid detection计算机辅助检测系统)的banchmark,因为每个CAD都是基于自己的数据集,很难比较之间的性能优劣,这时候banchmark就很重要,在此之前比较知名的数据集就是Anode09了,不过这个数据集太小,训练集只有5个病例。
目前为止,比赛已经停止结果提交,不过数据集仍然可以下载,并且在leaderboard上有各路大神团队的比分及算法描述,可以自行查阅。
官方地址:https://luna16.grand-challenge.org
同时该数据集还有一个官方论文,Validation, comparison, and combination of algorithms for automatic detection of pulmonary nodules in computed tomography images: the LUNA16 challenge,本篇博客中主要内容也取于本论文。
论文地址:https://arxiv.org/abs/1612.08012
下面进入正题。主要从数据组成,比赛规则两方面介绍下这个数据集。
一 数据
LUNA16的数据来源于一个更大的数据集LIDC-IDRI,该数据集共有1018个CT扫描,也就是1018个病例,每个CT图像都有xml格式的标签文件,这个数据集的数据来源于7家不同的学术机构,所采用的扫描器及其相关参数都不尽相同,所以,1018个图像可以说分布不均,用论文中的话来说就是very heterogeneous。
LUNA16数据集将切片厚度(slice thickness)大于3mm的CT去除,同时将切片space不一致以及缺失部分切片的CT也去除,最后产生了888张CT,构成了LUNA16.这里要解释两件事,一,剔除3mm以上的CT是因为切片越薄效果越好,这不难理解,对肺部进行扫描,肯定是扫描得出的数据越多越好,想的极端点,如果整个肺部只有一张切片,这厚度绝对够了吧哈哈,那就连3D数据都没法获取了,更别说有效检测肺结节。二,切片space是啥,个人理解就是切片出来的数据是3D的(把一张张二维切片组合一起),有z,y,x三个维度,spacez指的就是切片厚度,spacey和spacex指的是每张切片的单个像素代表着实际宽高多少的肺部组织。所有的CT图像都以.mhd格式存储。
在LIDC-IDRI数据集中,有三种区域会标注出来,直径>3mm的结节,直径<3mm的结节以及非结节(但是肺部畸变区域),回到LUNA16,在888张CT中,共有36378个结节被标出(LIDC-IDRI标注的),在LUNA16中,只有直径>3mm的结节作为样本,直径<3mm的结节和非结节都不纳入进来,而直径<3mm的结节有11509个,非结节区域有19004个,这样还剩下36378-11509-19004=5765个,针对这5765个结节区域,若两个结节离的太近(此处太近的定义为中心距离小于半径之和,也就是相交了),则对两个结节进行合并,合并的中心和半径是该两个结节的均值,经过这样处理,还剩下2290个结节。由于标注的时候是四位专家一起标注,有些结节只有一位专家标注,有些有两位,最好的情况是四位都标注了,根据这个规则,分别有2290,1602,1186,777个结节由至少1,2,3,4位专家标注,LUNA16选取至少由三位专家标注的1186个结节作为最后要检测的区域,也就是我们做实验时下载的数据。
总结一下,数据筛选流程
(1)将直径>3mm的结节筛选出来,其它的不用,此时还有5765个结节
(2)将相近的结节融合,融合后还有2290个结节
(3)将三个以上专家标注的结节作为检测使用,共有1186个结节,也就是最后的实验数据。
(4)补充一点,不用的结节不是真的不用,2290-1186=1104个只有一位专家标注的结节,以及11509个直径<3mm的结节和19004个非结节合在一起作为irrelevant findings,这些区域,既不作为正样本也不作为负样本,所以如果你的算法检测出这些区域,不会处理为false positive,当然更不是true positive,直接无视之。
这里,不妨看一下实际上LUNA16的文件,共有10个子文件夹,subset0~subset9,这是为了做10折交叉验证,每个文件夹里都是病例,每个病例对应两个文件,文件名相同,后缀不同,其中.mhd文件存储着ct的基本信息,.raw文件存储着实际的ct数据,可以看到,ct文件还是挺大的,LUNA16足足一百多G,下载起来也挺耗时的。


二 比赛规则
比赛共有两项,一个是complete nodule detection,另一个是false positive reduction,前者要求实现一个完整的检测系统,后者要求对给定区域进行二分类,是否为结节。
我跑了一个github上的代码,只跑了任务一,所以任务二的比赛细节就不讲了。
具体而言,整个数据集是十份的,每份CT数相等,针对该数据集要执行10折交叉验证,总共可以分为四步
(1)取一份做测试集,其余九份做训练集
(2)在训练集上训练算法
(3)在测试集上测试,并生成结果文件
(4)完成10折交叉验证后,将所有结果融合为一份
最终提交文件要求为.csv格式,每行为一个标注,具体格式就是 image identifier,x,y,z,score,其中第一个代表某个CT,x,y,z为结节坐标,score为置信度。
对于提交的结节候选区,如何判断正负呢?如果提交的坐标位于结节半径范围内,则为正,也就是true positive,如果有多个候选区都与一个结节相关,则选取置信度最高的。若候选区检测出irrelevant nodules,则忽略掉,既不是正也不是负,剩下的候选区都可以归为false positive了。
有了正负样本的定义,就要进行评估,LUNA16采用的是FROC(Free-Response Receiver Operating Characteristic)准则,这一准则的定义及细节需要百度或者维基了解下。其实就是一张图,纵轴为召回率,横轴为FPs/scan,
召回率就是标记的结节你找出来几个,FPs/scan就是平均每个CT的FP数,注意是数,不是百分比。

上图就是运行某个肺结节检测模型的FROC图,横轴明显是FP的数目。
最终的评比准则是0.125,0.25,0.5,1,2,4,8七个点召回率的平均值,论文中还提到bootstrap的方法,就是对测试集的每个CT进行重采样,最终就是有的CT可能出现多次,而有的CT可能没有,然后将采样得到的CT的候选区集合起来,计算FROC,不过bootstrap的置信度区间我没理解,有待考察。
目前任务一也就是检测的leaderboard已经被刷到了0.951的高分,来自平安科技,第二名0.950,来自健培公司,我跑的这个算法达到0.84,也不错,不过这前两名是真的恐怖,虚心学习之~
LUNA16数据集(一)简介的更多相关文章
- LUNA16数据集(三)预处理
在(一)和(二)中简单介绍了LUNA16数据集的组成,以及肺结节的可视化,有了对数据集的基本了解后,还要对数据集进行预处理,计算机视觉中原始数据一般不会直接送入神经网络,这里也是如此. 这篇博客想写已 ...
- LUNA16数据集(二)肺结节可视化
在检测到肺结节后,还需要可视化,这样才能为诊断服务. 我使用的项目地址为:https://github.com/wentaozhu/DeepLung 项目基于论文:DeepLung: Deep 3D ...
- LUNA16数据集的百度云链接
可能需要会员链接:https://pan.baidu.com/s/1KTjoGKfLB_1Y-BQzerhGgg 提取码:g901
- 【机器学习】Iris Data Set(鸢尾属植物数据集)
注:数据是机器学习模型的原材料,当下机器学习的热潮离不开大数据的支撑.在机器学习领域,有大量的公开数据集可以使用,从几百个样本到几十万个样本的数据集都有.有些数据集被用来教学,有些被当做机器学习模型性 ...
- 在Ubuntu内制作自己的VOC数据集
一.VOC数据集的简介 PASCAL VOC为图像的识别和分类提供了一整套标准化的优秀数据集,基本上就是目标检测数据集的模板.现在有VOC2007,VOC2012.主要有20个类.而现在主要的模型评估 ...
- 利用DSB2017冠军开源代码为LUNA16生成mask
代码地址:https://github.com/lfz/DSB2017 先展示下生成的mask与真实mask subset9 subset8 subset7 subset6 subset5 subse ...
- Candidate Generation and LUNA16 preprocessing
在这个kernel中,我们将讨论有助于更好地理解问题陈述和数据可视化的方法. 我还将提供有用的资源和信息的链接. 此脚本是用Python编写的. 我建议人们在桌面上安装anaconda,因为here提 ...
- 【机器学习】Iris Data Set(鸢尾花数据集)
[机器学习]Iris Data Set(鸢尾花数据集) 注:数据是机器学习模型的原材料,当下机器学习的热潮离不开大数据的支撑.在机器学习领域,有大量的公开数据集可以使用,从几百个样本到几十万个样本的数 ...
- 【医学图像】3D Deep Leaky Noisy-or Network 论文阅读(转)
文章来源:https://blog.csdn.net/u013058162/article/details/80470426 3D Deep Leaky Noisy-or Network 论文阅读 原 ...
随机推荐
- javascript——常用函数
1.获取随机数: function GetRandomNum(n, m) { //n-m之间的随机数 return Math.floor(Math.random() * (m - n + 1) + n ...
- 使用matplotlib的示例:调整字体-设置刻度、坐标、colormap和colorbar等
使用matplotlib的示例:调整字体-设置刻度.坐标.colormap和colorbar等 2013-08-09 19:04 27805人阅读 评论(1) 收藏 举报 分类: Python(71 ...
- 如何判断python的数据类型,用type函数
用 type 函数 In [29]: type(dataset) Out[29]: list 查询list的行数 In [38]: len(dataset) In [39]: Out[38]: 36 ...
- dos 下bat命令
注:cmd下 help > result.txt assoc 显示或修改文件扩展名关联. attrib 显示或更改文件属性. break 设置或清除扩展式 ctrl+c 检查. bcded ...
- centos7虚拟机桥接上网(DHCP)
centos设置成自动获取ip地址方式(DHCP) 1.打开终端查看网卡信息 #ifconfigifcfg-enp0s3lovirbro 2.编辑文件#vim /etc/sysconfig/netwo ...
- JVM实用参数(二)参数分类和即时(JIT)编译器诊断
JVM实用参数(二)参数分类和即时(JIT)编译器诊断 作者: PATRICK PESCHLOW 原文地址 译者:赵峰 校对:许巧辉 在这个系列的第二部分,我来介绍一下HotSpot J ...
- [hadoop入门]mapper与reducer(word_count计数demo)
1.mapper #!/usr/bin/env python import sys for line in sys.stdin: line = line.strip() words = line.sp ...
- 初阶html学习总结(一)(转)
一:颜色代码 如果你想使用某种颜色,取得它的颜色值即可.比如,您想改变某些文字的颜色,您可以使用下面的代码:<font color=#ffc060 size=2>改变#符号后的代码即可改变 ...
- C++中的一类临时对象
类名(参数名)这样的对象是临时对象,不能取地址,不能被引用,不过可以给同类型的其他对象赋值,该临时对象定以后可以进行一次操作,然后立即销毁. 当我们定义一个对象以后并不想立即给它赋初值,而是以后给它赋 ...
- 用StringBuilder来实现经典的反转问题
import java.util.Scanner; public class Practise03 { public static void main(String[] args) { //键盘录入一 ...