建立无疟疾的世界——快速诊断疟疾程序,为你的健康保驾护航

Carlos Atico Ariza是2018年秋季的洞察研究员,他部署了一个网络应用程序,利用图像分析来诊断疟疾患者:Malaria Hero(下文暂译为:疟疾英雄)——将临床医生的压力减轻了85%。在成为洞察员以前,Carlos担任数据科学顾问,负责构建端到端的机器学习解决方案,如无人监督的异常检测系统。在他化学和生物工程博士期间,他研究了一系列控制干细胞的方法,为再生医学领域作出贡献。 html

建立无疟疾的世界——快速诊断疟疾程序,为你的健康保驾护航


小而致命的敌人 python

蚊子对世界一半以上的人口来讲不只仅是一种滋扰。传染病的传播,在必定程度上要归功于依赖蚊子的寄生虫"优雅而致命"的生命周期。例如,疟疾寄生虫已经进化出了特殊的形式——用于寄生蚊子和繁殖红细胞。利用蚊子的繁殖特性,疟疾寄生虫每一年感染2亿多人,每一年形成40多万人死亡! nginx

建立无疟疾的世界——快速诊断疟疾程序,为你的健康保驾护航


疟疾诊断的瓶颈 git

血液的显微镜检查是诊断疟疾的最著名的方法。将患者的血液涂抹在载玻片上并用对比剂染色,以便识别红细胞内的寄生虫。受过训练的临床医生在放大100倍的显微镜下检查20个显微镜视野,从5,000个细胞(世卫组织规程http://www.wpro.who.int/mvp/lab_quality/2096_oms_gmp_sop_09_rev1.pdf)中计算出含有寄生虫的红细胞。 github

建立无疟疾的世界——快速诊断疟疾程序,为你的健康保驾护航

疟疾诊断血涂片工做流程。 正则表达式

能够想象,手动计算5,000个细胞是一个缓慢的过程。这很容易给诊所工做人员带来负担,尤为是在疫情爆发的地方。所以,我想肯定图像分析和机器学习如何减轻临床医生的负担并帮助肯定患者的优先顺序。 后端

什么是F-beta!? 网络

在看似无寄生虫的样本中遗漏一个寄生虫多是致命的。在没有发现寄生虫的状况下,血液涂片和细胞计数每8小时重复一次。若是在三次重复后没有发现寄生虫,则患者痊愈。这样作是为了最大限度地减小可能致使死亡的误诊(假阴性)数量。所以,为了创建疟疾诊断的筛查工具,我须要尽可能减小假阴性。 dom

我想限制误诊数量以节省临床医生的时间。若是我创建了一种错误地预测大多数细胞被感染的工具,临床医生将不得不花费尽量多的时间来确认单细胞图像的预测,就像他们经过显微镜计数细胞同样。因此,我使用了F-beta评分(https://en.wikipedia.org/wiki/F1_score),即F2分数做为比较我研究ML分类的度量标准。 机器学习

欢迎使用开源数据

我找到了一个很好的数据集,它包含27,558个单细胞图像,其中有相同数量的感染和未感染细胞。这些细胞来自200名患者,每四名患者中就有三名患有疟疾。从显微镜视野的图像中分理出单细胞。关于这个数据集的最酷的事情之一是,图像是使用手机拍摄的!而不是 使用那种 附在显微镜上的花哨的相机。

全部图像均由专业幻灯片阅读器手动注释。更多有关信息,请经过你最喜好的互联网门户网站访问美国国家医学图书馆。(https://ceb.nlm.nih.gov/repositories/malaria-datasets/)

建立无疟疾的世界——快速诊断疟疾程序,为你的健康保驾护航

用于训练疟疾英雄的数据集的信息图表

可解释的工程特性

卷积神经网络以优秀的图像分类器著称。然而,在构建机器学习模型时的实用建议是从一个简单的模型开始(https://blog.insightdatascience.com/always-start-with-a-stupid-model-no-exceptions-3a22314b9aaa),而后根据模型性能快速迭代(https://blog.insightdatascience.com/how-to-deliver-on-machine-learning-projects-c8d82ce642b0)。所以,我首先着眼于工程视觉上的显着特性,利用一个不太复杂的模型,并测量特性与总体分类的相关性。

建立无疟疾的世界——快速诊断疟疾程序,为你的健康保驾护航

经过OpenCV的BLOB检测将染色的寄生虫检测为BLOB

我设计了可以指示细胞颜色、面积、凸度和圆度的特性。我还建立了一些特性来肯定寄生虫是否在细胞中可见。因为寄生虫的颜色与细胞质不一样,咱们有一个很好的二进制对象(BLOB)检测用例。BLOB检测识别强度与周围像素不一样的链接像素组。更多关于BLOB的内容在这里(https://www.learnopencv.com/blob-detection-using-opencv-python-c/)和这里(https://docs.opencv.org/trunk/d0/d7a/classcv_1_1SimpleBlobDetector.html)。最后,我在个人特性集中的每一个细胞中包含了检测到的BLOB的数量,由于在一个细胞中能够找到多个寄生虫。

创建模型

在工程特性以后,我保留了20%的数据用于测试,并对剩余的80%进行了3倍交叉验证。而后我比较了四个ML分类器并选择了一个F2指数为0.8的随机森林模型(https://www.datacamp.com/community/tutorials/random-forests-classifier-python)。

建立无疟疾的世界——快速诊断疟疾程序,为你的健康保驾护航


工做流程:从感染(蓝色轮廓)和未感染(橙色轮廓)单细胞图像中提取的特性,为模型训练、比较和选择提供数据。模型中最大的F2指数是0.80。

可是,我还想将它与CNN进行比较,由于我注意到BLOB探测器的表现并不如我想象的那么好。BLOB检测彷佛在细胞的边缘或周边作得不好。此外,有些寄生虫没有用造影剂完全染色,使得寄生虫和细胞之间的颜色差别对于BLOB检测来讲太细微了。

建立无疟疾的世界——快速诊断疟疾程序,为你的健康保驾护航


可解释模型错误分类的感染细胞(假阴性)。请注意,中间细胞彷佛在右下角含有染色不良的寄生虫,所以难以正确分类。

一些受感染的细胞难以定性。例如,如下面的图像为例。寄生虫不可见。然而,专家幻灯片阅读器认为细胞被感染了。幻灯片阅读器可能已经发现我已在图像中圈起来的细胞上的小白点。这些多是粘连旋钮,它们确实存在于受感染的细胞上。

建立无疟疾的世界——快速诊断疟疾程序,为你的健康保驾护航

感染细胞上的潜在粘连旋钮。

不管上述是不是粘连旋钮,都难以提取这些指示寄生感染的细微特性。所以,我继续实施卷积神经网络,而不是继续设计特性。

事情变得复杂

我从一个训练有素的卷积神经网络生成了特性:初始v3。初始v3在ImageNet图像上进行了训练,以对像幼犬和行人这样的物体进行分类,但不能肯定细胞是否受到寄生虫的攻击。所以,为了从新启动初始v3,我删除了分类层并为每一个图像生成了2048个特性。而后,我使用PCA和训练的ML分类器将维度下降到100个特性。通过3次交叉验证、测试和比较四种ML分类器进行训练后,我得到了F2指数为0.92的L2正则逻辑回归,这比随机森林模型好得多。显而易见的选择是使用改变用途的CNN做为疟疾英雄的后端。

建立无疟疾的世界——快速诊断疟疾程序,为你的健康保驾护航


简化的CNN管道:使用预先训练的CNN从单细胞图像中提取的特性用于模型训练,比较和选择。模型中最大的F2指标是0.92。

疟疾英雄在malariahero.org

为了部署疟疾英雄,我学会了使用Dash(https://plot.ly/products/dash/)。Dash教程很是适合你入门。在编排Dash,Flask,gunicorn,nginx,Docker和AWS以后,疟疾英雄"活了"下来。

为了使用网络应用程序,临床医生将上传来自患者的单个细胞的图像。每一个细胞都被归类为感染或未感染。三个正则表达式从每一个图像中提取元数据,包括患者ID号。而后将结果按患者分组并根据感染率分类。

建立无疟疾的世界——快速诊断疟疾程序,为你的健康保驾护航

疟疾英雄网络应用程序界面

若是你没有想要分类的单个单元格图像,请随时按下malariahero.org(http://malariahero.org/)上的演示按钮。这是我存储在AWS上的两名患者的单细胞图像,并对每张图像进行如上所述的分类,以演示输出结果。

重要结论

建立无疟疾的世界——快速诊断疟疾程序,为你的健康保驾护航

与疟疾英雄相比,估计手动计数细胞/寄生虫所花费的时间。

疟疾英雄节省时间。与手动计数不一样的是,临床医生能够捕获每一个视野的图像并上传具备自动计数和分类的细胞的图像。我曾经培养干细胞,经过显微镜计数细胞是这项工做的一部分。我估计使用疟疾英雄能够节省大约85%的临床医生时间。根据正常的9-5 M-F工做时间表,这意味着每个月能够多看1,400名患者。

产生的结果使临床医生可以根据感染率对患者进行优先排序,加快对病情加剧的患者的治疗。因为结果是根据感染率进行分类的,所以临床医生能够查看该列表并快速肯定患者的优先顺序。

建立无疟疾的世界——快速诊断疟疾程序,为你的健康保驾护航


一名医生,遇到可能大量感染的病人。疟疾英雄将帮助他快速诊断并优先考虑患者!

请记住,数据集中的图像是使用智能手机拍摄的。疟疾英雄展现了为流动医生或资源有限的诊所提供有价值且价格合理的工具的潜力。这将使流动医生可以访问偏远地区或进行家庭呼叫以上传图像并接收快速诊断。

此外,用显微镜诊断疟疾是一种在没有练习的状况下容易出错的技能。提供再训练有助于临床医生提升其分类能力,如此处所述(https://www.hindawi.com/journals/jpr/2017/9064917/)。能够想象,上传到疟疾英雄的图像能够与常常进行疟疾寄生虫检测的临床医生共享。以这种方式,更有经验的临床医生能够确认ML分类结果或向没有经验或不常常进行疟疾诊断的临床医生提供帮助。

代码

该项目的代码可在个人GitHub上公开得到。(https://github.com/caticoa3/malaria_hero)

来自 “ ITPUB博客 ” ,连接:http://blog.itpub.net/31545819/viewspace-2219354/,如需转载,请注明出处,不然将追究法律责任。

转载于:http://blog.itpub.net/31545819/viewspace-2219354/