全文详解:「深度学习」如何协助处理医疗中的「数据难题」

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1原文来源:WordPress

作者:Luke Oakden-Rayner

「雷克世界」编译:嗯~是阿童木呀、KABUDA、EVA


医疗数据很难处理。


在医学成像中,数据存储(档案)是基于临床假设进行操作的。不幸的是,这意味着当你想提取一个图像(比如一个正面的胸部x光片)时,你通常会得到一个装满其他图像的文件夹,并且没有简单的方法来区分它们。


640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

这些全部是相同的文件夹是合情合理的,因为在放射学中我们报告的是病例,而不是图像。这是病人在经历创伤后同时扫描的所有东西


根据制造商的不同,最终可能会得到水平或垂直翻转的图像。它们可能有反向的像素值(inverted pixel values)。它们可能会旋转。问题在于,当处理一个庞大的数据集(比如,50-100k的图像)时,如何在没有医生查看所有这些畸变(aberration)的情况下发现这些畸变?


你可以尝试编写一些简练的解决方案,比如:


在许多胸部x光片的两侧有黑色的边界(因为大多数胸部都比宽度高),所以如果底部有超过50个黑色像素行,那么它可能旋转了90度。


但是一如既往,我们陷入了失效模式(failure mode)。


640?wx_fmt=png

这里只有中间的图像有经典的“两侧黑色边界”外观


这些脆弱的规则无法为我们解决这些问题。


进入软件2.0,我们使用机器学习来构建解决方案以解决我们无法自己编码的问题。令人尴尬地是,像旋转图像这样的问题是可学习的。这意味着,像人类一样,机器可以很容易地(几乎)完美地完成这些任务。


因此,使用深度学习来为我们修复数据集是显而易见的答案。本文将说明这些技术的工作原理,如何以最少的努力完成工作,并展示一些使用方法的示例。举个例子,我将使用Wang等人的CXR14数据集,该数据集看起来是精雕细琢的,但仍然包含偶然的坏图像。如果你使用CXR14数据集,我甚至会给你一套新的~430标签,这样你就不用担心那些潜在的坏图像了!


非常令人尴尬


我们真正需要问的第一个问题是——


问题1:这个问题是令人尴尬地可学习的吗?


考虑到大多数的研究都是常规的,你需要非常高的精确度来防止排除太多“好的”研究。我们应该把目标定在99.9%。


很酷的一点是,这些我们可以很好地执行的简单问题,在视觉上是可以识别的。所以,一个很好的问题是“你能想象一个单一的视觉规则来解决这个问题吗?”在区分狗和猫时当然不是这种情况,这是ImageNet数据集的主要目的。 


有太多的变化和太多的相似点。我经常在演讲中使用这个例子——我甚至无法想象如何编写一般意义上在视觉上区分这两种动物的规则。这并不是令人尴尬地可学习的。


但在医疗数据中,许多问题其实很简单。变化很小。解剖学、角度、照明、距离和背景都很稳定。为了说明这一点,让我们看一个来自CXR14的简单示例。在数据集中的普通胸部x光片中,有一些是旋转的(这在标签中未被识别,所以我们不知道是哪些)。它们可以左右旋转90度左右,或180度(上下颠倒)。


这是令人尴尬地可学习的吗?


640?wx_fmt=png

旋转和垂直的胸部x光片之间的区别真的简单得令人尴尬


答案是肯定的。在视觉上,非常规研究与常规研究完全不同。你可以使用一个简单的视觉规则,比如“肩膀应该高于心脏”,你就会得到所有的例子。鉴于解剖学是非常稳定的,而且所有人都有肩膀和心脏,这应该是一个可学习的卷积网络规则。


非常渴望


我们需要问的第二个问题是——


问题2:我们拥有足够的训练数据吗?


在旋转图像的情况下,我们当然会拥有,我们做得到!我们所需要的只是几千个常规的胸部x光片,然后对它们进行随机旋转。例如,如果你在图像中使用numpy数组(numpy array),你可能会使用这样的函数: 


640?wx_fmt=png


这只是将图像按照顺时针方向旋转90、180度或270度。在这种情况下,绕着第二个和第三个轴(axis)旋转,因为第一个轴是信道的数量(鉴于theano dim排序规则)。


请注意:在这种情况下,CXR14数据集中几乎没有旋转的图像,所以意外“纠正”已经旋转图像的几率非常小。我们可以假设数据中没有数据,并且模型将会学习得很好。如果有更多非常规的图像,那么你最好手动选择常规和非常规图像。因为像旋转这样的问题很容易被识别,我发现我可以在一个小时内进行几千个标记,所以这并不需要太多的精力。由于这些问题很简单,我经常发现我只需要几百个样本即可“解决”这个挑战。


所以我们建立了一个常规图像的数据集,对其中的一半进行旋转,并相应地标记它们。在我的例子中,我选择了4000个训练案例(其中2000个是经过旋转的)和2000个验证集(validation set)案例(其中有1000个是经过旋转的)。这似乎是一个很好的数据量(请记住,经验法则(the rule of thumb):1000个样本可能是好的,加上误差范围(margin of error)),而且它适合于RAM,所以很容易在我的家用计算机上进行训练。


为了在机器学习中进行有趣的改变,我不需要一个单独的测试集。证据需要实践来检验(in the pudding)——无论如何,我都将在整个数据集上运行这个模型,并将输出作为我的测试进行检查。


一般来说,对于这类研究,我会让自己的生活变得轻松。我将图像缩小(因为旋转检测看起来不需要高分辨率)到256 x 256像素,并且使用一个经过预先训练的以keras作为基础网络的resnet50。使用经过预先训练的网络并没有真正的理由,因为几乎所有你使用的网络都会在一个简单的解决方案上聚合,但是它很简单,并且不会减慢任何速度(无论如何,训练时间都是快速的)。我使用了一组默认的参数,并且不为这个如此简单的任务进行任何调优。


你可以使用手边的经过编码的任何网络,VGG-net可行, Densenet可行,任何网络都可行,真的。


在几十个轮数之后,我得到了我的结果(这是在val集上的):


640?wx_fmt=png

AUC = 0.999, ACC = 0.996, PREC = 0.998, REC = 0.994


很好,如果这是一项令人尴尬地可学习的任务,我希望能找到的就是这个。


检查结果


正如我之前所说的,在医学图像分析中,我们总是需要检查我们的结果。查看图像,确保模型或过程做到了你想要它做的事情。


所以最后一步是在整个数据集上运行模型、进行预测、然后排除旋转研究(the rotated studies)。由于数据中几乎没有旋转研究,所以我可以简单地查看被预测为旋转的所有图像。


如果相反的话,这就是一个有很多异常图像的问题(比如超过5%的数据),那么收集几百个随机案例和手工标记一个测试集将会更为高效。然后,你可以通过适当的指标追踪模型的精确度。


我特别关心的是任意一个被称之为旋转(假阳性)的正常研究,因为我不想失去宝贵的训练案例。这实际上是一个比你所能够想象的更大的问题,因为这个模型可能会过度调用某种特定类型的病例(也许是那些让病人变得懒散和倾斜的病例),如果我们排除这些作为规则,那我们将会引入偏差进入我们的数据中,且不再有“真实世界”的代表性数据集。这显然与医疗数据有很大关系,因为整个目标就是生产出能够在真正的诊所中运行的系统。


该模型总共将171个案例识别为“旋转”。有趣的是,它实际上作为一个“异常”检测器,识别出许多实际上并没有旋转的坏案例。这是有道理的,因为它可能是学习解剖学的标志。任何异常的东西,如旋转的胶片或其他身体部位的X射线,都不具有相同的标志。所以我们实际上能够收获更多的东西,而不仅仅是寻找异常旋转的图像。


在171个预测中,51个是旋转了的正面胸部X射线。鉴于低的离谱的患病率(120,000中有51个),这已经是一个极低的假阳性率了。


640?wx_fmt=png

旋转的胸部胶片样本


在余下的120个案例中,56个不是正面胸部胶片。主要是侧面影片和腹部X光片的混合。无论如何,我还是想把这些摆脱掉。


640?wx_fmt=png


其余的呢?有一些混合的缩小性研究(黑色或白色的大边界)、淘汰性研究(整个研究灰色)、反向像素水平研究等等。

 

640?wx_fmt=png


总的来说,大约有10项研究,我将称其为明确的假阳性(意味着它们是我可能想要保存的良好的正面X射线)。值得庆幸的是,即使你想将它们重新添加进去,由于只有171个预测值,所以手动对其进行操作也是非常容易的。


所以旋转检测器看起来像是部分解决了一些其他问题(如像素值反转)。要知道它做的有多好,我们需要检查它是否漏掉了其他不好的案例。我们可以测试这一点,因为像素值反转(pixel value inversions)很容易为(图像中的x,x = max-x)生成数据。


所以我使用与旋转检测器相同的方法训练了一个快速的“反向检测器”,并取得了很好的结果。


640?wx_fmt=png

AUC = 1.0,ACC = 0.9995,PREC = 0.999,REC = 1.0


在这种情况下,可能有一些方法可以在没有机器学习的情况下做到这一点(直方图应该看起来很不一样),但是这也很简单。


那么,这个特定的检测器是否比旋转探测器发现了更多的反向结果呢?是的。旋转检测器在整个数据集中发现4个,而反向检测器发现38个反向研究。所以旋转检测器发现了一些不好的研究结果,但不是全部。


观点重申:培养单一模型来解决每个问题是正确的方法。


所以,我们需要特定的模型来完成附加的清洁任务。


每一点帮助


为了显示少量的标记数据是有用的,我拍摄了使用旋转检测器(n = 56)所发现的横向和不良区域的胶片,并在它们上面训练了一个新模型。由于我没有很多这样的胶片所以试图做得更为详尽,甚至没有使用验证集。由于这些任务是可学习的,一旦它接近100%,它应该就会具有很好的泛化能力。显然这里有过度训练的风险,但我认为是值得冒险的。


它效果很好!我发现了额外的几百张侧面胶片、腹部胶片和几个骨盆。


640?wx_fmt=png


显然,如果我从头开始构建这个数据集,解决这个问题会更加容易,因为我可以访问很多相关的非正面胸部图像。对于我来说,想要比现在做得更好,我需要从当地的医院档案中提取来自各个身体区域的一组图像,这超出了本博客的范围。所以我不能确定我是否掌握了大部分这些内容,但从这样一个小数据集中获得了相当好的效果。


除了关于CXR14的数据外,我注意到我的模型总是会对关于幼儿的胶片显现崩溃的状态。这些儿科胶片在外观上与成人胶片有很大不同,且它们被旋转检测器、反向检测器和不良身体部位检测器识别为“异常”。我建议它们应该被忽视,但是因为患者年龄被包含在标签集中,所以可以在没有深度学习的情况下完成。考虑到数据集中只有286名5岁以下的患者,除非我特别想要研究这个年龄段的患者,并且真正知道我在做什么,所以从医学成像的角度来看,我会排除所有这些患者。实际上,我可能会把所有10岁以下的人排除在外,因为这是一个合理的年龄,可以将体型和病理特征更加“成人化”。有兴趣的是,10岁以下的人约有1400人,因此约有1%的数据。


观点重申:幼儿胸部X光与成人非常不同。考虑到数据集中低于10岁的数据只有大约1%,除非有很好的理由,否则应该将其排除在外。


根据你的任务,放置不良和放大的胶片可能是一个问题,但是武断地定义一个“坏胶片”对于所有任务来说都是不可能的,这不是我想做的。还有一件事是特定于任务的。


就是这样。总的来说,使用深度学习来解决简单的数据清理问题效果很好。经过大约一个小时的工作,我清理了数据集中大部分旋转和反向的图像(这里需要注意一个名为csv的文件)。我我可能已经确定了相当一部分的侧面胶片和其他身体部位的胶片,但确定我需要为它们构建特定的检测器。


从更广泛得角度来查看CXR14数据,没有太多的图像误差。美国国立卫生研究院团队(NIH team)可能相当好地管理了他们的数据。在医疗数据集中情况并非总是如此,如果要构建高性能医疗AI系统,制定有效的方法来处理来自将临床基础设施用于研究任务的噪声是非常重要的。


更进一步


截至目前,我们已经解决了一些非常简单的挑战,但这并不意味着我们在医学成像方面遇到的问题都如此简单。我们的团队在构建一个大型髋骨骨折数据集时,应用到了这些技术。特别是,我们排除了其他身体区域的图像,也排除了植入金属(如髋关节置换)的病例,并且我们放大了髋关节区域,同时舍弃了与我们的问题无关的图像区域(髋部骨折不会发生在臀部以外)。


排除金属是通过自动文本挖掘过程实现的。因为这些假体在出现时几乎总是被报道,因此我们找到了与植入相关的关键词。这些标记仅花费了10分钟左右的时间就被创建了出来。


在躯体部分检测(body part detection)和边界框预测(bounding box prediction)错误的情况下,无法自动生成标记。所以我自己做了。即使是像边界框预测那样复杂的事物(这实际上是解剖学中里程碑式的识别任务),我们也仅需要约750个案例。每个数据集仅需要1小时左右的时间即可完成。


在这种情况下,我们使用手工创建的测试集来量化结果。


640?wx_fmt=png


相比于实际标记骨折需要几个月的时间,额外标记一小时或两小时以获得清晰的数据集是非常小的代价。特别是因为该系统目前可以接收任何临床图像,并且据我们所知,它可以自动排除无关或低质量胶片。这正是AI系统需要在“自然环境”中进行操作的方式,除非你想要付费给某人让其手工整理它分析的所有图像。


结论


我们都认同一个观点,那就是在数据充足的前提下,深度神经网络在解决视觉问题方面的能力,与人类水平相差无几。同样显而易见却少有人提及的一点是,“数据充足”在很大程度上依赖于任务的难易程度。


对于医学图像分析问题的一个子集(这也是我们在构建医学数据集时经常要解决的问题)而言,其任务是非常简单的,这使得问题很容易用少量的数据来解决。一般而言,仅用不到一个小时的时间即可完成对图像组的识别,但同样的任务,医生需要花费数小时的时间进行手工处理才可完成。


为了证明这一方法,同时感谢你的阅读,我提供了一组约含有430张标记为不良的图像,以将其从CXR14数据集中排除(同时建议你排除约1400名10岁以下的儿童,除非你明确知道为什么要保留他们)。这不会改变任何论文的任何结果,但对于这些数据集而言,图像越清晰越好。


我在本文中所探讨的内容,没有涵盖任何开创性技术,这也是我为什么不写一篇正式论文的原因。但对于我们这些正在构建新数据集的人,特别是那些没有大量深度学习经验的医生而言,我希望本文能引发他们关于软件2.0是如何凭借比人工方法更低的成本解决数据问题的些许思考。


注释:解释我的示例审查/标记过程


我在Windows文件浏览器中查阅所有图像。


640?wx_fmt=png

我在本文末的实际工作空间,用于旋转检测器的预测


我只需将我想要查看的案例转移到一个新的文件夹,然后打开该文件夹(以“特大号图标”作为试图模式)。这种尺寸的图像大约是你屏幕高度的四分之一,而且在大多数现实屏幕上都足够大,可以检测到诸如旋转这样的明显异常。当我标记具有明显异常的图像时,我只需按住Ctrl键并单击文件夹中的所有样本,然后将它们剪切/粘贴到新文件夹中。这样我每小时能筛选出1000张图像。


尽管这一系统非常简陋,但它比我从网上回购或自己编码中尝试的大多数事物要好很多。


用于移动文件的python代码非常简单,但是在构建数据时,它是我最常使用的代码之一,所以我认为我应该收录它:


640?wx_fmt=png


然后我可以去那个文件夹浏览一下。如果我做了一些人为处理,并且想要重新读取图像,那么这非常简单:


640?wx_fmt=png


原文链接:

https://lukeoakdenrayner.wordpress.com/2018/04/30/the-unreasonable-usefulness-of-deep-learning-in-medical-image-datasets/amp/?__twitter_impression=true


未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。


未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)云脑研究计划,构建互联网(城市)云脑技术和企业图谱,为提升企业,行业与城市的智能水平服务。

  如果您对实验室的研究感兴趣,欢迎加入未来智能实验室线上平台。扫描以下二维码或点击本文左下角“阅读原文”

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495690.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android应用程序变量

Android应用程序开发中,有的时候我们在应用程序的任何一个地方都需要访问一个全局变量,也就是在任何一个Activity中都可以访问的变量。它不会因为Activity的生命周期结束而消失。要实现应用程序级的变量,我们可以通过Application这个类来实现…

百度谷歌等联合推出机器学习基准 加速AI软硬件发展

来源:中国新闻网5月2日,由包括百度、谷歌、斯坦福大学、哈佛大学在内的多家企业和高校联合发布了一套用于测量和提高机器学习软硬件性能的国际基准MLPerf。其巨大的学术和产业价值获业界肯定,被认为不仅将加速推进机器学习硬件软件相关技术创…

王爽 汇编语言第三版 第10章 call 和 ret 指令 以及 子程序设计

第10章 call 和 ret 指令 10.1 ret 和 reft 指令 call 和 ret 指令都是转移指令,他们都修改 IP,或同事修改 CS 和 IP 。他们经常被共同来实现子程序的设计。 10.2 call 指令 和 根据位移 转移的call指令 段间转移 的 call 指令 转移地址 在 寄存器 中 的…

org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0

一、错误现象: 当改变了jdk版本时,在编译java时,会遇到Unsupported major.minor version错误。 jdk版本和stanford parser对应关系 JDK版本和Java编译器内部的版本号 J2SE 8 52, J2SE 7 51, J2SE 6.0 50, J2SE 5.0 49, JDK 1.4 48, J…

ip, tcp, udp, icmp header

Figure 1. IPv4 header Figure 2. TCP header Figure 3. UDP header Figure 4. ICMP header reference:TCP/IP Reference转载于:https://www.cnblogs.com/lbsx/archive/2010/11/30/1891814.html

人民日报三问人工智能,给法律制度带来哪些挑战?

来源:亿欧网 作者:倪弋摘要:人工智能生成物是否具有知识产权?人工智能可以替代司法者吗?人工智能侵权责任如何认定?人工智能的出现会给现行的法律制度带来了不少挑战,只有在法律研究上未雨绸缪…

测试用例设计--判定表

一. 判定表 定义判定表通常由四部分组成,如上图: 条件桩 : 它列出决定一组条件的对象; 条件项: 它列出各种可能的条件组合; 动作桩: 它列出所有的操作; 动作项: 它列出在对应的条件组合下的动作. 应用的范围在多个条件决定多个动…

王爽 汇编语言第三版 第11章 标志寄存器

条件码: ① OF(Overflow Flag)溢出标志,溢出时为1,否则置0.标明一个溢出了的计算,如:结构和目标不匹配.② SF(Sign Flag)符号标志,结果为负时置1,否则置0.③ ZF(Zero Flag)零标志,运算结果为0时…

Gartner:预计2018年人工智能行业总价值达1.2万亿美元

来源:网络大数据市场研究公司Gartner周三发布最新研究报告称,人工智能行业的总价值将在2018年达到1.2万亿美元,比2017年增长70%。其中,创造商业价值最大的领域是客户体验解决方案。该公司还预计,到2022年的时候&#x…

JAVA将html[动态]页面转成图片

近日项目上接到一个任务,设计并编写住院病案首页页面,然后将其转换成图片显示给医生查看。 天哪,住院病案内容那么多,光编写这个页面就已经够呛了,转图片我也没弄过,于是百度了一下,花了两天时间…

王爽 汇编语言第三版 课程设计 1

From:https://www.cnblogs.com/Since-natural-ran/p/6938133.html 汇编语言-课程设计1: https://www.cnblogs.com/tsembrace/p/3267158.html 王爽课程设计1(汇编语言编写): https://www.imooc.com/article/18785 王爽《汇编语言》课程设计1: https://blog.csdn.net/…

挑战权威还是偏离主流?颠覆性研究或将证明神经信号是机械波

来源:科研圈 翻译 马骁骁 编辑 魏潇 廖红艳就职于哥本哈根尼尔斯玻尔研究所(Niels Bohr Institute)的托马斯亨伯格(Thomas Heimburg),是一位研究量子力学和生物物理的物理学家。然而,他却希…

史上最全的女人坐月子注意事項

希望男人们要精心照顾好妻子,让妻子平安度过这一时期,为了宝宝,为了你们的幸福,因为你爱她就要呵护她,她好你也好,她平安就是你们全家的幸福,精致女人把祝福送给你们! 传统上人们将产…

斯坦福大学、DARPA与硅谷公司共同分析前沿科技发展趋势

来源:科技日报 作者:张梦然日前,斯坦福大学研究团队、美国国防部高级研究计划局(DARPA)以及硅谷创投公司和米资本的专家们,共同研讨了技术将如何重塑行业和社会等问题。他们分析了现今全球前沿科技的未来…

小甲鱼 OllyDbg 教程系列 (一) :二进制破解科普系列之 ReverseMe

小甲鱼 视频教程( 4、5 集 ):https://www.bilibili.com/video/av6889190?p4 实验程序 reverseME.exe 下载地址:https://pan.baidu.com/s/18NDV3rQ_yV_qzUrNRYmqjA 提取码:e91j http://www.360doc.com/content/1…

java将字符串生成图片

java将字符串保存为图片 因为最近接触到的需求是要将指定的字符串内容保存为图片,我知道肯定要用awt相关的东西,但是以前没有接触过awt,所以只能去网上学习相关的东西和找有关的资料,好在最后可以解决,直接上代码&…

AI 综述专栏 | 超长综述让你走近深度人脸识别

来源:人工智能前沿讲习班 作者: 葛政相信做机器学习或深度学习的同学们回家总会有这样一个烦恼:亲朋好友询问你从事什么工作的时候,如何通俗地解释能避免尴尬?我尝试过很多名词来形容自己的工作:机器学习&…

机器人也能拥有人类情感:“情感计算”让机器人学会“读心术”

来源:《情感计算与情感机器人系统》作者:吴敏,刘振焘,陈略峰著随着机器人进入日常生活中的各个方面,人们对其提出了更高的要求,希望它们具有感知人类情感、意图的能力,这类机器人称为情感机器人…

C 语言 函数调用栈

From:https://www.cnblogs.com/clover-toeic/p/3755401.html https://www.cnblogs.com/clover-toeic/p/3756668.html 程序的执行过程可看作连续的函数调用。当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接call指令)处继续执行。函数调用过…