使用Python+OpenCV+Tensorflow+Flask实现检测X光图像中的COVID-19(新冠病毒)

免责声明

本研究是为X光图像中COVID-19的自动检测而开发的,完全是为了教育目的。由于COVID-19没有经过专业或学术评估,最终的应用并不打算成为一个准确的用于诊断人类的COVID-19诊断系统。

介绍

Covid-19是由一种病毒(SARS-CoV-2冠状病毒)引起的大流行性疾病,已经感染了数百万人,在几个月内造成数十万人死亡。

据世界卫生组织(WHO)称,大多数COVID-19患者(约80%)可能无症状,约20%的患者可能因为呼吸困难而需要住院治疗。在这些病例中,大约5%可能需要支持来治疗呼吸衰竭(通气支持),这种情况可能会使重症监护设施崩溃。抗击这一流行病的关键是快速检测病毒携带者的方法。

冠状病毒

冠状病毒是引起呼吸道感染的病毒家族。这种新的冠状病毒病原体是在中国登记病例后于1919年底发现,它会导致一种名为冠状病毒(COVID-19)的疾病。

1937年首次分离出冠状病毒,然而,直到1965年,这种病毒才被描述为冠状病毒,因为它在显微镜下的轮廓看起来像一个树冠。在下面的视频中,你可以看到SARS-CoV-2病毒的原子级三维模型:

X光

近年来,基于计算机断层扫描(CT)的机器学习在COVID-19诊断中的应用取得了一些有希望的成果。尽管这些方法取得了成功,但事实仍然是,COVID-19传播在各种规模的社区。

X光机更便宜、更简单、操作更快,因此比CT更适合在更贫困或更偏远地区工作的医疗专业人员。

目标

对抗Covid-19的一个重大挑战是检测病毒在人体内的存在,因此本项目的目标是使用扫描的胸部X光图像自动检测肺炎患者(甚至无症状或非病人)中Covid-19的病毒。这些图像经过预处理,用于卷积神经网络(CNN)模型的训练。

CNN类型的网络通常需要一个广泛的数据集才能正常工作,但是,在这个项目中,应用了一种称为“迁移学习”的技术,在数据集很小的情况下非常有用(例如Covid-19中患者的图像)。

目的是开发两种分类模型:

  1. Covid-19的检测与胸片检测正常的比较

  2. Covid-19的检测与肺炎患者检测的比较

按冠状病毒相关论文定义的,所有类型的肺炎(COVID-19病毒引起的除外)仅被认为是“肺炎”,并用Pneumo标签(肺炎)分类。

我们使用TensorFlow 2.0的模型、工具、库和资源,这是一个开源平台,用于机器学习,或者更准确地说,用于深度学习。最后在Flask中开发了一个web应用程序(web app),用于在接近现实的情况下进行测试。

下图为我们提供了最终应用程序如何工作的基本概念:

X光扫描胸部图像(User_A.png),应用程序将图像存储在web应用程序的计算机上,决定图像是否属于受病毒污染的人(模型预测:[阳性]或[阴性])。在这两种情况下,应用程序都会输出预测的准确性(模型准确度:X%)。

为了避免两者都出错,将向用户显示原始文件的名称及其图像。图像的新副本存储在本地,其名称添加一个预测标签,并且加上准确度。

这项工作分为四个部分:

  1. 环境设置、数据清洗和准备

  2. 模型1训练(Covid/正常)

  3. 模型2训练(Covid/肺炎)

  4. Web应用的开发与测试

灵感

该项目的灵感来源于UFRRJ(里约热内卢联邦大学)开发的X光COVID-19项目。UFRRJ的XRayCovid-19是一个正在开发的项目,在诊断过程中使用人工智能辅助健康系统处理COVID-19。该工具的特点是易用、响应时间快和结果有效性高,我希望将这些特点扩展到本教程第4部分开发的Web应用程序中。下面是诊断结果之一的打印屏幕(使用了Covid-19数据集1图像之一):

乔杜里等人在论文中阐述了该大学开展这项工作的科学依据,论文地址:https://arxiv.org/abs/2003.13145

另一项工作是Chester,论文:https://arxiv.org/pdf/1901.11210.pdf,由蒙特利尔大学的研究人员开发。Chester是一个免费且简单的原型,医疗专业人员可以使用它们来了解深度学习工具的实际情况,以帮助诊断胸部X光。该系统被设计为辅助工具,用户可在其中处理图像以确认或协助诊断。

当前版本的 Chester(2.0)使用DenseNet-121型卷积网络训练了超过10.6万张图像。该网络应用程序未检测到Covid-19,这是研究人员对应用程序未来版本的目标之一。下面是诊断结果之一的截图(使用了Covid-19数据集的图像)

在下面的链接中,你可以访问Chester,甚至下载应用程序供脱机使用:https://mlmed.org/tools/xray/。

感谢

这项工作最初是根据Adrian Rosebrock博士发表的优秀教程开发的,我强烈建议你深入阅读,此外,我要感谢Nell Trevor,他根据罗斯布鲁克博士的工作,进一步提出了如何测试结果模型的想法。

第1部分-环境设置和数据准备

数据集

训练模型以从图像中检测任何类型信息的第一个挑战是要使用的数据量。原则上,可公开获取的图像数量越多越好,但是请记住,这种流行病只有几个月的历史,所以对于Covid-19检测项目来说,情况并非如此)

但是,Hall等人的研究,论文:https://arxiv.org/pdf/2004.02060.pdf,证明使用迁移学习技术仅用几百幅图像就可以获得令人鼓舞的结果。

如引言所述,因为训练两个模型,所以需要3组数据:

  1. 确认Covid-19的X光图像集

  2. 常规(“正常”)患者的X光图像集

  3. 一组显示肺炎但不是由Covid-19引起的X光图像

为此,将下载两个数据集:

数据集1:COVID-19的图像集

Joseph Paul Cohen和Paul Morrison和Lan Dao COVID-19图像数据收集,arXiv: 2003.11597, 2020

这是一个公开的COVID-19阳性、疑似患者和其他病毒性和细菌性肺炎(MERS、SARS和ARDS)的X光和ct图像数据集。

数据是从公共来源收集的,也可以从医院和医生处间接收集(项目由蒙特利尔大学伦理委员会批准,CERSES-20-058-D)。以下GitHub存储库中提供了所有图像和数据:https://github.com/ieee8023/covid-chestxray-dataset。

数据集2:肺炎和正常人的胸片

论文:Kermany, Daniel; Zhang, Kang; Goldbaum, Michael (2018), “Labeled Optical Coherence Tomography (OCT) and Chest X-Ray Images for Classification”

通过深度学习过程,将一组经验证的图像(CT和胸片)归类为正常和某些肺炎类型。图像分为训练集和独立的患者测试集,数据可在网站上获得:https://data.mendeley.com/datasets/rscbjbr9sj/2

胸片的类型

从数据集中,可以找到三种类型的图像,PA、AP和Lateral(L)。L的很明显,但X光的AP和PA视图有什么区别?简单地说,在拍X光片的过程中,当X光片从身体的后部传到前部时,称为PA(后-前)视图,在AP视图中,方向相反。

通常,X光片是在AP视图中拍摄的,但是一个重要的例外就是胸部X光片,在这种情况下,最好在查看PA而不是AP,但如果病人病得很重,不能保持姿势,可以拍AP型胸片。

由于绝大多数胸部X光片都是PA型视图,所以这是用于训练模型的视图选择类型。

定义用于训练DL模型的环境

理想的做法是从一个新的Python环境开始,为此,使用Terminal定义一个工作目录(例如:X-Ray_Covid_development),然后在那里用Python创建一个环境(例如:TF_2_Py_3_7):

mkdir X-Ray_Covid_developmentcd X-Ray_Covid_developmentconda create — name TF_2_Py_3_7 python=3.7 -yconda activate TF_2_Py_3_7

进入环境后,安装TensorFlow 2.0:

pip install — upgrade pippip install tensorflow

从这里开始,安装训练模型所需的其他库。例如:

conda install -c anaconda numpyconda install -c anaconda pandasconda install -c anaconda scikit-learnconda install -c conda-forge matplotlibconda install -c anaconda pillowconda install -c conda-forge opencvconda install -c conda-forge imutils

创建必要的子目录:

notebooks10_dataset —            |_ covid  [here goes the dataset for training model 1]           |_ normal [here goes the dataset for training model 1]20_dataset —            |_ covid  [here goes the dataset for training model 2]           |_ pneumo [here goes the dataset for training model 2]input -       |_ 10_Covid_Imagens _       |                   |_ [metadata.csv goes here]      |                   |_ images [Covid-19 images go here]      |_ 20_Chest_Xray -                       |_ test _                               |_ NORMAL    [images go here]                               |_ PNEUMONIA [images go here]                       |_ train _                                |_ NORMAL    [images go here]                                |_ PNEUMONIA [images go here]modeldataset_validation _                   |_ covid_validation          [images go here]                   |_ non_covidcovid_validation [images go here]                   |_ normal_validation         [images go here]
数据下载

下载数据集1(Covid-19),并将metadata.csv文件保存在/input/10_Covid_Images/和/input/10_Covid_Images/Images/下。

下载数据集2(肺炎和正常),并将图像保存在/input/20_Chest_Xray/下(保持原始测试和训练结构)。

第2部分-模型1-Covid/正常

数据准备
  • 从GitHub下载Notebook:https://github.com/Mjrovai/covid19Xray/blob/master/10_X-Ray_Covid_development/notebooks/10_Xray_Normal_Covid19_Model_1_Training_Tests.ipynb,将其存储在 subdirectory /notebooks中。

  • 进入Notebook后,导入库并运行支持函数。

构建Covid标签数据集

从输入数据集(/input/10_Covid_Images/)创建用于训练模型1的数据集,该数据集将用于Covid和normal(正常)标签定义的图像分类。

input_dataset_path = ‘../input/10_Covid_images’

metadata.csv文件将提供有关/images/文件中的图像信息。

csvPath = os.path.sep.join([input_dataset_path, “metadata.csv”])df = pd.read_csv(csvPath)df.shape

metadat.csv文件有354行28列,这意味着在subdirectory /notebooks中有354个X光图像。让我们分析它的一些列,了解这些图像的更多细节。

通过df.modality,共有310张X光图像和44张CT图像。CT图像我们丢弃。

COVID-19          235Streptococcus      17SARS               16Pneumocystis       15COVID-19, ARDS     12E.Coli              4ARDS                4No Finding          2Chlamydophila       2Legionella          2Klebsiella          1

从可视化角度看,COVID-19的235张确认图像,我们有:

PA               142AP                39AP Supine         33L                 20AP semi erect      1

如引言中所述,只有142张PA型图像(后-前)用于模型训练,因为它们是胸片中最常见的图像(最终数据框:xray_cv)。

xray_cv.patiendid”列显示,这142张照片属于96个病人,这意味着在某些情况下,同一个病人拍摄了多张X光片。由于所有图像都用于训练(我们对图像的内容感兴趣),因此不考虑此信息。

根据xray_cv.date,2020年3月拍摄的最新照片有8张,这些图像被分离在一个列表中,从模型训练中删除,因此以后这将用作最终模型的验证。


  • 15
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值