IDC 是最常见的乳腺癌形式之一。癌症从乳房的乳管开始并侵入周围组织。根据美国癌症协会的数据,这种形式的癌症约占所有乳腺癌诊断的 80%,仅在美国,每年就有超过 180,000 名女性被诊断出患有 IDC。
使用计算机视觉和物联网的浸润性导管癌 (IDC) 分类结合了计算机视觉和物联网,为研究人员、医生和学生提供了一种方法来训练带有标记的乳腺癌组织学图像的神经网络,以检测浸润性导管癌 (IDC)看不见/未标记的图像。
该项目使用英特尔® Movidius的强大功能,并使用经过自定义训练的Inception V3 模型在本地和通过服务器/客户端进行图像分类。IoT 通信由IoT JumpWay提供支持,并在处理本地图像或通过 API 发送的图像后发布结果。
这是我创建的一个项目,作为我的一个面部识别项目的扩展,我建议有兴趣了解计算机视觉用例的开发人员、医学研究人员和学生或医学行业的专业人士使用它评估它是否可以帮助他们并扩展。这并不意味着可以替代使用而不是寻求专业帮助。我是开发人员,不是医生或癌症专家。
使用计算机视觉和物联网进行浸润性导管癌 (IDC) 分类由 7 个核心应用程序组成:
您需要做的第一件事是在您的开发设备上安装 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 ,分类器将使用它对本地图像或通过我们将创建的 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
在开始之前,您应该遵循一些教程,尤其是如果您是第一次使用IoT JumpWay Developer Program 。如果您还没有,则需要一个IoT JumpWay Developer Program 开发者帐户,并在开始创建 IoT 设备之前设置一些基础知识。访问以下IoT JumpWay 开发人员计划文档(阅读/设置 5-10 分钟)并查看引导您完成注册和设置位置空间、区域、设备和应用程序的指南(阅读约 5 分钟)。
接下来在您的 Raspberry Pi 3 / UP Squared 上安装 IoT JumpWay Python MQTT 客户端。为此,您可以执行以下命令:
$ pip3 install JumpWayMQTT
您将需要编辑您的设备并添加允许它与网络上的其他设备和应用程序自主通信的规则,但目前,这些是此时需要执行的唯一步骤。
按照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 的文件夹中找到这些文件。
对于本教程,我使用了来自 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。
model
tools
DevCloudTrainer.ipynb
DevCloudTrainer.py
Eval.py
上传后,按照DevCloudTrainer.ipynb中的说明进行操作 ,此笔记本将帮助您对数据进行排序、训练模型并对其进行评估。
在 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
训练完成后,您需要将model/DevCloudIDC.pb和model/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
一旦 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
现在我们都经过培训和测试,是时候设置服务 API 的服务器了。为此,我提供了Server.py和Client.py
以下说明将帮助您设置服务器并测试正面和负面预测:
model/test/
model/classes.txt
model/confs.json
tools
igraph
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 -
下一步是设置您的 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 设备编辑页面。向下滚动到您添加相机节点的下方,您将看到您可以添加规则。
我们要添加的规则如下:
这些事件将由 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 的命令消息。
请随时为您在使用此问题或任何其他与英特尔® 相关的 IoT JumpWay 问题时遇到的错误和一般问题创建问题。在您的 IoT 项目中使用 IoT JumpWay 时,您还可以使用问题区域寻求一般帮助。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !