Ariza部署了一个WebApp利用图像分析技术诊断患者是否患有疟疾

电子说

1.3w人已加入

描述

编者按:机器学习本质上是门工程学,把实验室里的算法、技术带入实际应用,这是很多科研人员、数据科学家的梦想。美国湾区有一个培训机构insight,它专门招收名校PhD,通过短期强化课程把初出茅庐的学生培养成符合企业需求的数据工作者,而在这个过程中,这些接收培训的学生也留下了一些非常有价值的应用。

本文介绍的Carlos Atico Ariza是2018年秋季的insight health研究员,在加入insight之前,他在一家公司担任数据科学顾问,负责构建端到端机器学习解决方案,比如无需人为监督的异常检测系统。虽然从事的是数据方面的工作,但Ariza在大学获得的学位是化学和生物工程博士,他一直想为医学领域作出贡献。

在insight培训期间,Ariza部署了一个WebApp,能利用图像分析技术诊断患者是否患有疟疾,并列出治疗优先等级。这个应用成功让临床医生的疟疾诊断工作量降低了85%。

微小而致命的敌人

对世界上超过半数的人来说,蚊子远不仅仅是一种滋扰:除了会引发皮肤瘙痒、敏感和失眠,它们也是疟疾、登革热等疾病的传播媒介。以疟疾为例,这是一种由疟原虫引起传染病,当感染子孢子经蚊虫叮咬进入人体血液后,它们会在肝细胞内进行裂体增殖,然后释入血液感染红细胞……借助蚊子强大的繁殖能力,2015年,全球已经有2亿多人新感染疟疾,每年因此死亡的人数超过40万!

疟疾诊断的瓶颈

在诸多疟疾诊断方法中,镜检法是许多医院的支柱,它的具体流程是先把患者血液涂抹在载玻片上,用造影剂染色以区分血红细胞内的寄生虫,然后经专业训练的临床医生再在100倍的显微镜下,从5000个细胞里一个个计数包含寄生虫的血红细胞数(WHO方案)。

厚血涂片制作流程

可以想象,手动计数5000个细胞绝对会是个缓慢的过程,这对医疗人员来说也是个沉重的负担,尤其是在疟疾爆发的地区。面对这种情况,Ariza认为图像分析和机器学习会有很大的应用前景。

什么是F-beta

考虑到医疗领域对检测准确率的严格要求,如果机器要自动化疟疾诊断过程,它绝不能从看似不含寄生虫的样本中遗漏哪怕一个寄生虫。为了降低误诊(假阴性)人数,Ariza希望模型在输出最终结果前,能重复进行三次检查:如果第一遍没发现,每隔8小时再采集一份厚血涂片并计数细胞数;如果三次都没发现寄生虫,则判定患者未受感染。

现在,这个任务就有了一个很直接的目标:减少假阴性。

事实上,假阴性不止能被作为降低误诊率的一个度量,它也能充当监督机器的指标。试想一下,如果我们训练了一个模型,它在实际进行图像分析时准确率奇低,这时医生就不得不需要抽更多时间来手动检查机器预测结果。在机器学习领域,我们有一些能评估分类器分类性能优劣的指标,这里我们先回顾两个概念:

精确率(Precision):被分类器判定为正类的样本中,真正属于正类样本的比例

召回率(Recall):被分类器正确判定为正类的样本数占正类样本总数的比例

精确率越高,召回率越低;反之,召回率越高,精确率越低。而平衡精确率和召回率的指标就是F-beta(Fβ)。这里β的取值意味着两者在分类器性能评估中的相对重要性,在疟疾诊断这个问题中,Ariza设β=2,即最小化假阴性的重要性是假阳性的2倍。

细胞开源数据

这个WebApp能成功的关键是Ariza幸运地找到了一个优质数据集,里面包含27,558幅经医学专家手动注释的单细胞图像,感染的/未感染的各占一半。这些细胞来自200名患者,每四名患者中有三名患有疟疾。图像都分割自显微镜视野原始图像,而且都是手机拍摄,没有用需要连接到显微镜的特制相机。

数据集地址:ceb.nlm.nih.gov/repositories/malaria-datasets/

可解释的特征工程

有了任务目标,有了数据集,之后就是大家常常忽视的特征工程环节。提到构建图像分类器,每一个学过机器学习的人都知道CNN是最好的。但是在实际应用中,构建模型的正确做法是先从一个简单的模型开始,然后根据模型性能快速迭代。

所以Ariza首先做的是着眼于视觉上的显着特征,用一个简单模型测量特征与整体分类的相关性。

利用OpenCV API提取Blob特征:染色的寄生虫为Blob

他设计了一系列能指示细胞颜色、面积、凸度和圆度的特征,还创建了一些用来确定寄生虫是否在细胞中可见的特征。由于寄生虫的颜色和细胞质不一样,这时它们可以被看作是图像中的Blob。由于一个细胞内可能有多个寄生虫,每个细胞包含的Blob数可以被记入特征集。

所谓Blob,指的是图像中的一组连接像素,它们共享一些共同属性(例如灰度值)。OpenCV提供了一种检测Blob的便捷方法,能按颜色、大小和形状过滤我们想要的Blob类型,只需设置相应参数。

构建模型

完成特征工程后,Ariza保留了20%的数据用于测试,并对剩余的80%进行了3折交叉验证。之后,他又比较了四个机器学习分类器,从中选了一个F2得分为0.8的随机森林模型。

流程:从感染(蓝)和未感染(橙)单细胞图像中提取特征—训练模型—比较模型—选择

但这不是最终结果。之前我们提到了,CNN模型在图像分类上的性能是最好的。Blob检测虽然操作方便,但性能却很一般,如下图所示,它在细胞边缘和周边位置表现很差。再加有些寄生虫可能没有被造影剂彻底染色,这时它们和细胞的颜色差异微乎其微,会影响分类器的输出结果。

被模型错误分类的感染细胞(假阴性),其中中间细胞的右下角有一个未被彻底染色的寄生虫

此外,一些受感染的细胞在图像上本身就难以表征。比如下面这幅图,在人类专家眼里,左侧这个细胞很可能被感染了,因为上面有很多奇怪的白色突起(蓝圈),它们可能是感染细胞上才有的黏连结节(knob)。

但无论是不是黏连结节,当前这个简单分类器都难以提取这些指示寄生感染的微妙特征。于是Ariza放弃继续手动添加特征,转而用CNN生成特征。

让事情变得更复杂

他选取的CNN是Inception v3。我们都知道,初始Inception v3已经在ImageNet数据集上经过训练,能分辨什么是人,什么是狗,但它肯定没法分类疟疾感染细胞。为了进行重新设计,Ariza删除了分类层,为每个图像生成了2048个特征,之后又用PCA把特征降维到100个。在经过3折交叉验证训练、测试和比较四种ML分类器后,他最后得到了一个F2得分为0.92的logistic regression分类器(L2正则)。这相比初代的随机森林模型显然是个巨大进步,而性能提升的关键就是用CNN做后端。

把CNN提取的图像特征用于模型训练

把模型变成WebApp

最后就是模型的部署——Ariza把它称为“疟疾英雄”。这个WebApp的潜在用户是临床医生和患者,所以当他们上传单个细胞图像后,APP要返回每个细胞被归类为感染或未感染的结果。我们可以用三个正则表达式从每个图像中提取元数据,包括患者ID号,然后将结果按患者分组并根据感染率分类。

“疟疾英雄”界面

根据Ariza的个人体验(在校期间培养干细胞时的数细胞经验),“疟疾英雄”可以在诊断疟疾时,为临床医生节省85%的诊断用时。这意味着按照朝九晚五的工作时长,每个医生每月可以多接诊1400名患者。

手动、自动速度对比

由于结果是根据感染率进行分类的,模型产生的结果也能帮助临床医生根据感染率对患者进行优先排序,加快对病情加重的患者的治疗。

考虑到疟疾多发地都是经济欠发达区域,优质医疗资源非常受限,而“疟疾英雄”使用的数据集图像都是手机拍摄的,这个APP其实也为“移动问诊”提供了可能性。只要临床医生能拍摄足够清晰的单细胞图像,他就能随时随地高效诊断。同时,一些新临床医生也能利用模型的结果,进一步提高自己的镜检水平。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分