前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法集锦(28)| 智能医疗 | 血液细胞分类算法

算法集锦(28)| 智能医疗 | 血液细胞分类算法

作者头像
用户7623498
发布2020-08-04 17:03:09
1.2K0
发布2020-08-04 17:03:09
举报

今天,你算法了没?

关注:九三智能控,每天学点AI算法

AI技术可以说是真正的规则改变者。AI在医疗领域的应用非常广泛,先进的AI工具可以帮助医生和研究人员更好的诊断疾病。比如,某位尼日利亚的医生就可以使用本算法对血液样本进行疾病检测,使其能更深入了解疾病,并找到更好的治疗方法。这就是AI技术的魅力所在!

此外,开发好的AI算法是世界通用的,MIT或其他研究机构开发的新工具和技术可以很快的被其他地区(比如尼日利亚)应用。

机器学习的主要问题

机器学习是现今AI技术的主战场。制约机器学习技术发展的两个主要问题是:算力数据来源。这两个问题现在有了一些可行的解决办法:

Kaggle: Kaggle解决了数据库来源的问题。Kaggle可以说是是当今最好的数据库平台,你可以在上面创建并发布数据库,供其他用户使用。人们利用Kaggle数据库实现了一些非常有用的成果。

Google co-lab:如果你有一个Google账号,那么你就可以免费的应用Google co-lab上的GPU开展机器学习研究了,这无疑是对机器学习发展的一大助益。否则,对于个人很难获得如此强大的算力。

血液细胞数据库

数据库对于数据科学家来说,就像金矿一般。一个针对特定问题的数据库,可以为研究团队提供非常大的帮助。因为我们不用再费力去搜集和存储数据了。

本算法所用数据库就来自Kaggle平台,共包括12500张增强的血液细胞图片。

数据库分为4个类别,每个类别包括约3000张图片。为了便于训练,我们将图片的大小缩减为80x80x3。

使用Google co-lab

通常Kaggle需要进行登录才能下载数据库。但如果我们使用co-lab的化,不需要将数据库下载到本地,而可以直接用co-lab进行调用。

Kaggle验证

通常,你可以利用Kaggle CLI 来下载数据库或提交比赛代码。当你注册Kaggle时,你可以下载Kaggle.json,该文件包含了Kaggle的所有凭证。Kaggle CLI就是利用这些凭证来进行验证的。具体方法如下:

(1)创建一个新单元(cell)以及一个名为.kaggle的隐藏文件夹

代码语言:javascript
复制
!mkdir .kaggle

(2)在新建单元中安装Kaggle CLI:

代码语言:javascript
复制
!pip install kaggle

(3)下载数据库:

代码语言:javascript
复制
!kaggle datasets download -d paulthimothymooney/blood-cells

(4)确认所有文件夹已被下载:

代码语言:javascript
复制
!ls dataset2-master/images

你可以看到3个文件夹:TEST, TEST_SIMPLE 和TRAIN。TRAIN文件夹中包含了说有训练用图片,我们就是利用这个文件夹进行训练。

前处理

我们需要将血液细胞图像作为numpy数组导入,并输入到神经网络中进行训练。本算法采用Keras创建神经网络,Keras可以提供ImageDataGenerator库,该库可以处理大多数的前处理任务。

代码语言:javascript
复制
from keras.models import Sequential
from keras.layers import Dense, Conv2D, Dropout, MaxPool2D, Flatten
from keras.preprocessing import image

keras.preprocessing 提供了处理各类数据库所必须的方法及对象,可以根据所需要求来创建ImageDataGenerator

代码语言:javascript
复制
generator = image.ImageDataGenerator(
        rescale = 1./255,
        featurewise_center=False,  # set input mean to 0 over the dataset
        samplewise_center=False,  # set each sample mean to 0
        featurewise_std_normalization=False,  # divide inputs by std of the dataset
        samplewise_std_normalization=False,  # divide each input by its std
        zca_whitening=False,  # apply ZCA whitening
        rotation_range=10,  # randomly rotate images in the range (degrees, 0 to 180)
        width_shift_range=0.1,  # randomly shift images horizontally (fraction of total width)
        height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)
        horizontal_flip=True,  # randomly flip images
        vertical_flip=False)

前面提到过,训练数据存储在"dataset2-master/images/TRAIN"文件夹中,我们将该路径提交给ImageDataGenerator。这样,就可以将所有配置和图像增强施加到训练图像上。

代码语言:javascript
复制
dataset = generator.flow_from_directory(
    shuffle = True,
    batch_size = 32,
    target_size = (80, 80),
    directory = 'dataset2-master/images/TRAIN'
)

以上就是全部的前处理方法,当然你可以通过调整参数来加强或减弱图像增强效果,通常增强方法都有很大的改进空间。

训练模型

本算法采用卷积神经网络(CNN)进行训练,模型框架如下所示。

训练模型通过以下代码进行调用:

代码语言:javascript
复制
def model():
    model = Sequential()
    model.add(Conv2D(80, (3,3), strides = (1, 1), activation = 'relu'))
    model.add(Conv2D(64, (3,3), strides = (1, 1), activation = 'relu', input_shape = (80, 80, 3)))
    model.add(MaxPool2D(pool_size = (2,2)))
    model.add(Conv2D(64, (3,3), strides = (1,1), activation = 'relu'))
    model.add(Dropout(0.25))
    model.add(Flatten())

    model.add(Dense(128, activation = 'relu'))
    model.add(Dropout(0.5))
    model.add(Dense(4, activation = 'softmax'))

    model.compile(loss = 'categorical_crossentropy', optimizer = 'adadelta', metrics = ['accuracy'])

    return model

最后,我们队模型进行训练:

代码语言:javascript
复制
nn = model()
nn.fit_generator(dataset, steps_per_epoch = None, epochs = 30, verbose = 1)
nn.save('Model.h5')

经过30次的迭代,我们获得了92.67%的准确率。后续可以通过增加网络层数或者调整超参数来改进准确率。

发布模型

模训练完成后,我们需要将模型进行发布,以便其他用户使用。发布模型的方法有很多,由于我们想让模型能在客户端上运行,所以最终采用Web app来发布。

配置设置

建立客户端应用,需要遵循以下的要求及框架。

App 框架

安装node和npm,并进行环境设置。

代码语言:javascript
复制
npm install -g create-react-app
create-react-app app_name
cd app_name
npm install --save @tensorflow/tfjs
//on server side:
mkdir server
cd server
npm init
//fill up the details, make sure package.json is created
npm install express --save

模型服务器

这里用了一个express.js REST根节点,用户在客户端可以通过发送TEST GET请求来获取模型文件。

代码语言:javascript
复制
let express = require('express')
let cors = require('cors')
let path = require('path')

var app = express()

let static_path = path.join(__dirname, 'ModelData/model_data')

app.use(cors())
app.use(express.static(static_path))

app.get('/model_metadata', (req, resp) => {
    resp.sendFile(static_path+'/model.json')
})

app.listen(5443, () => console.log('Serving tfjs model on express API server'))

模型存储

接下来,我们需要将模型与tfjs进行兼容,tensorflow提供了一个tensorflowjs的Python库,可以用来处理js文件。安装代码如下:

代码语言:javascript
复制
pip install tensorflowjs

安装完成后,我们可以利用tensorflowjs_converter将模型转换成tfjs格式:

代码语言:javascript
复制
$tensorflowjs_converter --input_format keras \
                        Model.h5 \
                        ModelData/model_data
// Model.h5 is the downloaded model after training, last argument is the target folder, where we need to store the model files.

转换完成后,我们创建了一组名为shard的文件。shard文件是通过将模型各个训练层进行拆解获得的,每个shard文件包含了特定层的超参数。由于shard可以在不同的部位进行存储和调用,所以可以其实现分布式计算。

model.json包含了各个shard文件的信息,当改变了shard文件夹的位置时,则需要更新该文件。进行API调用时,我们仅发送model.json文件给客户端即可。tfjs可以自动的调用各个shard文件,并组装成模型以便用户使用。

推理机(inference engine)开发

下面,我们介绍如何利用tfjs来进行推断(inference)的。

模型包装类(container class):我们为算法模型创建了一个包装类,该类可以用于进行推断。

  • 推理函数:我们创建了一个函数,用来接收模型对象和输入的图像。输入类型可以是HTMLimg,或者URL及图像的字节流(byte stream)。
  • 初始化模型对象:创建模型对象以便进行推断。
代码语言:javascript
复制
let modelCache = new ModelContainer(null);
modelCache.loadFromURL('http://192.168.0.105:5443/model_metadata')

运行推断:创建模型对象后,用户就可以在UI界面上随时进行推断处理。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 决策智能与机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kaggle验证
  • 前处理
  • 配置设置
  • 模型服务器
  • 模型存储
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档