技术开发 频道

医疗保健案例研究:怎样用深度学习检测疟疾?

  本文中,我们将集中讨论人工智能(AI)与流行的开源工具、技术和框架如何被用于发展和改善医疗行业。俗话说,健康就是财富。在这篇文章中,我们将探讨如何利用人工智能来检测一种致命的疾病--疟疾,以及如何建立一种低成本、有效和准确的开源解决方案。我们的目的有两个,了解致命疾病疟疾的动机和重要性以及深度学习在检测疟疾方面的有效性。

  本文主要讨论以下主题:

  此项目的动机

  疟疾检测方法

  疟疾检测的深度学习

  从头开始训练的卷积神经网络

  基于预训练模型的迁移学习

  本文不是为了夸大人工智能的地位,而是展示人工智能如何用低成本、有效和准确的开源解决方案来帮助疟疾的检测和诊断,并减少人工的复杂劳动。

  Python和TensorFlow构建开源深度学习解决方案

  由于Python和TensorFlow深度学习框架的强大功能,我们可以以此构建强大的、可扩展的深度学习解决方案。这些工具的另一个好处是开放的源代码是免费的,这使我们能够建立具有成本效益的解决方案,并被大家轻易采用和使用。

  动机

  疟疾是由疟原虫引起的一种致命的、传染性的由蚊虫传播的疾病,这些寄生虫由感染的雌性按蚊叮咬传播。共有有五种主要类型的疟疾。

  疟疾估计风险健康图(资料来源:Treated.com)

  很明显,疟疾在全球各地普遍流行,特别是在热带地区。本项目的动机是基于此疾病的性质和致命性。最初,如果被感染的蚊子叮咬,蚊子携带的寄生虫会进入你的血液,开始破坏携带氧气的红细胞。通常在蚊子叮咬后几天或数周内开始感到不适,疟疾的第一症状与流感或病毒相似。然而,这些致命的寄生虫可以生活在人身体内超过一年的时间。延误治疗时机可能引起并发症甚至导致死亡,尽早和准确地检测疟疾可以保命。

  世界卫生组织公布了几个关于疟疾的情况,据统计,世界上将近一半的人正面临着疟疾风险,每年有2亿以上的疟疾患病人员和约40万死于疟疾的人。所以,利用深度学习,使疟疾的检测和诊断迅速、简便和有效是非常有必要的。

  疟疾检测方法

  疟疾的检测和诊断有多种方法,本文简要介绍部分方法。这些检查包括但不限于厚和薄的血液涂片检查、聚合酶链反应(PCR)和快速诊断试验(RDT)。这里并没有详细介绍所有的方法,但后两种测试都是通常使用的方法,特别是在没有高质量显微镜的情况下。

  我们来看一个基于血液涂片的标准疟疾诊断工作流程

  疟疾检测的血液涂片工作流程

  根据《世界卫生组织议定书》的指导方针,这一程序包括在100倍放大率下对血液涂片进行深入检查。在此过程中,人们手工计算5000个细胞中含有寄生虫的红细胞。事实上,我们之前提到过的Rajaraman et. al.的论文,讨论的是相似的话题,本文引用了论文中的观点来使事情更清楚。

  厚血涂片有助于检测寄生虫的存在,而薄血涂片有助于识别引起感染的寄生虫的种类(美国疾病控制和预防中心,2012)。

  诊断的准确性在很大程度上依赖于人类的专业知识,并且可能受到观察者之间的差异、疾病流行但资源受限地区、大规模诊断等带来的负面影响(Mitiku, Mengistu & Gelaw, 2003)。

  采用聚合酶链反应(PCR)和快速诊断试验(RDT)等替代技术,然而,PCR分析的性能有限(Hommelsheim et al., 2014),

  RDT在疾病流行地区的成本效益较差(Hawkes, Katsuva & Masumbuko, 2009)。

  因此,疟疾检测绝对是一个复杂的手工过程,也许可以通过深度学习实现疟疾检测自动化。

  疟疾检测的深度学习

  由于血液涂片的常规人工诊断是一个复杂的手工过程,需要专业分类知识,并且要计数寄生和未感染细胞。如果世界各地的特定地区没有足够的专业知识,可能无法准确检测疟疾,还有可能会造成严重后果。在利用非常先进的(SOTA)图像处理和分析技术来进行疟疾监测和构建基于机器学习的分类模型方面已经取得了一些进展。然而,由于数据量太大和功能设计太耗时,这些模型是不可扩展的。

  深度学习模型,或者更具体地说,卷积神经网络(CNN)已被证明在各种计算机视觉任务中非常有效。假如您不了解CNN,可以通过本文更深入地了解CNN。简而言之,CNN模型中的关键层包括卷积层和池化层,如下图所示。

  典型的CNN结构(来源:Deepplearning.net)

  卷积层从数据中学习空间层次模式,这些模式也是平移不变的。因此他们能够学习图像的不同方面。例如,第一个卷积层将学习局部的模式,如边角;第二个卷积层将根据第一层的特征学习更大的模式。这使得CNNs可以自动化特性工程,并学习有效的特性,这些特性还可以很好地概括新的数据点。池化层有助于降低采样和降维。

  因此,CNN可以帮助我们实现自动化和可扩展的工程。此外,在模型的末尾插入密集层使我们能够执行图像分类等任务。使用像CNN这样的深度学习模型进行疟疾自动检测可能非常有效、低成本和可扩展,特别是随着迁移学习和预训练模型的出现,这些模型即使在数据源不足等限制条件下也能正常工作。

  Rajaraman等人的论文《预训练卷积神经网络作为特征提取器,用于改进薄血涂片图像中的寄生虫检测》显示,通过利用论文中提到的六个预训练模型,他们在检测疟疾和非感染样本时的准确率达到了95.9%。因此,我们的重点是尝试一些简单的CNN模型和使用迁移学习的预训练模型,看看我们在相同的数据集中得到的结果!我们将使用开源工具和框架如Python和TensorFlow来构建我们的模型。

  数据集详细信息

  让我们谈谈将在分析中使用的数据集。有研究人员在利斯特希尔国家生物医学传播中心(LHNCBC)仔细地收集和注释了健康和受感染的血液涂片图像数据集。

  事实上,他们已经开发了一款手机应用程序,该程序运行在一款Android智能手机上,并与传统的光学显微镜相连,在孟加拉国吉大港医学院医院收集了150例恶性疟原虫感染患者和50例健康患者的giemsa染色薄血涂片。这款智能手机的内置摄像头可以用微观视野拍摄幻灯片的图像。我们来检查一下数据集结构,首先根据所使用的操作系统安装一些基本的选项。

  我在云上使用基于Debian的系统,因为它有GPU,所以可以加速运行模型。如果没有树依赖选项话请先安装,以便我们可以查看目录结构。

  我们有两个文件夹,其中包含受感染和健康的细胞图像。 我们可以使用以下代码进一步了解图像总数。

  看起来我们有一个包含13779张疟疾和非疟疾(未感染)细胞图像的平衡数据集。让我们从中构建一个数据帧,这将在开始构建数据集时发挥作用。

  建立和探索图像数据集

  要构建深度学习模型,我们需要训练数据,但我们还需要测试模型在隐藏数据中的性能。分别使用60:10:30分割、验证和测试数据集。我们将在训练期间测试和验证数据集,并检查模型在测试数据集上的性能。

  显然,由于血涂片和细胞图像将根据、测试方法和拍摄照片的方向而变化,因此图像的尺寸有所不同。 所以需要收集部分训练数据集的摘要统计数据,以确定非常好的图像尺寸(注意不要接触测试数据集!)。

  应用并行处理来加速图像读取操作,并根据汇总统计,根据结果将每个图像调整为125x125像素,加载所有图像并将它们调整为固定尺寸。

  再次利用并行处理加速与图像加载和调整大小相关的计算。 最后,得到所需尺寸的图像张量,如前面的输出所示。接下来我们可以查看一些样本单元格图像,以了解这些数据是如何形成的。

  根据以上样本图像,我们可以注意到疟疾和健康细胞图像之间的一些细微差别。我们基本上会让深度学习模型尝试在模型训练中学习这些模式。在开始训练模型之前,需要进行一些基本的配置设置。

  我们修正了图像的尺寸、批量大小、年代和分类标签的编码。我们将使用TensorFlow 2.0的alpha版本进行深度学习模型训练。

  深度学习模型训练阶段

  在模型训练阶段,我们将建立几个深度学习模型,并根据训练数据对它们进行训练,并在验证数据上比较它们的性能。然后,我们将保存这些模型,并在模型评估阶段再次使用它们。

  模式1:CNN从零开始

  第一个疟疾检测模型将从零开始建立和训练一个基本的卷积神经网络(CNN)模型。首先需要对模型架构进行定义。

  在前面的代码架构上,我们的CNN模型有三个卷积和池化层,然后是两个密集层,为了正则化,中途退出。

  我们得到的验证准确率为95.6%,结果还不错。尽管我们的模型看起来过于拟合,但我们的训练准确率为99.9%。通过绘制训练和验证准确度的损耗曲线,我们可以对此有清晰的认识。

  基本CNN的学习曲线

  因此,我们可以看到,在第五阶段之后,情况似乎并没有改善很多。记得保存这个模型,以便接下来进行评估。

  model.save('basic_cnn.h5')

  深度迁移学习

  正如人类具有跨任务传递知识的固有能力一样,迁移学习使我们能够将以往学习任务中的知识应用到更新的、相关的任务中,在机器学习或深度学习的环境中也是如此。

  深度迁移学习的几点思考

  在本文中,我们的想法是,我们能否利用一个预先训练好的深度学习模型(它是在一个大数据集上训练的,比如ImageNet),通过在上下文中应用和传输疟疾检测的知识来解决疟疾检测的问题?

  我们将运用两种最流行的深度迁移学习策略。

  作为特征提取器的预训练模型

  预先训练与微调模式

  我们将使用由牛津大学视觉几何组(VGG)开发的预训练VGG-19深度学习模型进行实验。 VGG-19预训练模型是已经预先训练过的模型,它位于具有大量不同图像类别的大型数据集(ImageNet)上。所以该模型应该已经学习了一个强大的特征层次结构,这些特征也跟CNN模型学习的特征相关。 因此,该模型已经学习了超过一百万个图像特征,可以作为适合计算机视觉问题的新图像的良好特征提取器,用于疟疾检测。 让我们简要讨论一下VGG-19模型架构。

  认识VGG-19模型

  VGG-19模型是一个19层(卷积和完全连接)深度学习网络,建立在ImageNet数据库上,该数据库是为图像识别和分类而构建的。 这个模型由Karen Simonyan和Andrew Zisserman创建。VGG-19模型的体系结构如下图所示。

  VGG-19模型体系结构

  可以清楚地看到模型总共有16个卷积层,使用3 x 3卷积滤波器以及用于下采样的最大池层,并且每层中总共有两个完全连接的4096个单元的隐藏层,接着是1000个单元的密集层,其中 每个单元代表ImageNet数据库中的一个图像类别。不需要最后三层,因为我们将使用完全连接的密集层来预测疟疾。我们需要更关注前五个块,以便可以利用VGG模型作为有效的特征提取器。

  对于其中一个模型,我们将它作为一个简单的特征提取器,通过冻结所有五个卷积块来确保它们的权重不会在每个历元之后更新。对于最后一个模型,我们将对VGG模型应用微调,在这里解冻最后两个块(第4块和第5块),以便在训练自己的模型时,在每个epoch更新它们的权重。

  模型2:作为特征提取器的预训练模型

  为了建立这个模型,我们将利用TensorFlow加载VGG-19模型,并冻结卷积块,以便使用它作为图像特征提取器。并且需要在最后插入我们自己的密集层来执行分类任务。

  从前面的输出可以很明显地看出,模型中有很多层,我们将只使用VGG-19模型的冻结层作为特征提取器。可以使用以下代码来验证模型中有多少层是可训练的,以及在网络中共有多少层。

  现在,使用前面模型中类似配置和回调来训练模型。可以观察以下图表,图表显示了模型的准确性。

  冷冻预训练CNN的学习曲线

  这表明,这个模型并没有像基本的CNN模型那样过度拟合,性能也并不是真的更好,实际上比我们的基本CNN模型要差一些。保存这个模型,以便将来进行评估。

  model.save('vgg_frozen.h5')

  模型3:图像增强的精调预训练模型

  在最后一个模型中,我们将对预训练的VGG-19模型的最后两个块中出现的层的权重进行微调。除此之外,我们还将介绍图像增强的概念:从训练数据集中加载现有的图像,并对它们应用一些图像转换操作,例如旋转、剪切、平移、缩放等等,以生成现有图像的新版本。由于这些是随机变换的,所以我们不会每次都得到相同的图像。我们将利用tf.keras中名为ImageDataGenerator的程序。keras可以帮助我们创建形象增强器。

  除了缩放图像(这是必须的)之外,我们不对验证数据集应用任何转换,因为我们会用它来评估每个时期的模型性能。让我们来看一批图像增强转换的一些示例结果。

  样本增强图像

  在前面的输出中,您可以清楚地看到图像的细微变化。现在,我们将构建我们的深度学习模型,以确保VGG-19模型的最后两个模块是可训练的。

  我们在模型中降低了学习速度,因为我们不想在微调时对预先训练的层进行大的权重更新。这个模型的训练过程将略有不同,因为我们使用数据生成器和fit_generator(…)函数。

  这看起来是最好的模型,它的验证精度达到了96.5%。基于训练精度,我们的模型似乎没有第一个模型拟合得那么好。这可以通过下面的学习曲线来验证。

  微调预训练CNN的学习曲线

  保存这个模型,这样就可以在测试数据集上用它来评估模型了。

  model.save('vgg_finetuned.h5')

  这就完成了模型训练阶段,接下来在实际的测试数据集上测试以上模型的性能!

  深度学习模式性能评估阶段

  现在,我们通过对测试数据集中的数据进行预测,以此来评估刚刚在训练阶段构建的三个不同的模型,因为仅仅进行验证是不够的!我们还构建了一个实用程序模块model_evaluation_utils,用它来评估具有相关分类指标的深度学习模型的性能。第一步是扩展测试数据。

  下一步是加载之前保存深度学习模型,并对测试数据进行预测。

  最后一步是利用model_evaluation_utils模块,检查每个模型的性能与相关的分类指标。

  看起来,第三个模型在测试数据集中测试结果最好,在三个模型中的精确度达到96%,这是相当不错的。

  结语

  在本文中,我们研究了一个关于疟疾检测的医学成像案例研究。疟疾检测工作非常复杂,没有足够的专业人员也是非常严重的问题。利用人工智能技术构建开源软件可以使人类在检测疟疾方面达到最高精确度,也希望在医疗保健领域能更多地采用开源软件和人工智能,从而使人工智能够造福社会。

0
相关文章