CheXpert 数据集简介-4/24
毕设题目是关于使用生成对抗网络进行医学图像数据增强的研究,在寻找大型公开数据集过程中,选中了 CheXpert 数据集,下面对他进行介绍。
CheXpert是2019年吴恩达团队公开的一个大型X线胸片数据集,本篇数据及对应文章 CheXpert: A Large Chest Radiograph Dataset with Uncertainty Labels and Expert Comparison,实验团队对他进行了大量的介绍,下面我们跟着论文的结构,从一下这几个方面进行介绍:
0. Title
- Abstract
- Introduction
- Dataset
- Labeler Results
- Model
- Validation Results
- Test Results
- Existing Chest Radiograph Datasets
- Conclusion
- 个人心得
0.Title
本篇论文题目为:CheXpert: A Large Chest Radiograph Dataset with Uncertainty Labels and Expert Comparison。
提出了数据集的名称 CheXpert(Chest eXpert),一个大型胸片数据集,而且包含 Uncertainty 标签,和专家的比较。题目很好的提出了自身的数据集的优点,首先是数据集大,其次是含有不同寻常的 Uncertainty 标签,并含有 Expert Comparision,这是当前大多数据集很少具有的优点,尤其是在数据集稀缺的医学图像领域。
1.Abstract
摘要部分是文章所有工作的大致总结,主要包含了几个点。
\(\quad\) 1、CheXpert数据集的基本情况,是一个包含65240位病人,224316个胸片图片的大型数据集,数据集中的信息是由标签器Labeler从放射学报告中提取14个观测值中得到(有点类似于文字识别,并且加上语义分析的程序),观测值分为正样本(positive)、负样本(negative)、还有不确定样本(uncertain),并对如何处理 uncertain 标签的样本的方法进行了讨论、性能衡量;
\(\quad\) 2、验证集,由200个胸部X线影像构成,并且标签由3为专家进行标注(注意不是train dataset中的Labeler 了,使用人工标注比使用Labeler 更为合理),并且在验证集上可以发现,不同的处理 uncertain 的方法,有着不同的好处。(因为valid dataset就是用于调参的,预处理 uncertain 标签的方法,就是相当于调整模型、模型参数等等信息);
\(\quad\) 3、测试集,由500个胸部X线影像构成,并且标签由5为专家进行标注(其中是3人是验证集的人手,这点很严谨,因为保证了验证集和测试集标签不会因人为因素出现太多偏差,毕竟参数是按照验证集来调整评估的)。另外,有3名专家也进行标注,不过他们是作为放射学专家,和训练模型性能进行比较的;
\(\quad\) 4、模型在数据集上的结果。主要是在测试集上,将训练的模型,和专家的表现水平进行比较(主要是使用ROC和PR曲线),得到了较好的结果;
2.Introduction
\(\quad\) 首先介绍X胸片在医学领域的重要性,自动胸片诊断手段的重要性,但倘若使用ML方法,自然也对Dataset提出了一些要求。 数据集要大,有很强的参考价值,能够提高专家性能的衡量作比较。显然这就是猛吹自己数据集了,啊不是
\(\quad\) CheExpert (Chest Expert)数据集有224316个图片,这些图片来自于65240个病人,每一张图片有14个常见的胸片影响的观测值。这些观测值是通过自身设计的一个 labeler从文字医学报告中提取来的,并且含有uncertain标签。
\(\quad\) 该数据集的任务是通过多角度的胸片(front正面, lateral侧面),预测14个属性值的 posive,negative 情况,并调查了训练过程中对 uncertain 标签不同的处理方法所带来的效果。效果是在验证集上进行查看,是在5个观测值上进行比较,发现不同处理方法,对不同种类的观测值有着不同的效果。
\(\quad\) 最好介绍调参后的模型在Test dataset上效果很好, 对于某些观测值模型在一定程度上超过专家,比较的指标是ROC and PR curves。
3.Dataset
\(\quad\) CheExpert (Chest Expert)数据集是大型胸片数据集,有224316个图片,这些图片来自于65240个病人,每一张图片有14个常见的胸片影响的观测值,每个观测值标签分为了,positive, negative, uncertain。下图是标签在不同观测值上的分类情况。
\(\quad\) 数据是来自于斯坦福大学医院的数据,拿到的成对的胸片和医学报告。(为了严谨性,选取了专家随机抽取了1000个胸片和医学报告进行核对,发现数据对是没问题的)。 14个观测值基于报告中的患病率和临床相关性选取的
\(\quad\) 下一步是从Report报告中,提出自己的特征提取方法Labeler,进行结构化数据(转换为14个观测值),以用于模型训练和验证。labeler这个东西太偏了,直接跳过。只需要知道,选用专家进行判断成本太高了,不如直接来个文字识别加上语义分析,手动提取特征(在Training dataset上)。为了保证实验结果的可靠性,Valid dataset 和 Test dataset 一定要是专家人工打标签的。
4.Labeler Results
主要是将自己的 Labeler 和他人的Labeler 进行对比。(这一部分不重要,我也没看)
5.Model
\(\quad\) 模型的训练师接收一个图像,然后对14个观测值进行预测。一个病人同个时间对应多个图像时(front,lateral),模型输出观测数值概率的最大值。
\(\quad\) 不过有个问题,模型的种类是否需要分类型,比如说胸片的前视图front,侧图lateral等等。否则特征提取是否容易出问题?不过倘若分开训练的话,数据样本也不一定会很足。
5.1.Uncertainty Approaches
\(\quad\) 本文在 uncertainty label 如何处理的讨论上也很有意思,因为每一种观测值在 Labeler 提取中有三种标签0 (negative)、1 (positive)、u (uncertain)。但是我们专家组的评测中,确是只有两个标签。(说实话训练集、验证集、测试集标签种类不同有点奇怪,不过也可以解释的通。专家给病人基本都会是0、1,不确定的情况往往可以通过专家之间的讨论去除,但是labeler有些情况确实是判断不出来)。 我认为与其说是 uncertainty标签的处理,不如说是解决放射性专家和Labeler理解的差异性,毕竟训练集太大了,请专家划不来。
\(\quad\) 文中提出了5种处理办法,而且较为常见,U-Ignore, U-Zeroes, U-Ones, U-SelfTrained, U-MultiClass,这几种方法也挺好理解的。
\(\quad\) U-Ignore: 将uncertain的属性遮住,没有直接丢弃整个样本(倘若整个样本直接不要的话,那数据集损失太大了),反倒是使用掩码遮掉部分属性的方法,较大程度的利用了数据信息。但是 在uncetainty 数据没有得到有效利用(也就是说Uncertainty 数据本身 也是一种信息),而且uncertain数据倘若不是随机分布的话,模型可能存在学习方向存在引导性误差的风险。 下图是带有掩码BCE的计算公式。(注意是BCE,因为对每个观测值而言仍然是二分类)。如果接触过语言模型语言翻译等等,应该对带有掩码的交叉熵损失有所了解。
\(\quad\) U-Zeroes, U-Ones:将uncertain 属性设为全0,或者是设为全1。但是倘若uncertain属性有着自身的含义(不同于0,1的那种),含有对分类器有用的信息,这也可能使得分类器坏掉。
\(\quad\) U-SelfTrained:将uncertainty数据看作是未进行label的数据。首先使用前面几种提到的方法(往往是第一种,U-ignore,不过具体哪个好也不一定)预训练出一个模型。然后利用预训练的模型对我们的 uncertain 数据进行重新标记。这种方法非常像是半监督学习,而且注意对 uncertainty 数据标记时,可能存在阈值,超过阈值在进行打标签。而且,可以使 softlabels,不要求是0,1,可以是一些小数,比如说0.7等等。
\(\quad\) U-MultiClass:这个方法,挺常见,而且我个人首先向想的就是这种方法,尤其是你认为 uncertain 是无法仅仅通过胸片判断结果的时候,uncertain自然就是一个类别。但是,数据集中有些奇怪的,valid数据集非0即1,也就是说专家们要么认为是正样本,要么认为是负样本,纯纯的二分类问题。所以说对于这种三分类做法,在training时候不需要调整,但是 valid 和 test 时候,需要去掉 uncertain 部分,然后进行softmax归一化操作。
5.2.Training Procedure
\(\quad\) 主要是实验细节和框架的介绍。尝试使用ResNet152, DenseNet121, Inception-v4, and SE-ResNeXt101几个框架,最后发现DenseNet121 architecture结果最好
6.Validation Results
\(\quad\) 该部分主要是在验证集上查看不同处理uncertainty标签的结果,并进行分析。
6.1 Validation Set
\(\quad\) 更为详细的介绍了验证集。 验证集是200个病例的200张图片组成。
验证集由三个专家分别标记,标记分为四种:present, uncertain likely, uncertain unlikely, absent, 并将这个标记annotations 编码。present 和uncertain likely 表示positive 1,absent和uncertain unlikely表示negative 0。最后进行选择,毕竟是3票机制, 0和1数量肯定不相等,也就是验证集的label种类为 0, 1两个
6.2 Comparison of Uncertainty Approaches
\(\quad\) 使用AUC进行衡量评价。但是我对文中提出这个特定的AUC有点奇怪,(不够我就把它当做普通的AUC处理了,应该是AUC计算上有些变形,不过不影响评估)。
有人可能有疑问,为什么只是评估这5个观测值,而不是评估14个观测值:
一、我觉着一是专家不好请,
二、评估这几个确实能满足大多数的问题
但是既然评估这几个,为什么还训练那么多?
这应该是给分类器多个额外的任务,他可能做的更好!(有点像是ACGAN)
下图是使用不同 uncertainty 处理方法,对评测结果的影响。
之后,便是试图解释,问什么不同的 uncertainty 处理方法,在不同观测值上,有着不同的效果。
就是试图在理论上解释,为什么有时候使用 U-ones好,有时候使用U-zeros好,有时候两者都不好。
我认为主要在于我们的 labeler 可能对 report 中的语意理解不到位。
有时候report说可能患有某种疾病,大概率就真的患有该疾病,并不是不确定。使用U-ones最好
有时候说可能是该疾病,而大概率没患有该疾病(因为该疾病发病率低,而且症状轻)。使用U-zeros最好
有时候是真的不确定,难以分辨,或许使用multi-class,将uncertainty单独作为一类,最好
7.Test Results
\(\quad\) 将最终模型的性能在测试集上查看(针对不同观测值的uncertainty,使用了最好处理方法)
7.1 Test Set
\(\quad\) 测试集包含来自500个病人的500张图片。八个放射性专家按照和验证集相同的进程处理标注图片。5个专家用于作为标注,5个人其中的3个人是标注验证集的那三个,剩下的两个是随机选取的。另外三个人,作为放射科医生的衡量基准,用于评估模型的性能是否达到了放射科医生专家的水准。
7.2 Comparison to Radiologists
\(\quad\) 将模型的表现性能和3名专家进行比较,如下图所示:
$\quad $我们对 Model 绘制了PR和ROC曲线。三名专家也作为3个点,画在了图像上。这里说明,Model通过不断变化阈值,是可以绘制 ROC、PR曲线的,但是专家直接给的是 0、1,而不是小数,不要需要阈值,因此,他们只是一个点。通过判断专家的点,是否在Model曲线的下方,来判断模型的性能是否超过了专家的水准。图片的正上方代表的正是他的水准超越了3名专家中的几个。
\(\quad\) 最后对本文局限性进行了说明,
第一、我们病例的检测分类并没有参考病人的疾病史和其他的检测。
第二、没有统计数据进行测试以评估是否存在差异在模型的性能和放射科医生之间具有统计学意义。
8.Exsiting Chest Radiograph Datasets
\(\quad\) 简要介绍一下其他数据集,并说一下自己数据集的好处,该部分可以略过,就是有点类似于 Related Work部分
9.Conclusion
$\quad $说明主要贡献在于,提供了一个超大型、超专业的胸片数据集,给出了 train、valid数据集。对 uncertain 数据的多元化对比处理。并在测试集上的优良表现。
10. 个人心得
$\quad $我觉着该篇论文写的非常好,
首先是内容是非常的严禁,为了说明数据和实验的可靠性,他用大量专家抽样检测来进行说明,
二是论文通俗易懂,我第一次读数据集相关的论文,发现文章还是挺好懂得,除了部分不太好理解,但是这部分不是很重要
非常佩服吴恩达的团队!
11. 数据集使用
$\quad $关于数据集使用上,提一下我个人的见解。
-
可以按照常规思路,在 train dataset 上进行训练,然后按照团队给出的 valid dataset 上进行调参,不过因为该团队并没有给出 test dataset,只能通过比赛的形式,提交到论文给出的竞赛中,由主办方给出模型测试结果。
-
因为 test dataset 并没有公开,我们可以不使用 test dataset, 仅仅使用 train dataset 和 valid dataset, 然后对数据集进行重组。因为valid dataset 数据量较少,可以将 valid dataset 作为 test dataset, 然后对 train dataset 进行划分,划分为用预训练模型的数据集 和 调参的验证数据集。不过该方法存在缺陷,在先前论文的介绍中可知,train dataset 是由 labeler 从医学报告中自动检测提取,而 valid dataset 是多名专家通过观察胸片进行标注,也就是易出现样本偏差。 也就类似与你做人脸检测,训练集和测试集都是中国人的数据,但是测试集确实歪果仁,测试效果的参考价值不是很好说。
-
因为 train dataset 和 valid dataset存在偏差,而且 test dataset我们又没办法获取,所以说可以将 train dataset 和 valid dataset 混合,然后重组划分为三个数据集,又或者是直接不适用 valid dataset(本身的数据量也不多),使用吴恩达团队给出的 train dataset 划分出 train dataset, valid dataset 和 test dataset,这也是我使用的方法。
12. GAN中使用CheXpert
$\quad $使用生成对抗网络进行医学图像数据增强并不是一件容易的事情,因为医学图像往往图片分辨率高,图片的结构性强,往往需要选取很大的 GAN 网络才或许满足模型容量的要求。假如,你选取了 StyleGAN 用于医学图像数据增强,并且选取了 CheXpert 数据集,那么我认为一下几点需要注意
-
CheXpert 数据集有着很多的观测值(14个),而且但是这不是说他有14个类别,打个比方,人,可以分为亚洲人,非洲人,欧洲人等等,这是种类;但是CheXpert14个观测值不同于这个,第一个观测值是是头发长段,第二个观测值是肤色,第三个观测值是眼睛大小等等。如果你将14个观测值一起放入进行训练,训练难度是非常大的。我的建议是,我使用 densenet 进行查看,14个观测值中某一个训练效果不好,然后选取改观测值进行 Style GAN训练。
-
CheXpert 居然读取出来是 RGB 三通道的,我的建议是使用 pytorch 的时候将其转化为灰白,否则GAN生成图片会有些彩色效果。