深度学习

理解和使用深度学习网络

糖尿病性视网膜病变检测

Post博士。Barath Narayanan,代顿大学研究所(UDRI)合著者:博士。拉塞尔·c·难的代顿大学(UD),Manawduge Supun De Silva、UD和纳撒尼尔·k·KuetermanUD。

介绍

糖尿病性视网膜病变(DR)是失明的主要原因之一,影响着世界各地超过9300万人。博士是一个眼科疾病与糖尿病有关。在早期检测和分级博士将有助于防止永久性视力丧失。自动检测和分级在视网膜筛查过程将有助于提供一个有价值的第二意见。在这个博客中,我们实现一个简单的基于transfer-learning使用深卷积神经网络(CNN)检测博士
请引用以下文章如果你使用代码的任何部分的研究:Kaggle盲检测的挑战的数据集(APTOS 2019数据集)包含单独训练和测试用例。在这个博客中,我们仅利用训练数据集来研究和预测性能。这些图像捕获亚拉文眼科医院,印度。训练数据集包含3662个图像标记为不同类别(正常、轻度博士温和的博士,博士,和增生性博士)的专家医生。注意,在这个博客,我们专注于检测博士,你可以找到关于我们的分级结构的更多细节

按类别分组数据

我们从excel表中提取标签和图像分类成2-folders“不”或“是的”,我们只专注于检测博士在这个博客。把数据分类的辅助代码的这篇文章。

加载数据库

让我们首先加载数据库使用imageDatastore。这是一个计算效率函数加载图片连同它的标签进行分析。
%两舱Datapath公司two_class_datapath =的训练数据集两类;%的图像数据存储imd = imageDatastore (two_class_datapath,……“IncludeSubfolders”,真的,…“LabelSource”、“foldernames”);%确定分手total_split = countEachLabel (imd)

可视化图像

让我们想象图片,看看图片每个类而有所不同。它还将帮助我们确定分类技术可以应用的类型区分两类。根据图片,我们可以识别预处理技术,将协助我们的分类过程。我们还可以确定CNN的类型体系结构研究,可以利用基于类内的相似之处和差异在类。在本文中,我们使用inception-v3实现转移学习架构。你可以我们的论文看不同的预处理操作的性能和其他建立架构。
%的图片num_images =长度(imds.Labels);% 20图像可视化随机烫= randperm (num_images 20);图;idx = 1:20次要情节(4、5、idx);imshow (imread (imds.Files{烫发(idx)}));标题(sprintf (“% s”, imds.Labels(烫发(idx))))

培训,测试和验证

我们将数据集分为训练、验证和测试。首先,我们把数据集分成组80%(培训&验证)和20%(测试)。确保将相等数量的每个类。
%的训练和测试数据集train_percent = 0.80;[imdsTrain, imdsTest] = splitEachLabel (imd, train_percent“随机”);%将培训和验证valid_percent = 0.1;[imdsValid, imdsTrain] = splitEachLabel (imdsTrain valid_percent,“随机”);
这让我们面临以下数量:
是的 没有
训练集: 1337年 1300年
验证设置: 144年 149年
测试集: 361年 371年

深度学习的方法

我们采用转移学习方法对视网膜图像进行分类。在这篇文章中,我利用Inception-v3分类,你可以利用其他转移学习方法如前所述或任何其他建筑,你认为可能适合这个应用程序。我MathWorks博客建立转移学习使用其他网络可以在这里找到:AlexNet,ResNet

培训

我们将利用验证耐心3的停止标准。首先,我们使用“MaxEpochs”作为我们的培训2,但我们可以调整它进一步基于我们的培训进度。理想情况下,我们想要验证性能高当训练过程停止。我们选择mini-batch大小为32基于硬件的内存限制,你可以选择一个更大的mini-batch大小但一定要相应改变其他参数。
%将图像转换为299 x 299适合架构augimdsTrain = augmentedImageDatastore ([299 - 299], imdsTrain);augimdsValid = augmentedImageDatastore ([299 - 299], imdsValid);%设置培训选项选择= trainingOptions(“亚当”、“MaxEpochs”2“MiniBatchSize”, 32岁的……“阴谋”,“训练进步”、“详细”,0,“ExecutionEnvironment”、“平行”,…augimdsValid‘ValidationData’,‘ValidationFrequency’, 50岁“ValidationPatience”, 3);netTransfer = trainNetwork (augimdsTrain、incepnet选项);

测试和性能评估

%重塑测试图像匹配网络augimdsTest = augmentedImageDatastore ([299 - 299], imdsTest);%预测测试标签[predicted_labels,后]= (netTransfer augimdsTest)进行分类;%实际标签actual_labels = imdsTest.Labels;%混淆矩阵图plotconfusion (actual_labels predicted_labels)标题(“混淆矩阵:《盗梦空间》v3”);
% ROC曲线test_labels =双(名义(imdsTest.Labels));[fp_rate tp_rate T, AUC] = perfcurve (test_labels后(:,2)2);图;情节(fp_rate tp_rate, ' b - ');坚持;网格;包含(“假阳性率”);ylabel(检出率);

类活动映射结果

我们可视化类激活映射(CAM)结果博士这些网络在不同情况下使用代码://www.tatmou.com/help/deeplearning/examples/investigate-network-predictions-using-class-activation-mapping.html。这将有助于提供见解医生的决定背后的算法。
这里有各种情况下的结果:

结论

在这个博客中,我们提出了一个简单的基于深度学习分类方法博士CAD的视网膜图像。分类算法使用没有任何预处理Inception-v3表现相对较好,总体精度98.0%和0.9947的AUC(结果可能会有所不同,因为随机分裂)。在的性能,我们研究了各种CNN建立体系结构相同的训练集和测试情况下不同预处理条件下。结合各种体系结构提供了一个提升的结果准确性的AUC和总体性能。这些算法的全面研究,无论是计算(内存和时间)和性能,允许主题专家做出明智的选择。此外,我们提出了新颖的体系结构方法博士的检测和分级。

关于作者

博士。Barath Narayanan毕业于女士和代顿大学的电气工程博士学位(UD)分别于2013年和2017年。他目前持有联合被任命为一个研究科学家UDRI软件系统集团作为一个兼职教员的ECE部门在特拉华大学。他的研究兴趣包括深度学习、机器学习、计算机视觉和模式识别。

辅助代码

博士代码分组数据的类别(是或否)

从网站下载ZIP文件后,提取一个文件夹叫“train_images”。确保下载excel表(火车。csv,把它转换成.xlsx标签代码)包含如此的专家医生。我们从excel表中提取标签和图像分类成2-folders“不”或“是的”,我们只专注于检测博士在这个博客。
%训练数据路径datapath公司= ' train_images \ ';%两级数据路径two_class_datapath = '训练数据集两类\ ';%的类名class_names ={‘不’,‘是的’};mkdir (sprintf (% s % s, two_class_datapath, class_names {1})) mkdir (sprintf (% s % s, two_class_datapath, class_names {2}))%与标签读取Excel表[num_data, text_data] = xlsread (“train.xlsx”);%确定标签train_labels = num_data (: 1);%合并所有标签标记为轻微、中等、严重和增殖%到一个单独的类别“是的”train_labels (train_labels ~ = 0) = 2;%的其他数据集属于“不”类别train_labels (train_labels = = 0) = 1;%文件名文件名= text_data(2:最终,1);%,现在写这些图像2-folders“是的”或“不”对我们开发一个深%的学习架构利用深度学习工具箱%确定文件把它们放在不同的文件夹idx = 1:长度(文件名)%你可以取消如果你想看到生活的进步%流('处理% d % d文件包括:% s \ n”, idx,长度(文件名),文件名{idx}) [/ %)%读取图像current_filename = strrep (char(39),文件名{idx} ");img = imread (sprintf (% s % s.png, datapath公司,current_filename));%写各自的文件夹中的图像imwrite (img sprintf (' % s % s % s % s.png ', two_class_datapath, class_names {train_labels (idx)},“\”, current_filename));清楚img;结束
|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。