无所不能的 MATLAB

糖尿病性视网膜病变 (DR) 是导致失明的一大元凶,全世界有 9,300 万人受此疾病困扰。DR 是一种与糖尿病有关的眼部疾病。在早期对 DR 进行检测和分级有助于预防永久性视力丧失。在视网膜病变筛查过程中进行自动检测和分级,则有助于提供宝贵的第二诊疗意见。来自代顿大学研究院(UDRI))的 Barath Narayanan 博士将为我们介绍使用深度卷积神经网络 (CNN) 来实现一种简单的基于迁移学习的 DR 检测方法。

作者:Barath Narayanan,代顿大学研究院 (UDRI)。

合著者:Russell C. Hardie 博士,代顿大学 (UD)。

Barath Narayanan 博士毕业于代顿大学 (UD),分别于 2013 年和 2017 年获得理学硕士学位和电气工程博士学位。他目前担任 UDRI 软件系统小组研究科学家,兼任代顿大学 (UD) 电子和计算机工程 (ECE) 系客座教授。他的研究方向包括深度学习、机器学习、计算机视觉和模式识别。

数据集

Kaggle 失明检测竞赛数据集(APTOS 2019 Datasetwww.kaggle.com/c/aptos2019-blindness-detection)包含单独的训练和测试用例。在这篇博文中,我们只利用训练数据集来研究和估计性能。这些影像采集于印度亚拉文眼科医院。训练数据集中包含 3,662 张影像,这些影像由临床专家标记为不同的类别(正常、轻度 DR、中度 DR、重度 DR 和增殖性 DR)。请注意,在这篇博文中,我们只关注 DR 的检测,如需分级架构的详细信息,请参见我们的论文。

按类别进行数据分组

我们从 Excel 工作表中提取标签,将这些影像分到"Yes"和"No"两个文件夹中,因为本文只关注 DR 的检测。用于划分数据类别的辅助函数代码位于本文结尾处。

加载数据库首先,使用

imageDatastore(www.mathworks.com/help/matlab/ref/matlab.io.datastore.imagedatastore.html) 加载数据库。该函数用于加载影像及其标签以执行分析,具有较高的计算效率。

算效率。

%Two-classDatapathtwo_class_datapath ='Train Dataset Two Classes';%ImageDatastoreimds=imageDatastore(two_class_datapath,...    'IncludeSubfolders',true,...    'LabelSource','foldernames');%Determine the split uptotal_split=countEachLabel(imds)

影像可视化

可视化影像,了解各个类之间的影像差异。这也有助于我们确定采用何种分类方法来区分两个类。根据影像,我们可以确定有助于完成分类的预处理方法。根据类内相似性及类间差异性,我们可以确定可用于研究的 CNN 架构类型。在这篇文章中,我们将使用 inception-v3 架构来实现迁移学习。您可以阅读我们的论文,了解各种预处理操作和其他现有架构的性能。

%Number of Imagesnum_images=length(imds.Labels);%Visualize random 20 imagesperm=randperm(num_images,20);figure;for idx=1:20        subplot(4,5,idx);    imshow(imread(imds.Files{perm(idx)}));    title(sprintf('%s',imds.Labels(perm(idx))))    end

训练、测试和验证

我们将数据集分为训练、验证和测试三个部分。首先,我们将数据集中的 80% 分为一组(训练和验证),20% 分为另一组(测试)。确保各组中两类的数量均衡。

%Split the TrainingandTestingDatasettrain_percent=0.80;[imdsTrain,imdsTest]=splitEachLabel(imds,train_percent,'randomize'); %Split the TrainingandValidationvalid_percent=0.1;[imdsValid,imdsTrain]=splitEachLabel(imdsTrain,valid_percent,'randomize');

这样,我们就得到以下计数:

深度学习方法

我们采用迁移学习方法来对视网膜影像进行分类。在这篇文章中,我将利用 Inception-v3 进行分类。您可以利用这篇论文中提到的其他迁移学习方法,或者您认为可能适合此应用的其他架构。如需使用其他现有网络进行迁移学习,可以参考我的 MathWorks 博文:AlexNet、ResNet。

训练我们将验证容忍度设为 3,作为停止条件。训练最开始,我们将"MaxEpochs"设为 2,但可以根据训练进度进一步调整。理想情况下,我们希望在训练过程停止时达到较高的验证性能。我们根据硬件内存限制将小批量大小设为 32,您也可以选更大的值,但要确保相应更改其他参数。

%Converting images to 299 x 299 to suit the architectureaugimdsTrain = augmentedImageDatastore([299299],imdsTrain);augimdsValid = augmentedImageDatastore([299299],imdsValid);%Set the training optionsoptions = trainingOptions('adam','MaxEpochs',2,'MiniBatchSize',32,...'Plots','training-progress','Verbose',0,'ExecutionEnvironment','parallel',...'ValidationData',augimdsValid,'ValidationFrequency',50,'ValidationPatience',3);netTransfer = trainNetwork(augimdsTrain,incepnet,options);

测试和性能评估

%Reshape the test images match with the network augimdsTest = augmentedImageDatastore([299299],imdsTest);%PredictTestLabels[predicted_labels,posterior]= classify(netTransfer,augimdsTest);%ActualLabelsactual_labels = imdsTest.Labels;%ConfusionMatrixfigureplotconfusion(actual_labels,predicted_labels)title('Confusion Matrix: Inception v3');
% ROC Curvetest_labels=double(nominal(imdsTest.Labels));[fp_rate,tp_rate,T,AUC]= perfcurve(test_labels,posterior(:,2),2);figure;plot(fp_rate,tp_rate,'b-');hold on;grid on;xlabel('False Positive Rate');ylabel('Detection Rate');

类激活映射结果

使用以下代码,将不同 DR 病例经过这些网络处理后得到的类激活映射 (CAM) 结果可视化:www.mathworks.com/help/deeplearning/examples/investigate-network-predictions-using-class-activation-mapping.html。这有助于医生了解算法决策背后的依据。以下是不同病例的相应结果:

结论本文介绍了一种基于深度学习的简单分类方法,可用于视网膜影像 DR 的计算机辅助诊断 (CAD)。在没有任何预处理的情况下,使用 Inception-v3 的分类算法表现相对出色,总体准确度为 98.0%,AUC 为 0.9947(结果可能会因随机拆分而异)。在这篇论文中,我们研究了各种现有 CNN 架构在不同预处理条件下用于同一组训练和测试用例集时的性能。综合各种架构的结果,将有助于从 AUC 和总体准确度两方面提高性能。如果能就计算量(内存和时间)和性能两方面综合研究这些算法,将有助于相关专家有所侧重地选择算法。此外,我们还在这篇论文中提出了 DR 检测和分级的创新架构方法。

辅助函数代码

按 DR 类别(Yes 或No)进行数据分组的代码从网站下载 ZIP 文件并解压到名为 train_images 的文件夹中。确保下载的是包含临床专家提供的真值标签的 Excel 工作表 train.csv,将其转换为 .xlsx 以用于此代码。我们从 Excel 工作表中提取标签,将这些影像分到"Yes"和"No"两个文件夹中,因为本文只关注 DR 的检测。

% Training Data pathdatapath='train_images';% Two-class Data pathtwo_class_datapath='Train Dataset Two Classes';% Class Namesclass_names={'No','Yes'};mkdir(sprintf('%s%s',two_class_datapath,class_names{1}))mkdir(sprintf('%s%s',two_class_datapath,class_names{2}))% Read the Excel Sheet with Labels[num_data,text_data]=xlsread('train.xlsx');% Determine the Labelstrain_labels=num_data(:,1);% Merge all labels marked into Mild, Medium, Severe and Proliferative DR % into a single category 'Yes' train_labels(train_labels~=0)=2;% Rest of the dataset belongs to 'No' categorytrain_labels(train_labels==0)=1;% Filenamefilename=text_data(2:end,1);% Now, write these images 2-folders 'Yes' or 'No' for us to develop a deep% learning architecture utilizing Deep learning toolbox% Determine the Files put them in separate folderfor idx=1:length(filename)       % You could uncomment if you would like to see live progress    %  fprintf('Processing %d among %d files:%s ',idx,length(filename),filename{idx})[/%]        % Read the image    current_filename=strrep(filename{idx}, char(39), '');    img=imread(sprintf('%s%s.png',datapath,current_filename));        % Write the image in the respective folder    imwrite(img,sprintf('%s%s%s%s.png',two_class_datapath,class_names{train_labels(idx)},'',current_filename));        clear img;    end

#医疗##科技##科技快讯##科技曼曼谈##matlab#

matlab network_无所不能的 MATLAB相关推荐

  1. 怎么把dll库写成MATLAB接口,如何在Matlab中应用动态连接库接口技术

    1 引言 Matlab是当前应用最为广泛的数学软件,具有强大的数值计算.数据分析处理.系统 分析.图形显示甚至符号运算等功能.利用这一完整的数学平台,用户可以快速实现十分 复杂的功能,极大地提高工程分 ...

  2. matlab 汽车 流场,matlab画流场图

    基于 Matlab 分布式工具箱的流场计算及其可视化 蔡群;周美莲;段杰峰;李青... 基于 MATLAB 和 CFD 数据库的流场可视化的实现 [J], 晏畅 5.基于 VB 与 MATLAB 混合 ...

  3. 目标层准则层MATLAB,层次分析法-MATLAB

    层次分析法-MATLAB 第八章 层次分析法 层次分析法(Analytic Hierarchy Process,简称AHP)是对一些较为复杂.较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全 ...

  4. matlab提excel文字,matlab读取excel文字

    数据导入| 将excel数据导入matlab_计算机软件及应用_IT/计算机_专业资料.将 excel 数据导入 matlab 一. 将 excel 文本放在 matlab 的 work 文件夹里面. ...

  5. matlab中step_使用MATLAB中bertool进行通信仿真

    MATLAB中的Communication System Toolbox中的bertool图像化工具bertool提供了极为方便的通信仿真环境以测试仿真模型的误比特率性能,并且可以很好地和理论值进行对 ...

  6. Matlab:序列分析法MATLAB代码

    Matlab:序列分析法MATLAB代码 目录 输出结果 设计代码 输出结果 更新-- 设计代码 ###下面所有带代码中的n值需要以自己输入的数据为准###1.简单一次滑动平均法预测MATLAB程序代 ...

  7. Matlab学习一本通,matlab基础教程

    链接:https://pan.baidu.com/s/1uTCbiRfIxcrt6lmiy6_QlQ  提取码:f2dn  Matlab学习一本通,matlab基础教程 <MATLAB R201 ...

  8. matlab dsp实验报告,matlab实验报告14.pdf

    matlab实验报告14 Matlab实验报告 院系名称 :信息科学与工程学院 专业班级 :通信工程 1303 指导老师 :陈科文 ,支国明 ,张金焕 ,周扬 学生姓名 : 学号 : 目录 实验一 熟 ...

  9. matlab完全自学一本通 pdf,matlab r2014a自学一本通 MATLAB R2014a完全自学一本通 中文pdf扫描版[125MB] 下载-脚本之家...

    MATLAB R2014a完全自学一本通面向MATLAB 的初中级读者,在介绍MATLAB R2014a 集成环境的基础上,对MATLAB 使用中常用的知识和工具进行了详细的介绍,书中各章均提供了大量 ...

最新文章

  1. 人脸检测--Grid Loss: Detecting Occluded Faces
  2. 智能车竞赛技术报告 | 智能车视觉 - 西南科技大学 - 西科二队
  3. Python爬虫(十)_XPath与lxml类库
  4. Eclipse不能导入工作区项目的解决和win10下JDK的path环境变量
  5. 购物小票 FoundPrice.java
  6. djang项目部署之IIS7部署
  7. Spring Boot + Mybatis——RowBoundsPlugin造成的[Mapped Statements collection already contains value]解决方案
  8. uniapp点击图片放大_手机做图片放大镜效果很难?看这里,分分钟就能学会!
  9. PowerPoint Storyboarding:Visual Studio 2012 RC带给开发者的秘密杀器
  10. c#中一个进程启动另一个进程并传递参数
  11. 邮政银行贷款迟还4个小时就造成信用逾期,如何解决?
  12. WindowsLinux常用命令笔记
  13. 于掌控板实现简单的抢答器系统
  14. jquery 处理json字符串
  15. nginx的虚拟用户以及负载均衡
  16. staitc 变量以及成员
  17. Nachos Lab3 同步机制
  18. c语言手写平衡二叉树非递归实现
  19. vivoy85a参数配置_vivo Y85手机详细配置参数和图鉴
  20. CCF题目:相邻数对

热门文章

  1. Linux系统下配置JDK环境变量
  2. .[算法]图论专题之最短路径
  3. CGAffineTransformMakeRotation 实现旋转
  4. python学习笔记26(python中__name__的使用)
  5. Delphi插件创建、调试与使用应用程序扩展
  6. C++的隐式转换和explicit关键字
  7. 使用SDL2中SDL_CreateWindow()函数时报错跳进wincore.cpp(wntdll.pbd not load)
  8. python 列表 extend append_Python中list操作之append、extend
  9. Python爬取网易云热歌榜所有音乐及其热评
  10. C语言之数组为参数传递表示指针(三十七)