×

Arduino Nano 33 BLE Sense上的白血病检测

消耗积分:0 | 格式:zip | 大小:0.49 MB | 2022-11-04

李华瑞

分享资料个

描述

急性淋巴细胞白血病 Arduino Nano 33 BLE Sense 分类器是一项实验,旨在探索如何使用低功率微控制器(特别是 Arduino Nano 33 BLE Sense)检测急性淋巴细胞白血病。Arduino Nano 33 BLE Sense 是支持 Tensorflow Lite 的最新 Arduino 板,允许在 Arduino 上进行机器学习。

您将训练的模型是一个 6 层卷积神经网络,使用英特尔® oneAPI AI 分析工具包中的 英特尔® Optimization for Tensorflow*进行训练,以优化和加速训练过程。

免责声明

该项目应仅用于研究目的。该项目的目的是展示人工智能在诊断系统等医疗支持系统中的潜力。

尽管该模型是准确的,并且在纸上和现实世界的测试中都显示出良好的结果,但它是在少量数据上训练的,需要在更大的数据集上进行训练才能真正评估它的准确性。

对此存储库做出贡献的开发人员在使用人工智能检测某些类型的癌症方面具有经验。他们不是医生、医学或癌症专家。

动机

该项目的动机是探索如何使用 Arduino 等低功率设备来检测急性淋巴细胞白血病。该项目将提交给 Tensorflow For Microcontroller Challenge 和 Eyes on Edge:tinyML Vision Challenge。

急性淋巴细胞白血病

急性淋巴细胞白血病 (ALL) ,也称为急性淋巴细胞白血病,是一种影响淋巴样血细胞谱系的癌症。它是儿童最常见的白血病,占成人急性白血病的10-20%。自 1970 年代以来,成人尤其是儿童 ALL 的预后已显着改善。儿童的 5 年生存率约为 95%。在成人中,5 年生存率在 25% 和 75% 之间变化,年轻患者的结果优于老年患者。

有关急性淋巴细胞白血病的更多信息,请访问我们的白血病信息页面

ALL-IDB

pYYBAGNkXaCAcOMlAADLU-w-gUo729.jpg
 

您需要获得使用急性淋巴细胞白血病图像数据库进行图像处理数据集的访问权限。您可以在此页面上找到申请表和有关访问数据集的信息,以及有关如何在此处回馈项目的信息如果您无法获得数据集的副本,请随时在您自己的数据集上尝试本教程,我们很乐意找到其他 AML 和 ALL 数据集。

克隆存储库

Peter Moss Acute Myeloid & Lymphoblastic Leukemia AI Research Project Github 组织克隆ALL Arduino Nano 33 BLE Sense Classifier存储库。

要克隆存储库并安装项目,请确保已安装 Git。现在导航到要将项目克隆到的目录,然后使用以下命令。

git clone https://github.com/AMLResearchProject/ALL-Arduino-Nano-33-BLE-Sense-Classifier.git

这将克隆所有 Arduino Nano 33 BLE Sense 分类器存储库。

ls

在主目录中使用 ls 命令应该会显示以下内容。

ALL-Arduino-Nano-33-BLE-Sense-Classifier

导航到ALL-Arduino-Nano-33-BLE-Sense-Classifier目录,这是本教程的项目根目录。

开发者分叉

想要为这个项目的开发做出贡献的 Github 社区的开发人员应该首先创建一个 fork,然后克隆该存储库。有关详细信息,请查看贡献指南。您应该从开发分支中提取最新代码。

git clone -b "2.0.0" https://github.com/AMLResearchProject/ALL-Arduino-Nano-33-BLE-Sense-Classifier.git

-b " 2.0.0"参数确保您从最新的 master 分支获取代码。在使用以下命令之前,请在项目 README 顶部的按钮中查看我们最新的 master 分支。

安装

您现在已准备好安装 ALL Arduino Nano 33 BLE Sense Classifier 训练器。所有软件要求都包含在scripts/install.sh中。您可以从终端中的项目根目录在您的机器上运行此文件。使用以下命令:

sh scripts/install.sh

警告:此脚本假定您尚未安装 oneAPI Basekit。

警告:此脚本假定您尚未安装 oneAPI AI Analytics Toolkit。

警告:此脚本假定您拥有 Intel GPU。

警告:此脚本假定您已经安装了 Intel GPU 驱动程序。

提示:如果以上任何一项与您无关,请在运行前将安装脚本中的相关部分注释掉。

数据

您需要获得使用急性淋巴细胞白血病图像数据库进行图像处理数据集的访问权限。您可以在此页面上找到申请表和有关访问数据集的信息,以及有关如何在此处回馈项目的信息。

如果您无法获得数据集的副本,请随时在您自己的数据集上尝试本教程。

获得数据后,您需要将其添加到项目文件系统中。你会注意到模型目录中的数据文件夹,模型/数据,里面有训练测试将 ALL_IDB1 数据集中的所有图像添加到model/data/train文件夹。

数据增强

我们将基于TTP Thanh、Caleb Vununu、Sukhrob Atoev、Suk-Hwan Lee 和 Ki-Ryong Kwon使用卷积神经网络进行的白血病血细胞图像分类创建一个增强数据集。

应用测试数据

在数据处理阶段,从数据集中移除十张负片和十张正片,并移至模型/数据/测试/目录。这些数据在训练过程中不会被网络看到,而是用来测试模型的性能。

为确保您的模型获得相同的结果,您应该使用相同的测试图像。您也可以尝试使用自己的图像选择,但结果可能会有所不同。

要指定使用哪些测试图像,请修改configuration/config.json文件,如下所示:

"test_data": [
    "Im006_1.jpg",
    "Im020_1.jpg",
    "Im024_1.jpg",
    "Im026_1.jpg",
    "Im028_1.jpg",
    "Im031_1.jpg",
    "Im035_0.jpg",
    "Im041_0.jpg",
    "Im047_0.jpg",
    "Im053_1.jpg",
    "Im057_1.jpg",
    "Im060_1.jpg",
    "Im063_1.jpg",
    "Im069_0.jpg",
    "Im074_0.jpg",
    "Im088_0.jpg",
    "Im095_0.jpg",
    "Im099_0.jpg",
    "Im101_0.jpg",
    "Im106_0.jpg"
],

配置

所有配置都可以在configuration/config.json文件中找到。

{
    "agent": {
        "cores": 8,
        "ip": "",
        "port": 1234,
        "params": [
            "train",
            "classify",
            "server",
            "classify_http"
        ]
    },
    "data": {
        "dim": 100,
        "file_type": ".jpg",
        "labels": [0, 1],
        "rotations": 10,
        "seed": 2,
        "split": 0.255,
        "test": "model/data/test",
        "test_data": [
            "Im006_1.jpg",
            "Im020_1.jpg",
            "Im024_1.jpg",
            "Im026_1.jpg",
            "Im028_1.jpg",
            "Im031_1.jpg",
            "Im035_0.jpg",
            "Im041_0.jpg",
            "Im047_0.jpg",
            "Im053_1.jpg",
            "Im057_1.jpg",
            "Im060_1.jpg",
            "Im063_1.jpg",
            "Im069_0.jpg",
            "Im074_0.jpg",
            "Im088_0.jpg",
            "Im095_0.jpg",
            "Im099_0.jpg",
            "Im101_0.jpg",
            "Im106_0.jpg"
        ],
        "train_dir": "model/data/train",
        "valid_types": [
            ".jpg"
        ]
    },
    "model": {
        "model": "model/all_nano_33_ble_sense.json",
        "model_c_array": "model/all_nano_33_ble_sense.cc",
        "tfmodel": "model/all_nano_33_ble_sense.tflite",
        "weights": "model/all_nano_33_ble_sense.h5"
    },
    "train": {
        "batch": 100,
        "decay_adam": 1e-6,
        "epochs": 150,
        "learning_rate_adam": 1e-4,
        "val_steps": 10
    }
}

您应该更新以下值:

  • agent->cores应该代表你的 CPU 拥有的核心数量。
  • agent->ip应该是您将在其上运行测试服务器的机器的 IP。
  • agent->port应该是您将在其上运行测试服务器的端口。

您可以根据需要修改 train 对象中的值,但是为确保获得相同的结果,您可以保留它们的原样。

训练

现在您已准备好训练您的模型。

指标

我们可以使用指标来衡量模型的有效性。在此网络中,您将使用以下指标:

tf.keras.metrics.BinaryAccuracy(name='accuracy'),
tf.keras.metrics.Precision(name='precision'),
tf.keras.metrics.Recall(name='recall'),
tf.keras.metrics.AUC(name='auc')

一旦我们的模型被训练,这些指标将被显示和绘制。在处理指标时,一个有用的教程是Tensorflow 网站上的不平衡数据分类教程。

开始训练

确保您已完成所有前面的步骤,您可以使用以下命令开始训练。

python classifier.py train

这告诉应用程序开始训练模型。您还可以使用 Jupyter Notebook 来训练您的模型。如果您选择这样做,您可以在此处访问 Notebook 在此处查看文档

训练数据

首先将准备训练和验证数据。

2021-07-18 17:42:26,075 - Classifier - INFO - Augmented data size: 1584
2021-07-18 17:42:26,075 - Classifier - INFO - Negative data size: 882
2021-07-18 17:42:26,076 - Classifier - INFO - Positive data size: 702
2021-07-18 17:42:26,076 - Classifier - INFO - Augmented data shape: (1584, 100, 100, 3)
2021-07-18 17:42:26,076 - Classifier - INFO - Labels shape: (1584, 2)
2021-07-18 17:42:26,267 - Classifier - INFO - Training data: (1180, 100, 100, 3)
2021-07-18 17:42:26,267 - Classifier - INFO - Training labels: (1180, 2)
2021-07-18 17:42:26,267 - Classifier - INFO - Validation data: (404, 100, 100, 3)
2021-07-18 17:42:26,267 - Classifier - INFO - Validation labels: (404, 2)
2021-07-18 17:42:26,267 - Classifier - INFO - Data preperation complete.

模型摘要

在模型开始训练之前,您将看到模型摘要。

Model: "AllANBS"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
average_pooling2d (AveragePo (None, 50, 50, 3)         0
_________________________________________________________________
conv2d (Conv2D)              (None, 46, 46, 30)        2280
_________________________________________________________________
depthwise_conv2d (DepthwiseC (None, 17, 17, 30)        27030
_________________________________________________________________
flatten (Flatten)            (None, 8670)              0
_________________________________________________________________
dense (Dense)                (None, 2)                 17342
_________________________________________________________________
activation (Activation)      (None, 2)                 0
=================================================================
Total params: 46,652
Trainable params: 46,652
Non-trainable params: 0
_________________________________________________________________
2021-07-18 17:42:26,323 - Classifier - INFO - Network initialization complete.
2021-07-18 17:42:26,324 - Classifier - INFO - Using Adam Optimizer.
2021-07-18 17:42:26,324 - Classifier - INFO - Using Early Stopping.

培训结果

下面是 28 个 epoch 的训练结果。

pYYBAGNkXaKAXIrPAAAzj9-X5xs428.png
 

图 2. 准确度

pYYBAGNkXaSABgSHAAA4NWD70y8854.png
 

图 3. 损失

pYYBAGNkXaaATTOHAAA_fpZdMzs103.png
 

图 4. 精度

pYYBAGNkXaiAWiBcAAA-Rab0RAg045.png
 

图 5. 召回

pYYBAGNkXaqAeRv7AAA8IlFDp38151.png
 

图 6. AUC

poYBAGNkXa2ADzpfAAAfgxkcKjA815.png
 

图 7. 混淆矩阵

2021-07-18 17:47:55,953 - Classifier - INFO - Metrics: loss 0.2371470034122467
2021-07-18 17:47:55,953 - Classifier - INFO - Metrics: acc 0.9331682920455933
2021-07-18 17:47:55,953 - Classifier - INFO - Metrics: precision 0.9331682920455933
2021-07-18 17:47:55,953 - Classifier - INFO - Metrics: recall 0.9331682920455933
2021-07-18 17:47:55,953 - Classifier - INFO - Metrics: auc 0.9677298069000244
2021-07-18 17:47:56,536 - Classifier - INFO - Confusion Matrix: [[217   4] [ 23 160]]
2021-07-18 17:47:56,633 - Classifier - INFO - True Positives: 160(39.603960396039604%)
2021-07-18 17:47:56,633 - Classifier - INFO - False Positives: 4(0.9900990099009901%)
2021-07-18 17:47:56,633 - Classifier - INFO - True Negatives: 217(53.71287128712871%)
2021-07-18 17:47:56,633 - Classifier - INFO - False Negatives: 23(5.693069306930693%)
2021-07-18 17:47:56,633 - Classifier - INFO - Specificity: 0.9819004524886877
2021-07-18 17:47:56,633 - Classifier - INFO - Misclassification: 27(6.683168316831683%)

指标概述

精度 0.9331682920455933

召回 0.9331682920455933

精度 0.9331682920455933

AUC/ROC 0.9677298069000244

功绩

真阳性 160 (39.603960396039604%)

误报 4 (0.9900990099009901%)

真阴性 217 (53.71287128712871%)

假阴性 23 (5.693069306930693%)

灵敏度/召回率 0.9331682920455933 (93%)

特异性 0.9819004524886877 (98%)

测试

现在您将在训练机上测试分类器。您将使用本教程前面部分中从训练数据中删除的 20 张图像。

要在测试模式下运行分类器,请使用以下命令:

python3 classifier.py classify

您应该看到以下内容,其中显示了网络架构:

Model: "AllANBS"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
average_pooling2d (AveragePo (None, 50, 50, 3)         0
_________________________________________________________________
conv2d (Conv2D)              (None, 46, 46, 30)        2280
_________________________________________________________________
depthwise_conv2d (DepthwiseC (None, 17, 17, 30)        27030
_________________________________________________________________
flatten (Flatten)            (None, 8670)              0
_________________________________________________________________
dense (Dense)                (None, 2)                 17342
_________________________________________________________________
activation (Activation)      (None, 2)                 0
=================================================================
Total params: 46,652
Trainable params: 46,652
Non-trainable params: 0
_________________________________________________________________

最后,应用程序将开始处理测试图像,结果将显示在控制台中。

2021-07-18 17:51:28,684 - Classifier - INFO - Loaded test image model/data/test/Im063_1.jpg
2021-07-18 17:51:28,804 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly detected (True Positive) in 0.12069535255432129 seconds.
2021-07-18 17:51:28,804 - Classifier - INFO - Loaded test image model/data/test/Im028_1.jpg
2021-07-18 17:51:28,838 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly detected (True Positive) in 0.03429007530212402 seconds.
2021-07-18 17:51:28,839 - Classifier - INFO - Loaded test image model/data/test/Im106_0.jpg
2021-07-18 17:51:28,872 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly not detected (True Negative) in 0.03346753120422363 seconds.
2021-07-18 17:51:28,872 - Classifier - INFO - Loaded test image model/data/test/Im101_0.jpg
2021-07-18 17:51:28,906 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly not detected (True Negative) in 0.034415245056152344 seconds.
2021-07-18 17:51:28,907 - Classifier - INFO - Loaded test image model/data/test/Im024_1.jpg
2021-07-18 17:51:28,939 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly detected (True Positive) in 0.032686471939086914 seconds.
2021-07-18 17:51:28,940 - Classifier - INFO - Loaded test image model/data/test/Im074_0.jpg
2021-07-18 17:51:28,972 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly not detected (True Negative) in 0.03266596794128418 seconds.
2021-07-18 17:51:28,973 - Classifier - INFO - Loaded test image model/data/test/Im035_0.jpg
2021-07-18 17:51:29,005 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly not detected (True Negative) in 0.032935142517089844 seconds.
2021-07-18 17:51:29,006 - Classifier - INFO - Loaded test image model/data/test/Im006_1.jpg
2021-07-18 17:51:29,039 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly detected (True Positive) in 0.03386235237121582 seconds.
2021-07-18 17:51:29,040 - Classifier - INFO - Loaded test image model/data/test/Im020_1.jpg
2021-07-18 17:51:29,076 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly detected (True Positive) in 0.0370943546295166 seconds.
2021-07-18 17:51:29,077 - Classifier - INFO - Loaded test image model/data/test/Im095_0.jpg
2021-07-18 17:51:29,109 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly not detected (True Negative) in 0.03277897834777832 seconds.
2021-07-18 17:51:29,110 - Classifier - INFO - Loaded test image model/data/test/Im069_0.jpg
2021-07-18 17:51:29,143 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly not detected (True Negative) in 0.03318381309509277 seconds.
2021-07-18 17:51:29,143 - Classifier - INFO - Loaded test image model/data/test/Im031_1.jpg
2021-07-18 17:51:29,175 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly detected (True Positive) in 0.03194856643676758 seconds.
2021-07-18 17:51:29,176 - Classifier - INFO - Loaded test image model/data/test/Im099_0.jpg
2021-07-18 17:51:29,208 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly not detected (True Negative) in 0.032364845275878906 seconds.
2021-07-18 17:51:29,208 - Classifier - INFO - Loaded test image model/data/test/Im026_1.jpg
2021-07-18 17:51:29,241 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly detected (True Positive) in 0.03291964530944824 seconds.
2021-07-18 17:51:29,241 - Classifier - INFO - Loaded test image model/data/test/Im057_1.jpg
2021-07-18 17:51:29,276 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly detected (True Positive) in 0.035039663314819336 seconds.
2021-07-18 17:51:29,277 - Classifier - INFO - Loaded test image model/data/test/Im088_0.jpg
2021-07-18 17:51:29,312 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly not detected (True Negative) in 0.03563833236694336 seconds.
2021-07-18 17:51:29,313 - Classifier - INFO - Loaded test image model/data/test/Im060_1.jpg
2021-07-18 17:51:29,346 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly detected (True Positive) in 0.03394198417663574 seconds.
2021-07-18 17:51:29,347 - Classifier - INFO - Loaded test image model/data/test/Im053_1.jpg
2021-07-18 17:51:29,383 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly detected (True Positive) in 0.03695321083068848 seconds.
2021-07-18 17:51:29,384 - Classifier - INFO - Loaded test image model/data/test/Im041_0.jpg
2021-07-18 17:51:29,417 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly not detected (True Negative) in 0.03377509117126465 seconds.
2021-07-18 17:51:29,418 - Classifier - INFO - Loaded test image model/data/test/Im047_0.jpg
2021-07-18 17:51:29,450 - Classifier - INFO - Acute Lymphoblastic Leukemia correctly not detected (True Negative) in 0.03243684768676758 seconds.
2021-07-18 17:51:29,450 - Classifier - INFO - Images Classified: 20
2021-07-18 17:51:29,450 - Classifier - INFO - True Positives: 10
2021-07-18 17:51:29,450 - Classifier - INFO - False Positives: 0
2021-07-18 17:51:29,450 - Classifier - INFO - True Negatives: 10
2021-07-18 17:51:29,450 - Classifier - INFO - False Negatives: 0
2021-07-18 17:51:29,450 - Classifier - INFO - Total Time Taken: 0.7630934715270996

在这里,我们利用英特尔® oneAPI AI 分析工具包中的英特尔® Optimization for Tensorflow* 训练了一个用于急性淋巴细胞白血病检测的深度学习模型,以优化和加速训练。我们引入了 6 层深度学习模型并应用数据增强来增加训练数据。

我们以 150 个 epoch 为目标训练我们的模型,并使用早期停止来避免过度拟合。该模型训练了 29 个 epoch,导致拟合略有噪声,但准确度/精度/召回率和 AUC 令人满意。此外,该模型在对 20 个未见过的测试图像中的每一个进行正确分类的测试期间反应良好。

阿杜诺

您需要确保已安装以下软件并遵循提供的指南:

设置

poYBAGNkXa-AbJkOAAJD3D_kpEA858.jpg
 

按照上图将您的 SD 卡读卡器连接到 Arduino Nano 33 BLE Sense。

 

Arduino IDE

pYYBAGNkXbKAfDNAAAE97VUEOyU280.jpg
 

打开您的 Arduino IDE 并打开位于项目根目录下 Arduino 文件夹中的all_nano_33_ble_sense草图。

C 数组模型

现在您需要将您的 C 数组模型导入到 Arduino 项目中。在您的开发机器上导航到位于项目根目录中的模型目录并打开all_nano_33_ble_sense.cc文件。首先,您需要复制模型并将all_model[]{}中的所有内容替换为新创建的模型。接下来,您需要将all_model_len替换为模型文件底部的模型的实际长度。

测试数据

在训练期间,测试数据被调整大小并移动到**model/data/test/**目录。在继续之前,您需要将这些文件上传到 SD 卡。

运行分类器

现在是时候在 Arduino Nano 33 BLE Sense 上运行分类器了。确保您已连接到您的 Arduino 并单击上传按钮。模型上传后,它将开始运行,打开串行监视器并观察输出。

19:22:40.139 -> Initialising SD card...
19:22:40.148 -> Initialisation done.
19:22:40.158 ->
19:22:40.163 -> Model input info
19:22:40.274 -> ===============
19:22:40.284 -> Dimensions: 4
19:22:40.299 -> Dim 1 size: 1
19:22:40.314 -> Dim 2 size: 100
19:22:40.328 -> Dim 3 size: 100
19:22:40.343 -> Dim 4 size: 3
19:22:40.354 -> Input type: 9
19:22:40.365 -> ===============
19:22:40.375 ->
19:22:40.381 -> Im006_1.jpg
19:22:40.458 -> ===============
19:22:40.468 -> ALL positive score: -7
19:22:40.483 -> ALL negative score: -18
19:22:40.504 -> True Positive
19:22:40.515 ->
19:22:40.521 -> Im020_1.jpg
19:22:43.194 -> ===============
19:22:43.201 -> ALL positive score: -14
19:22:43.223 -> ALL negative score: -6
19:22:43.229 -> False Negative
19:22:43.238 ->
19:22:43.241 -> Im024_1.jpg
19:22:45.916 -> ===============
19:22:45.922 -> ALL positive score: 18
19:22:45.928 -> ALL negative score: 24
19:22:45.938 -> False Negative
19:22:45.946 ->
19:22:45.950 -> Im026_1.jpg
19:22:48.680 -> ===============
19:22:48.685 -> ALL positive score: 27
19:22:48.695 -> ALL negative score: 24
19:22:48.705 -> True Positive
19:22:48.714 ->
19:22:48.719 -> Im028_1.jpg
19:22:51.409 -> ===============
19:22:51.416 -> ALL positive score: 13
19:22:51.427 -> ALL negative score: 18
19:22:51.439 -> False Negative
19:22:51.448 ->
19:22:51.454 -> Im031_1.jpg
19:22:54.138 -> ===============
19:22:54.148 -> ALL positive score: -13
19:22:54.164 -> ALL negative score: -16
19:22:54.179 -> True Positive
19:22:54.183 ->
19:22:54.188 -> Im035_0.jpg
19:22:56.883 -> ===============
19:22:56.890 -> ALL positive score: 12
19:22:56.901 -> ALL negative score: 20
19:22:56.908 -> True Negative
19:22:56.916 ->
19:22:56.921 -> Im041_0.jpg
19:22:59.631 -> ===============
19:22:59.640 -> ALL positive score: 14
19:22:59.653 -> ALL negative score: 6
19:22:59.663 -> False Positive
19:22:59.673 ->
19:22:59.679 -> Im047_0.jpg
19:23:02.365 -> ===============
19:23:02.373 -> ALL positive score: 25
19:23:02.384 -> ALL negative score: 20
19:23:02.393 -> False Positive
19:23:02.399 ->
19:23:02.404 -> Im053_1.jpg
19:23:05.160 -> ===============
19:23:05.174 -> ALL positive score: 39
19:23:05.190 -> ALL negative score: 5
19:23:05.202 -> True Positive
19:23:05.218 ->
19:23:05.223 -> Im057_1.jpg
19:23:07.881 -> ===============
19:23:07.896 -> ALL positive score: 6
19:23:07.912 -> ALL negative score: -1
19:23:07.928 -> True Positive
19:23:07.937 ->
19:23:07.942 -> Im060_1.jpg
19:23:10.618 -> ===============
19:23:10.630 -> ALL positive score: 25
19:23:10.648 -> ALL negative score: 12
19:23:10.661 -> True Positive
19:23:10.667 ->
19:23:10.673 -> Im063_1.jpg
19:23:13.359 -> ===============
19:23:13.368 -> ALL positive score: 23
19:23:13.382 -> ALL negative score: -52
19:23:13.400 -> True Positive
19:23:13.411 ->
19:23:13.417 -> Im069_0.jpg
19:23:16.097 -> ===============
19:23:16.108 -> ALL positive score: -4
19:23:16.129 -> ALL negative score: 34
19:23:16.148 -> True Negative
19:23:16.159 ->
19:23:16.164 -> Im074_0.jpg
19:23:18.812 -> ===============
19:23:18.819 -> ALL positive score: 22
19:23:18.834 -> ALL negative score: 18
19:23:18.850 -> False Positive
19:23:18.861 ->
19:23:18.867 -> Im088_0.jpg
19:23:21.564 -> ===============
19:23:21.575 -> ALL positive score: -21
19:23:21.594 -> ALL negative score: -24
19:23:21.613 -> False Positive
19:23:21.625 ->
19:23:21.630 -> Im095_0.jpg
19:23:24.274 -> ===============
19:23:24.284 -> ALL positive score: -33
19:23:24.302 -> ALL negative score: -38
19:23:24.321 -> False Positive
19:23:24.333 ->
19:23:24.339 -> Im099_0.jpg
19:23:27.014 -> ===============
19:23:27.025 -> ALL positive score: -46
19:23:27.042 -> ALL negative score: -22
19:23:27.062 -> True Negative
19:23:27.074 ->
19:23:27.080 -> Im101_0.jpg
19:23:29.769 -> ===============
19:23:29.779 -> ALL positive score: -17
19:23:29.796 -> ALL negative score: -14
19:23:29.816 -> True Negative
19:23:29.830 ->
19:23:29.837 -> Im106_0.jpg
19:23:32.530 -> ===============
19:23:32.545 -> ALL positive score: -42
19:23:32.562 -> ALL negative score: -45
19:23:32.587 -> False Positive
19:23:32.602 ->
19:23:32.609 -> True Positives: 7
19:23:34.833 -> False Positives: 6
19:23:34.844 -> True Negatives: 4
19:23:34.858 -> False Negatives: 3

结论

我们看到,在 Arduino 上运行时,可以正确分类所有 20 张图像的模型仅获得 11/20。我们可以采取一些额外的测试步骤,这些步骤将在 V2 中引入,这将使我们能够在我们的开发机器上测试 Arduino 模型,以帮助确定错误的来源。目前,这是在 Arduino 上构建分类器以检测急性淋巴细胞白血病检测的首次尝试。如果您想查看 Tensorflow Micro 存储库中持续存在的问题,请单击此处,感谢Advait Jain对此问题的帮助。

贡献

Asociación de Investigacion en Inteligencia Artificial Para la Leucemia Peter Moss 鼓励并欢迎 Github 社区的代码贡献、错误修复和增强功能。

请阅读CONTRIBUTING文档以获取有关分叉我们的存储库和提交您的拉取请求的完整指南。您还可以在行为准则文件中找到我们的行为准则。

贡献者

版本控制

我们使用SemVer进行版本控制。

执照

这个项目是在MIT 许可下获得许可的- 有关详细信息,请参阅LICENSE文件。

错误/问题

我们使用repo 问题来跟踪与使用此项目相关的错误和一般请求。有关如何提交错误、功能请求和建议的更多信息,请参阅CONTRIBUTING 。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'Arduino Nano 33 BLE Sense上的白血病检测',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);