×

使用Movidius和UP2进行乳腺癌分类

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-06-13

王芳

分享资料个

描述

浸润性导管癌

IDC 是最常见的乳腺癌形式之一。癌症从乳房的乳管开始并侵入周围组织。根据美国癌症协会的数据,这种形式的癌症约占所有乳腺癌诊断的 80%,仅在美国,每年就有超过 180,000 名女性被诊断出患有 IDC。

IDC 分类器简介

使用计算机视觉和物联网的浸润性导管癌 (IDC) 分类结合了计算机视觉物联网,为研究人员、医生和学生提供了一种方法来训练带有标记的乳腺癌组织学图像的神经网络,以检测浸润性导管癌 (IDC)看不见/未标记的图像。

该项目使用英特尔® Movidius的强大功能,并使用经过自定义训练的Inception V3 模型在本地和通过服务器/客户端进行图像分类。IoT 通信由IoT JumpWay提供支持,并在处理本地图像或通过 API 发送的图像后发布结果。

免责声明

这是我创建的一个项目,作为我的一个面部识别项目的扩展,我建议有兴趣了解计算机视觉用例的开发人员、医学研究人员和学生或医学行业的专业人士使用它评估它是否可以帮助他们并扩展。这并不意味着可以替代使用而不是寻求专业帮助。我是开发人员,不是医生或癌症专家。

我们会怎样做?

  • 克隆并设置回购。
  • 准备您的训练数据集。
  • 微调你的训练参数。
  • 在英特尔® AI DevCloud 上训练 Inception V3 IDC 分类模型。
  • 将模型转换为适合 Movidius 的格式。
  • 在 Linux 开发设备上本地测试 IDC 分类器。
  • 通过服务器/客户端进行实时 IDC 分类。
  • 构建一个 IoT 连接警报,该警报将在检测到 IDC 时触发。

应用

使用计算机视觉和物联网进行浸润性导管癌 (IDC) 分类由 7 个核心应用程序组成:

  • DevCloudTrainer:一个训练程序,允许您使用英特尔® AI DevCloud 训练卷积神经网络。
  • Evaluator:用于评估模型的评估程序。
  • 分类器:用于测试模型的分类程序。
  • 服务器/API:为 REST Api 提供支持的服务器,提供对分类器的访问。
  • 客户端:可以与服务器/API 交互的客户端。
  • 物联网连接警报:检测到 IDC 时触发的物联网连接警报。

Python 版本

  • 在 Python 3.5 中测试

软件要求

硬件要求

  • 1 x Linux 设备,用于训练并将训练后的模型转换为 Movidius 友好模型。
  • 1 x Raspberry Pi 3 / UP Squared 用于分类器/服务器。
  • 1 x Raspberry Pi 3 用于 IoT 连接警报。
  • 1 x 用于物联网的 Grove 入门套件,Raspberry Pi 版。
  • 1 x 蓝色 LED (Grove)
  • 1 x 红色 LED (Grove)
  • 1 x 蜂鸣器 (Grove)

在您的开发设备上安装 NCSDK

您需要做的第一件事是在您的开发设备上安装 NCSDK 这将用于将经过训练的模型转换为与 Movidius 兼容的格式。

 $ mkdir -p ~/workspace
 $ cd ~/workspace
 $ git clone https://github.com/movidius/ncsdk.git
 $ cd ~/workspace/ncsdk
 $ make install

接下来将您的 Movidius 插入您的设备并发出以下命令:

 $ cd ~/workspace/ncsdk
 $ make examples

在你的 Raspberry Pi 3 / UP Squared 上安装 NCSDK

 
pYYBAGSAiCqANqgMAAcbDWgEgOw594.jpg
 

接下来,您需要在 Raspberry Pi 3 / UP Squared 设备上安装 NCSDK 分类器将使用它对本地图像或通过我们将创建的 API 接收的图像进行推理。确保已插入 Movidius。

 $ mkdir -p ~/workspace
 $ cd ~/workspace
 $ git clone https://github.com/movidius/ncsdk.git
 $ cd ~/workspace/ncsdk/api/src
 $ make
 $ sudo make install
 $ cd ~/workspace
 $ git clone https://github.com/movidius/ncappzoo
 $ cd ncappzoo/apps/hello_ncs_py
 $ python3 hello_ncs.py

物联网 JumpWay 入门

在开始之前,您应该遵循一些教程,尤其是如果您是第一次使用IoT JumpWay Developer Program 如果您还没有,则需要一个IoT JumpWay Developer Program 开发者帐户,并在开始创建 IoT 设备之前设置一些基础知识。访问以下IoT JumpWay 开发人员计划文档(阅读/设置 5-10 分钟)并查看引导您完成注册和设置位置空间、区域、设备和应用程序的指南(阅读约 5 分钟)。

在您的 Raspberry Pi 3 / UP Squared 上安装 IoT JumpWay Python MQTT 客户端

接下来在您的 Raspberry Pi 3 / UP Squared 上安装 IoT JumpWay Python MQTT 客户端。为此,您可以执行以下命令:

 $ pip3 install JumpWayMQTT

IoT JumpWay 设备连接凭证和设置

  • 为 IDC 分类器设置 IoT JumpWay 定位设备,确保设置摄像头节点,因为您需要虚拟摄像头的 ID 才能使项目正常工作。创建设备后,将位置 ID 和区域 ID 添加到位于model/confs.json的 confs 文件中的IoTJumpWay详细信息,同时准确添加设备 ID 和设备名称,将 MQTT 凭证添加到IoTJumpWayMQTT

您将需要编辑您的设备并添加允许它与网络上的其他设备和应用程序自主通信的规则,但目前,这些是此时需要执行的唯一步骤。

按照IoT JumpWay 开发人员计划 (BETA) Location Device Doc设置您的设备。

{
    "IoTJumpWay": {
        "Location": 0,
        "Zone": 0,
        "Device": 0,
        "DeviceName" : "",
        "App": 0,
        "AppName": ""
    },
    "Actuators": {},
    "Cameras": [
        {
            "ID": 0,
            "URL": 0,
            "Name": ""
        }
    ],
    "Sensors": {},
	"IoTJumpWayMQTT": {
        "MQTTUsername": "",
        "MQTTPassword": ""
    },
    "ClassifierSettings":{
        "dataset_dir":"model/train/",
        "log_dir":"model/_logs",
        "log_eval":"model/_logs_eval",
        "classes":"model/classes.txt",
        "labels":"labels.txt",
        "labels_file":"model/train/labels.txt",
        "validation_size":0.3,
        "num_shards":2,
        "random_seed":50,
        "tfrecord_filename":"200label",
        "file_pattern":"200label_%s_*.tfrecord",
        "image_size":299,
        "num_classes":2,
        "num_epochs":60,
        "dev_cloud_epochs":60,
        "test_num_epochs":1,
        "batch_size":10,
        "test_batch_size":36,
        "initial_learning_rate":0.0001,
        "learning_rate_decay_factor":0.96,
        "num_epochs_before_decay":10,
        "NetworkPath":"",
        "InceptionImagePath":"model/test/",
        "InceptionThreshold": 0.54,
        "InceptionGraph":"igraph"
    }
}

克隆回购

您需要将此存储库克隆到开发终端上的某个位置。导航到您要将其下载到的目录并发出以下命令。

$ git clone https://github.com/iotJumpway/IoT-JumpWay-Intel-Examples.git

获得存储库后,您需要在位于IoT-JumpWay-Intel-Examples/master/Intel-Movidius/IDC-Classification 的文件夹中找到这些文件

准备您的 IDC 培训数据

对于本教程,我使用了来自 Kaggle 的数据集(预测 IDC 中的乳腺癌组织学图像),但您可以自由使用任何您喜欢的数据集。我已经上传了我用于正面和负面图像的集合,您可以在model/train目录中找到它们。一旦你决定了你的数据集,你需要将你的数据安排到模型/火车中目录。每个子目录都要用整数命名,我用0和1来表示正负。在我的测试中,我使用了 4400 个正面示例和 4400 个负面示例,给出了 0.8596 的整体训练准确度(参见下面的训练结果)和 0.96 的正确识别平均置信度。提供的数据是 50px x 50px,因为 Inception V3 在大小为 299px x 299px 的图像上进行训练,图像被调整为 299px x 299px,理想情况下图像已经是那个大小所以你可能想尝试不同的数据集并看看你的结果各不相同。

微调你的训练参数

您可以随时通过编辑model/confs.json文件中的分类器设置来微调网络设置

"ClassifierSettings":{
    "dataset_dir":"model/train/",
    "log_dir":"model/_logs",
    "log_eval":"model/_logs_eval",
    "classes":"model/classes.txt",
    "labels":"labels.txt",
    "labels_file":"model/train/labels.txt",
    "validation_size":0.3,
    "num_shards":2,
    "random_seed":50,
    "tfrecord_filename":"200label",
    "file_pattern":"200label_%s_*.tfrecord",
    "image_size":299,
    "num_classes":2,
    "num_epochs":60,
    "dev_cloud_epochs":60,
    "test_num_epochs":1,
    "batch_size":10,
    "test_batch_size":36,
    "initial_learning_rate":0.0001,
    "learning_rate_decay_factor":0.96,
    "num_epochs_before_decay":10,
    "NetworkPath":"",
    "InceptionImagePath":"model/test/",
    "InceptionThreshold": 0.54,
    "InceptionGraph":"igraph"
}

在英特尔® AI DevCloud 上训练您的 IDC 模型

现在您已准备好将下面列出的文件和文件夹上传到 AI DevCloud。

model
tools
DevCloudTrainer.ipynb
DevCloudTrainer.py
Eval.py

上传后,按照DevCloudTrainer.ipynb中的说明进行操作 ,此笔记本将帮助您对数据进行排序、训练模型并对其进行评估。

培训成果

 
 
 
 
poYBAGSAiC-ALyYRAACYPj104xU272.jpg
 
1 / 2
 

评估你的模型

在 AI DevCloud 上完成培训后,通过运行评估作业来完成笔记本。

INFO:tensorflow:Global Step 1: Streaming Accuracy: 0.0000 (2.03 sec/step)
INFO:tensorflow:Global Step 2: Streaming Accuracy: 0.8889 (0.59 sec/step)
INFO:tensorflow:Global Step 3: Streaming Accuracy: 0.8750 (0.67 sec/step)
INFO:tensorflow:Global Step 4: Streaming Accuracy: 0.8981 (0.65 sec/step)
INFO:tensorflow:Global Step 5: Streaming Accuracy: 0.8681 (0.76 sec/step)
INFO:tensorflow:Global Step 6: Streaming Accuracy: 0.8722 (0.64 sec/step)
INFO:tensorflow:Global Step 7: Streaming Accuracy: 0.8843 (0.64 sec/step)
-------------------------------------------------------------------------
INFO:tensorflow:Global Step 68: Streaming Accuracy: 0.8922 (0.81 sec/step)
INFO:tensorflow:Global Step 69: Streaming Accuracy: 0.8926 (0.70 sec/step)
INFO:tensorflow:Global Step 70: Streaming Accuracy: 0.8921 (0.63 sec/step)
INFO:tensorflow:Global Step 71: Streaming Accuracy: 0.8929 (0.84 sec/step)
INFO:tensorflow:Global Step 72: Streaming Accuracy: 0.8932 (0.75 sec/step)
INFO:tensorflow:Global Step 73: Streaming Accuracy: 0.8935 (0.61 sec/step)
INFO:tensorflow:Global Step 74: Streaming Accuracy: 0.8942 (0.67 sec/step)
INFO:tensorflow:Final Streaming Accuracy: 0.8941
 
 
 
 
pYYBAGSAiDKAUWnYAACT4rR_5fo073.jpg
 
1 / 2
 

下载您的模型

训练完成后,您需要将model/DevCloudIDC.pbmodel/classes.txt下载到开发机器上的模型目录,确保 Movidius 已设置并连接,然后在开发机器上运行以下命令:

$ cd ~/IoT-JumpWay-Intel-Examples/master/Intel-Movidius/IDC-Classification
$ ./DevCloudTrainer.sh

DevCloudTrainer.sh的内容如下:

#IDC Classification Trainer
mvNCCompile model/DevCloudIDC.pb -in=input -on=InceptionV3/Predictions/Softmax -o igraph
python3.5 Classifier.py InceptionTest
  • 为 Movidius 编译模型
  • 测试

测试您的 IDC 模型

一旦 shell 脚本完成,测试程序就会启动。在我的示例中,我有两个类别 0 和 1(IDC 负和 IDC 正),分类 0 表示 AI 认为图像不是 IDC 正,分类 1 是正。

-- Loaded Test Image model/test/negative.png
-- DETECTION STARTING
-- STARTED: :  2018-04-24 14:14:26.780554
-- DETECTION ENDING
-- ENDED:  2018-04-24 14:14:28.691870
-- TIME: 1.9114031791687012
*******************************************************************************
inception-v3 on NCS
*******************************************************************************
0 0 0.9873
1 1 0.01238
*******************************************************************************
-- Loaded Test Image model/test/positive.png
-- DETECTION STARTING
-- STARTED: :  2018-04-24 14:14:28.699254
-- DETECTION ENDING
-- ENDED:  2018-04-24 14:14:30.577683
-- TIME: 1.878432035446167ß
TASS Identified IDC with a confidence of 0.945
-- Published to Device Sensors Channel
*******************************************************************************
inception-v3 on NCS
*******************************************************************************
1 1 0.945
0 0 0.05542
*******************************************************************************
-- INCEPTION V3 TEST MODE ENDING
-- ENDED:  2018-04-24 14:14:30.579247
-- TESTED:  2
-- IDENTIFIED:  1
-- TIME(secs): 3.984593152999878

为您的实时 IDC 模型提供服务

现在我们都经过培训和测试,是时候设置服务 API 的服务器了。为此,我提供了Server.pyClient.py

以下说明将帮助您设置服务器并测试正面和负面预测:

  • 如果您在乳腺癌组织学图像数据集中使用了 Predict IDC,则可以使用来自该数据集的positive.pngnegative.png ,否则您应该从测试集中选择一个正例和负例并替换这些图像。
  • 服务器当前设置为在本地主机上启动,如果您想更改此设置,您需要编辑Server.py的第 281 行Client.py的第 38 行以匹配您想要的主机。一旦一切正常,如果您打算让它继续运行并从外部世界访问它,您应该使用 LetsEncrypt 或类似工具来保护它。
  • 将以下文件和文件夹上传到您要用于服务器的 UP Squared 或 Raspberry Pi 3。
model/test/
model/classes.txt
model/confs.json
tools
igraph
Server.py
  • 打开终端并导航到包含 Server.py 的文件夹,然后发出以下命令。这将启动服务器并等待接收图像进行分类。
$ python3.5 Server.py
  • 如果您已完成上述所有步骤,您现在可以使用以下命令在您的开发计算机上启动客户端:
$ python3.5 Client.py

这会将阳性和阴性组织学幻灯片发送到 Raspberry Pi 3 / UP Squared,后者将返回预测。

!! Welcome to IDC Classification Client, please wait while the program initiates !!
-- Running on Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609]
-- Imported Required Modules
-- IDC Classification Client Initiated
{'Response': 'OK', 'ResponseMessage': 'IDC Detected!', 'Results': 1}
{'Response': 'OK', 'ResponseMessage': 'IDC Not Detected!', 'Results': 0}
* Running on http://0.0.0.0:7455/ (Press CTRL+C to quit)
-- IDC CLASSIFIER LIVE INFERENCE STARTING
-- STARTED: :  2018-04-24 14:25:36.465183
-- Loading Sample
-- Loaded Sample
-- DETECTION STARTING
-- STARTED: :  2018-04-24 14:25:36.476371
-- DETECTION ENDING
-- ENDED:  2018-04-24 14:25:38.386121
-- TIME: 1.9097554683685303
TASS Identified IDC with a confidence of 0.945
-- Published: 2
-- Published to Device Warnings Channel
-- Published: 3
-- Published to Device Sensors Channel
*******************************************************************************
inception-v3 on NCS
*******************************************************************************
1 1 0.945
0 0 0.05542
*******************************************************************************
-- IDC CLASSIFIER LIVE INFERENCE ENDING
-- ENDED:  2018-04-24 14:25:38.389217
-- TESTED:  1
-- IDENTIFIED:  1
-- TIME(secs): 1.9240257740020752
192.168.1.40 - - [24/Apr/2018 14:25:38] "POST /api/infer HTTP/1.1" 200 -
-- IDC CLASSIFIER LIVE INFERENCE STARTING
-- STARTED: :  2018-04-24 14:25:43.422319
-- Loading Sample
-- Loaded Sample
-- DETECTION STARTING
-- STARTED: :  2018-04-24 14:25:43.432647
-- DETECTION ENDING
-- ENDED:  2018-04-24 14:25:45.310354
-- TIME: 1.877711534500122
-- Published: 4
-- Published to Device Warnings Channel
-- Published: 5
-- Published to Device Sensors Channel
*******************************************************************************
inception-v3 on NCS
*******************************************************************************
0 0 0.9873
1 1 0.01238
*******************************************************************************
-- IDC CLASSIFIER LIVE INFERENCE ENDING
-- ENDED:  2018-04-24 14:25:45.313174
-- TESTED:  1
-- IDENTIFIED:  0
-- TIME(secs): 1.89084792137146
192.168.1.40 - - [24/Apr/2018 14:25:45] "POST /api/infer HTTP/1.1" 200 -

构建物联网连接警报

 
poYBAGSAiDeAIM_rAATuPpFD8xQ041.jpg
 

下一步是设置您的 Raspberry Pi 3,以便 IDC 服务器可以通过 IoT JumpWay 与其通信。为此,我已经为 IoT JumpWay Raspberry Pi 开发套件 IoT 警报创建了一个教程,它将指导您完成此过程。唯一的区别是你不需要设置Python命令应用程序,因为在这个项目中,IDC服务器将取代Python命令应用程序,为了节省时间,请只按照Device.py而不是Application.py的步骤. 您需要取消注释第 104 - 107 行以确保 LED 和蜂鸣器在一段时间后关闭,您可以更新第 107 行以设置让它们运行的​​时间量。

您将在以下链接中找到教程:IoT JumpWay Raspberry Pi Dev Kit IoT Alarm

完成该教程并设置设备后,请返回此处完成最后的集成步骤。

设置你的规则

您现在已准备好执行最后的步骤,此时您应该已设置好所有内容,并且您的 Raspberry Pi 开发套件 IoT Alarm 应该正在运行并连接到 IoT JumpWay 以等待指令。

接下来我们将设置允许 IDC 服务器自主控制您的 Raspberry Pi Dev Kit IoT Alarm 的规则。返回 IDC 设备编辑页面。向下滚动到您添加相机节点的下方,您将看到您可以添加规则。

 
poYBAGSAiDqAdTrcAAEl9mQa7NM470.png
 

我们要添加的规则如下:

  • 当识别到 IDC 时,打开红色 LED。
  • 当识别到 IDC 时,打开蜂鸣器。
  • 当未识别到 IDC 时,点亮蓝色 LED。

这些事件将由 IDC 分类器/服务器发送的警告消息触发,因此在On Event Of下拉列表中,选择WARNING 然后您需要选择您添加到 IDC 设备的摄像头节点,因为这是警告将来自的传感器。接下来在With Warning Of中选择RECOGNIZED ,这意味着当 IoT JumpWay 收到 IDC 已被识别的警告消息时将触发规则,然后Take The Following Action部分选择Send Device Command ,选择 Raspberry Pi Dev Kit IoT Alarm 作为设备,红色 LED 作为传感器/执行器,TOGGLE作为动作并作为命令。这将告诉树莓派在检测到 IDC 时打开红灯,对蜂鸣器重复此过程。最后对蓝色 LED 重复 LED 命令,但With Warning Of中使用NOT RECOGNIZED并选择代表您在 Raspberry Pi 上设置的蓝色 LED 的 ID。

查看您的数据

当程序处理图像时,它会发送与IoT JumpWay相关的传感器和警告数据您将能够访问IoT JumpWay Developers Area中的数据登录开发人员专区后,访问IoT JumpWay 定位设备页面,找到您的设备,然后访问传感器数据页面以查看从设备发送的数据。您还可以在命令选项卡下的 Raspberry Pi 设备页面中查看 Raspberry Pi 的命令消息。

 
 
 
 
pYYBAGSAiD2AZKA3AALF0UJ0-FI734.png
 
1 / 2
 

错误/问题

请随时为您在使用此问题或任何其他与英特尔® 相关的 IoT JumpWay 问题时遇到的错误和一般问题创建问题。在您的 IoT 项目中使用 IoT JumpWay 时,您还可以使用问题区域寻求一般帮助。

 

 
 
 

 


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

评论(0)
发评论

下载排行榜

全部0条评论

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