人工智能

应用机器学习和深度学习

医学成像的深度学习:疟疾检测

本文来自Barath Narayanan美国代顿大学研究所。
博士。Barath Narayanan2013年和2017年分别毕业于美国代顿大学(UD),获得电气工程硕士和博士学位。他目前担任联合任命的副研究科学家UDRI的软件系统组并作为附属教员ECE部门在特拉华大学。他的研究方向包括深度学习、机器学习、计算机视觉和模式识别。
数据科学是当前计算机科学领域的热点之一。机器学习(ML)在自动驾驶、制造业、医学成像等各种应用领域中一直处于上升趋势。计算机辅助检测与诊断(CAD)在医学影像中的应用一直是一个备受关注的研究领域。全世界有32亿人面临感染疟疾的风险(https://www.childfund.org/infographic/malaria/).检测和诊断工具为医生提供了有价值的第二意见,并协助他们进行筛查。在这篇博客中,我们将应用基于深度学习(DL)的技术,使用MATLAB在细胞图像上检测疟疾。疟原虫疟疾是一种寄生原生动物,可引起人类疟疾,细胞图像上的疟原虫CAD将有助于显微镜工作人员并增强他们的工作流程。
如果您正在使用代码的任何部分进行研究,请引用下面的文章。
巴拉特·纳拉亚南Redha阿里,罗素·c·哈迪“用于细胞图像疟疾检测的机器学习和深度学习架构的性能分析”,SPIE 11139,机器学习应用,111390W(2019年9月6日);https://doi.org/10.1117/12.2524681
疟疾数据集由美国国立卫生研究院(NIH)公开提供。该数据集包含27,558张图像,属于两个类别(13,779张属于被感染的,13,799张属于未感染的)。所有这些图片都是由Mahidol-Oxford热带医学研究单位的一位专家手动注释的。从网站下载ZIP文件并将它们解压缩到名为“cell_images”的文件夹后,我们在“cell_images”中每个类都有一个子文件夹。寄生表明疟原虫的存在,疟原虫是一种寄生原生动物,表明疟疾的存在。因为两个职业的分配是平等的,所以不存在职业不平衡的问题。

加载数据库

让我们从使用加载数据库开始 imageDatastore .这是一个计算效率很高的函数,可以加载图像及其标签进行分析。
%图像数据路径-请相应地修改您的路径datapath公司=“cell_images”;%镜像数据存储imd = imageDatastore (datapath公司,……“IncludeSubfolders”,真的,…“LabelSource”、“foldernames”);决定拆分total_split = countEachLabel (imd)
total_split =2×2表
标签
1 寄生 13779
2 未受感染的 13779

视觉化图像

让我们可视化这些图像,看看每个类的图像有什么不同。它还将帮助我们确定可以用于区分这两个类别的分类技术的类型。基于这些图像,我们可以识别有助于我们分类过程的预处理技术。我们还可以根据类内的相似性和类间的差异来确定可以用于研究的CNN体系结构的类型。例如,如果我们看到两个类之间有一个简单的区别(比如区分三角形和正方形),我们可以使用具有最小层的简单CNN架构。我们已经为这个应用程序提出了一个简单的CNN体系结构 在本文中,我们强调迁移学习。
%图像数量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))))结束
您可以观察到,大多数被寄生的图像都包含一个“红色点”,这表明疟原虫的存在。然而,有一些图像是很难区分的。您可以深入研究数据集以检查一些复杂的示例。此外,由于这些图像是使用不同的显微镜以不同的分辨率捕获的,因此图像颜色也有一个光谱。金宝搏官方网站在下一节中,我们将通过预处理图像来解决这些问题。

预处理

为了简化我们的深度学习架构的分类过程,我们应用颜色恒定技术来解决基于颜色的问题,并根据我们的深度学习架构的需要将图像调整为所需的大小。我们的预处理函数附在本文的末尾。
可视化预处理图像
图;对于idx=1:20 subplot(4,5,idx);imshow(preprocess_malaria_images(imds.Files{perm(idx)},[250 250]) title(sprintf('%s',imds.Labels(perm(idx)))) end . txt)
颜色恒常性有助于保持图像颜色的一致性,并有助于我们的分类算法。

培训、测试和验证

让我们把数据集分成训练、验证和测试。首先,我们将数据集分为80%(训练和验证)和20%(测试)两组。确保每个班级分成等量。
分割训练和测试数据集train_percent = 0.80;[imdsTrain, imdsTest] = splitEachLabel (imd, train_percent“随机”);%分开培训和验证valid_percent = 0.1;[imdsValid, imdsTrain] = splitEachLabel (imdsTrain valid_percent,“随机”);train_split = countEachLabel (imdsTrain);
这为每个类别提供了9921张火车图像、1102张验证图像和2756张测试图像:被感染的和未感染的。

深度学习方法

让我们采用迁移学习方法对细胞图像进行分类。在本文中,我使用AlexNet进行分类,您可以使用本文中提到的其他迁移学习方法或者您认为可能适合此应用程序的任何其他体系结构。
负载AlexNet网= alexnet;除了最后3层,其他图层都要转移layersTransfer = net.Layers (1: end-3);清除现有的alexnet架构清楚净;定义新层numClasses =元素个数(类别(imdsTrain.Labels));%新建图层layers=[layersTransfer fullyConnectedLayer(numClasses,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20) softmaxLayer classificationLayer];

预处理训练和验证数据集

或者,我们可以使用推荐的augumentedImageDatastore为了更快地调整大小和变换/结合修改数据集。
imdsTrain.ReadFcn = @(文件名)preprocess_malaria_images(文件名,(层(1).InputSize(1)层(1).InputSize (2)));imdsValid.ReadFcn = @(文件名)preprocess_malaria_images(文件名,(层(1).InputSize(1)层(1).InputSize (2)));

培训网络

我们将使用验证耐心为4作为停止标准。首先,我们将使用“MaxEpochs”作为我们训练的10,我们可以根据我们的训练进度进一步调整它。理想情况下,当训练过程停止时,我们希望验证性能较高。我们根据我们电脑的内存限制选择了128个迷你批量大小,你可以选择一个更大的迷你批量大小,但一定要相应地改变其他参数。
选择= trainingOptions(“亚当”,…“MiniBatchSize”,128年,…“MaxEpochs”10…“洗牌”、“every-epoch’,……“InitialLearnRate”,1的军医,…ValidationData, imdsValid,……“ValidationFrequency”,50岁,“ValidationPatience”,4,……“详细”,假的,…“阴谋”,“训练进步”);%培训网络netTransfer = trainNetwork (imdsTrain层,选项);
看看训练进度,我们的模型没有欠拟合或过拟合的问题,而且训练得很好。训练和验证数据集的准确性约为96-97%。

测试

现在,让我们研究一下网络在测试集上的性能。
预处理类似于训练的测试用例imdsTest.ReadFcn = @(文件名)preprocess_malaria_images(文件名,(层(1).InputSize(1)层(1).InputSize (2)));使用分类命令预测测试标签[predicted_labels,后]= (netTransfer imdsTest)进行分类;

性能研究

让我们从混淆矩阵的角度来衡量我们算法的性能-这个指标也能很好地反映精度和查全率方面的性能。我们认为总体准确性是一个很好的指标,因为本研究中使用的测试数据集是均匀分布的(就属于每个类别的图像而言)。
%实际标签actual_labels = imdsTest.Labels;%混淆矩阵图;plotconfusion(actual_labels,predicted_labels) title('混淆矩阵:AlexNet');

ROC曲线

ROC将根据假阳性和检出率协助显微镜师选择其操作点。
test_labels =双(名义(imdsTest.Labels));% ROC曲线-我们的目标类是这个场景中的第一个类。[fp_rate tp_rate T, AUC] = perfcurve (test_labels后(:1)1);图;情节(fp_rate tp_rate, ' b - ');坚持;网格;xlabel('假阳性率');ylabel(检出率);
ROC值下的面积AUC
Auc = 0.9917

请查看演示这里有一些测试用例!我们使用类激活映射来可视化结果,以分析我们的网络所做的决定,并为显微镜学家提供见解。

结论

在这篇博客中,我们提出了一种简单的基于深度学习的疟原虫CAD分类方法。使用AlexNet的分类算法和使用颜色恒定性的预处理算法表现相对较好,总体准确率为96.4%,AUC为0.992(由于随机分裂,数值会有所不同)。在,我们研究了我们自己的简单CNN, AlexNet, ResNet, VGG-16和DenseNet在同一组训练和测试用例中的性能。迁移学习方法的性能清楚地重申了基于CNN的分类模型在提取特征方面的良好表现。算法可以很容易地用新的标记图像集重新训练,以进一步提高性能。结合所有这些架构的结果,在AUC和整体精度方面都提供了性能的提升。在计算(内存和时间)和性能方面对这些算法进行全面研究,为主题专家根据他们的选择选择算法提供了依据。CAD将极大地帮助显微镜学家进行疟疾筛查,并有助于提供有价值的第二意见。

预处理功能

函数Iout = preprocess_malaria_images(文件名,desired_size)这个函数使用颜色恒常性对疟疾图像进行预处理%技术,然后将它们重新塑造成所需大小的图像作者:Barath Narayanan读取图像I = imread(文件名);%有些图像可能是灰度的,复制图像3次即可%创建RGB镜像。if ismatrix(I) I=cat(3,I,I,I);结束%转换为Double用于计算我=双(I);%平均计算Ir =我(::1);mu_red =意味着(Ir (:));Ig =我(:,:2);mu_green =意味着(Ig (:));Ib =我(:,:,3);mu_blue =意味着(Ib (:));mean_value = (mu_red + mu_green + mu_blue) / 3;%缩放图像的颜色恒定Iout(:: 1) =我(:,:1)* mean_value / mu_red;Iout(:: 2) =我(:,:2)* mean_value / mu_green;Iout(:: 3) =我(:,:,3)* mean_value / mu_blue;将它转换回uint8Iout = uint8 (Iout);调整图像大小Iout = imresize (Iout [desired_size (1) desired_size (2)));结束
我要感谢Barath花时间撰写这篇博文,并与我们分享他的详细代码。特别感谢共同作者Redha阿里Russell C. Hardie博士,代顿大学(UD)。请查看信号与图像处理实验室网页,以了解更多关于这个小组的工作。
|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。