如何使用Keras和tfjs构建血细胞分类模型?

点击上方关注,All in AI中国

作者:Narasimha Prasanna HN

人工智能确实是一个游戏规则的主要改变者。人工智能的应用是十分广泛的,特别是在医疗领域的应用范围。先进的人工智能工具可以帮助医生和实验室技术人员更准确地诊断疾病,例如尼日利亚的医生可以使用这种工具从血液样本中识别出一种以前对其一无所知的疾病,这有助于他们更好地了解这种疾病,可以通过更快的方式进行治疗,这是人工智能民主化的一个优势,因为人工智能模型和工具可以在全世界范围内使用,尼日利亚的医生可以使用麻省理工学院的研究学者或世界上其他知名大学正在使用的相同的工具和技术。

如何使用Keras和tfjs构建血细胞分类模型?

机器学习的主要问题:

机器学习是当今人工智能发展的主要因素。而民主化人工智能意味着建立一个可以允许任何人在世界各地使用相同的技术建立强大工具的基础设施。而可能阻止任何人构建人工智能的两个主要问题是计算能力和训练数据集不可用。但这些问题正在以有趣的方式解决,其方式如下:

•Kaggle(数据集的家园):数据集的不可用性是主要问题之一,但是Kaggle是人们可以创建数据集,并托管它们以使其可供其他人使用的最佳位置,人们使用这些工具构建了令人惊奇的东西。

•谷歌合作实验室:谷歌合作实验室是机器学习的主要驱动力,允许任何拥有谷歌帐户的人访问GPU。如果没有这些GPU,任何人都无法训练需要大量计算的机器学习模型。

血细胞数据集

数据集对于数据科学家来说就像金矿一样宝贵,如果数据集可用于特定问题,它可以减少工程团队所需的大量工作,因为不需要开发基础设施来收集和存储数据。几个月前我在开发这个系统时,Kaggle帮我获得了很多数据集。这是我在Kaggle上找到的数据集,感谢Paul Mooney提供的这个数据集。

数据集结构:数据集包含12,500个血细胞增强图像。数据集由4个类组成,如下图所示:

如何使用Keras和tfjs构建血细胞分类模型?

血细胞数据集的分类

每个类包含3000个图像。该图显示了每个类别的示例图像:

如何使用Keras和tfjs构建血细胞分类模型?

来自所有类的示例图像

我将每个图像的大小减小到(80×80×3),以便更容易训练。

Kaggle要求用户在下载数据集之前登录,因为我们使用的是colab,不需要在本地计算机上下载数据集,而是将其拉到我们的google colab实例。

使用谷歌合作实验室

简单来说,谷歌合作实验室提供了一个基于云计算的python记事本,其虚拟实例与GPU运行时相关联,谷歌colab的GPU运行时由NVIDIA k-80驱动,这是一款功能强大的GPU,价格昂贵。但是合作实验室允许我们免费使用GPU而无需支付费用。其实例的最长时间为12小时,在12小时之后实例将被销毁,新的实例将被创建,因此我们只能执行那些持续时间不超过12小时的计算。让我们看看如何使用colab来训练我们的神经网络。

使用Kaggle进行身份验证:

Kaggle CLI允许用户下载数据集并将代码/记事本提交给竞赛。注册kaggle后,用户可以下载包含所有凭据的kaggle.json文件,kaggle CLI使用这些凭据进行授权。

•创建一个新单元格,并创建一个名为.kaggle的隐藏目录,使用命令

如何使用Keras和tfjs构建血细胞分类模型?

•使用pip安装Kaggle CLI:在新单元格中 –

如何使用Keras和tfjs构建血细胞分类模型?

如何使用Keras和tfjs构建血细胞分类模型?

•下载数据集:

如何使用Keras和tfjs构建血细胞分类模型?

如何使用Keras和tfjs构建血细胞分类模型?

•确保下载的数据集中存在所有目录

如何使用Keras和tfjs构建血细胞分类模型?

•应该看到3个目录:TEST,TEST_SIMPLE和TRAIN

•目录TRAIN包含训练图像,我们将使用此目录训练图像。

预处理:

我们需要将图像加载为numpy数组,并将其提供给我们正在训练的神经网络。我们将使用Keras构建神经网络,Keras提供了一个内置的ImageDataGenerator,它可以处理大多数预处理任务。

我们导入开发模型所需的一些对象:

如何使用Keras和tfjs构建血细胞分类模型?

keras.preprocessing提供处理各种类型数据集所需的方法和对象。从图像模块我们创建一个具有所有必需配置的ImageDataGenerator。

如何使用Keras和tfjs构建血细胞分类模型?

如上所述,训练数据存在于`dataset2-master/ images/TRAIN目录中,我们提供ImageDataGenerator的这条路径,以便我们所有的配置和扩充都应用于训练图像。

如何使用Keras和tfjs构建血细胞分类模型?

这就是预处理,用户可以调整这些参数,通过降低或增加图像增强的效果来更好地适应,总有一个改进的余地。

卷积神经网络(CNN)简介:

卷积神经网络(CNN)是一种神经网络,它包含一组卷积层和一个连接到它的前馈网络。卷积运算并不是一种新方法,多年来它一直用于图像处理。卷积运算的主要作用是从图像中提取信息,换句话说,它们可用于提取图像的重要特征,如果已知所谓的滤波值,则任何人都无法识别任何图像的最佳滤波值,因为我们使用卷积和神经网络,梯度下降将自动优化滤波值以提取图像的最重要特征。Andrew Ng的课程deeplearning.ai帮助用户更好地理解这些网络的工作。而这超出了本文的范围。

我们的卷积神经网络:

此任务必须使用卷积神经网络(CNN),因为简单的前馈网络无法了解数据集的每个类中存在的唯一功能。我们使用的CNN的架构如下所示:

如何使用Keras和tfjs构建血细胞分类模型?

神经网络结构

我创建了一个函数模型(),它返回一个顺序模型,如下所示:

如何使用Keras和tfjs构建血细胞分类模型?

最后我们的训练模型如图所示:

如何使用Keras和tfjs构建血细胞分类模型?

该模型经过30个周期的训练,获得了92.67%的准确度,这是一个很好的准确性,用户可以添加更多层或执行超参数调整以提高准确性。

部署模型:

一旦完成培训,我们需要将模型部署到生产中,以便每个人都可以使用它。有多种策略可用于部署机器学习系统。我想在客户端机器上运行整个推理,所以我开始构建一个可以这样做的Web应用程序。

设置先决条件:

我们需要以下要求来构建客户端应用程序,该应用程序具有以下架构:

如何使用Keras和tfjs构建血细胞分类模型?

应用程序结构安装节点和npm并设置环境,按相同顺序安装以下依赖选项:

如何使用Keras和tfjs构建血细胞分类模型?

•模型服务器:这是一个express.js REST端点,客户端可以通过发送REST GET请求来请求模型文件。(在服务器端)

如何使用Keras和tfjs构建血细胞分类模型?

•模型存储:我们需要创建一个与tfjs兼容的模型,tensorflow提供了一个名为tensorflowjs的工具,它是一个包含实用程序的python工具包,我们可以使用以下命令来安装它:pip install tensorflowjs

完成后,我们可以使用tensorflowjs_converter使用以下命令将模型转换为tfjs格式:

转换后,它将创建一组称为分片的文件,通过基于图层分割模型获得分片,每个分片包含特定图层的权重。使用分片非常有用,因为每个分片可以存储在不同的地方,并且可以在需要时下载,因此我们可以为机器外学习模型构建分布式存储。model.json当然是包含每个分片信息的文件。如果我们更改了分片的目录,我们可以修改此文件。在API调用中,我们只将model.json文件发送到客户端,tfjs将自动获取每个分片以在客户端机器上组装模型,即浏览器。

最后一部分:在客户端开发推理引擎

在本节中,不会对用户界面的设计强调太多,相反将强调推理部分,即如何使用我们安装的tfjs运行推理。并转到react app目录。

•创建模型容器类:首先为模型创建了一个包装类。此类的实例表示可以进行推理的模型。这个模型类的代码是可以理解的。

•推理功能:定义了一个可以获取模型对象和输入图像源的函数,输入源可以是HTML img,也可以是URL或图像的字节流。

代码如下所示:

如何使用Keras和tfjs构建血细胞分类模型?

如何使用Keras和tfjs构建血细胞分类模型?

•初始化模型对象:我们现在必须创建可以包含推理模型的模型对象。

如何使用Keras和tfjs构建血细胞分类模型?

•运行推理:一旦我们有了一个模型对象,我们就可以随时运行推理。根据设计的用户界面,只要用户点击预测按钮,就应该执行推理。因此,运行预测的React组件部分如下所示:

如何使用Keras和tfjs构建血细胞分类模型?

结论

这个项目真的很棒,我学会了如何使用谷歌colab在云平台上训练机器学习模型,我还学会了如何部署机器学习模型进行制作。

这是一个开源项目,随时可以进行更改:

REPO URL:https://github.com/Narasimha1997/BloodCell-Identification-tfjs-client

如何使用Keras和tfjs构建血细胞分类模型?

相关推荐