加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

使用深度学习检测疟疾

发布时间:2019-05-25 06:31:16 所属栏目:建站 来源:Dipanjan (dj) Sarkar
导读:人工智能结合开源硬件工具能够提升严重传染病疟疾的诊断。 人工智能(AI)和开源工具、技术和框架是促进社会进步的强有力的结合。健康就是财富可能有点陈词滥调,但它却是非常准确的!在本篇文章,我们将测试 AI 是如何与低成本、有效、精确的开源深度学习

Rajaraman, et al. 的论文在一个数据集上利用六个预训练模型在检测疟疾对比无感染样本获取到令人吃惊的 95.9% 的准确率。我们的重点是从头开始尝试一些简单的 CNN 模型和用一个预训练的训练模型使用迁移学习来查看我们能够从相同的数据集中得到什么。我们将使用开源工具和框架,包括 Python 和 TensorFlow,来构建我们的模型。

数据集

我们分析的数据来自 Lister Hill 国家生物医学交流中心(LHNCBC)的研究人员,该中心是国家医学图书馆(NLM)的一部分,他们细心收集和标记了公开可用的健康和受感染的血涂片图像的数据集。这些研究者已经开发了一个运行在 Android 智能手机的疟疾检测手机应用,连接到一个传统的光学显微镜。它们使用吉姆萨染液将 150 个受恶性疟原虫感染的和 50 个健康病人的薄血涂片染色,这些薄血涂片是在孟加拉的吉大港医学院附属医院收集和照相的。使用智能手机的内置相机获取每个显微镜视窗内的图像。这些图片由在泰国曼谷的马希多-牛津热带医学研究所的一个专家使用幻灯片阅读器标记的。

让我们简要地查看一下数据集的结构。首先,我将安装一些基础的依赖(基于使用的操作系统)。

使用深度学习检测疟疾

Installing dependencies

我使用的是云上的带有一个 GPU 的基于 Debian 的操作系统,这样我能更快的运行我的模型。为了查看目录结构,我们必须使用 sudo apt install tree 安装 tree 及其依赖(如果我们没有安装的话)。

使用深度学习检测疟疾

Installing the tree dependency

我们有两个文件夹包含血细胞的图像,包括受感染的和健康的。我们通过输入可以获取关于图像总数更多的细节:

  1. import os
  2. import glob
  3.  
  4. base_dir = os.path.join('./cell_images')
  5. infected_dir = os.path.join(base_dir,'Parasitized')
  6. healthy_dir = os.path.join(base_dir,'Uninfected')
  7.  
  8. infected_files = glob.glob(infected_dir+'/*.png')
  9. healthy_files = glob.glob(healthy_dir+'/*.png')
  10. len(infected_files), len(healthy_files)
  11.  
  12. # Output
  13. (13779, 13779)

看起来我们有一个平衡的数据集,包含 13,779 张疟疾的和 13,779 张非疟疾的(健康的)血细胞图像。让我们根据这些构建数据帧,我们将用这些数据帧来构建我们的数据集。

  1. import numpy as np
  2. import pandas as pd
  3.  
  4. np.random.seed(42)
  5.  
  6. files_df = pd.DataFrame({
  7. 'filename': infected_files + healthy_files,
  8. 'label': ['malaria'] * len(infected_files) + ['healthy'] * len(healthy_files)
  9. }).sample(frac=1, random_state=42).reset_index(drop=True)
  10.  
  11. files_df.head()

使用深度学习检测疟疾

Datasets

构建和了解图像数据集

为了构建深度学习模型,我们需要训练数据,但是我们还需要使用不可见的数据测试模型的性能。相应的,我们将使用 60:10:30 的比例来划分用于训练、验证和测试的数据集。我们将在训练期间应用训练和验证数据集,并用测试数据集来检查模型的性能。

  1. from sklearn.model_selection import train_test_split
  2. from collections import Counter
  3.  
  4. train_files, test_files, train_labels, test_labels = train_test_split(files_df['filename'].values,
  5. files_df['label'].values,
  6. test_size=0.3, random_state=42)
  7. train_files, val_files, train_labels, val_labels = train_test_split(train_files,
  8. train_labels,
  9. test_size=0.1, random_state=42)
  10.  
  11. print(train_files.shape, val_files.shape, test_files.shape)
  12. print('Train:', Counter(train_labels), 'nVal:', Counter(val_labels), 'nTest:', Counter(test_labels))
  13.  
  14. # Output
  15. (17361,) (1929,) (8268,)
  16. Train: Counter({'healthy': 8734, 'malaria': 8627})
  17. Val: Counter({'healthy': 970, 'malaria': 959})
  18. Test: Counter({'malaria': 4193, 'healthy': 4075})

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读