深度学习

理解和使用深度学习网络

医学影像学深度学习:COVID-19检测

我很高兴发表另一篇文章巴拉斯纳拉亚南代顿大学研究所(UDRI),LinkedIn简介
作者:博士。拉塞尔·c·难的,代顿大学(UD)
博士。巴拉斯纳拉亚南2013年和2017年分别毕业于戴顿大学(UD)电气工程专业,获理学硕士和博士学位。他目前在UDRI软件系统组作为欧洲经委会部门在UD。他的研究兴趣包括深度学习,机器学习,计算机视觉和模式识别。
在这篇博客中,我们应用了一种基于深度学习(DL)的技术,利用MATLAB在胸片上检测COVID-19。

背景

冠状病毒病(COVID-19)是人类在2019年发现疾病的新菌株,从未在过去已经确定。冠状病毒是一个大家族的病毒,导致患者从普通感冒到先进的呼吸道症状,例如中东呼吸综合征(MERS-COV)和严重急性呼吸系统综合症(SARS-COV)的疾病。许多人目前受到影响,并正在世界各地的治疗造成全球大流行。仅在美国,1.6亿至2.14亿人可能被感染过COVID-19疫情的过程中(https://www.nytimes.com/2020/03/13/us/coronavirus-death-estimate.html)。一些国家已宣布全国进入紧急状态,并隔离了数百万人。这里是冠状病毒如何影响人的详细文章:https://www.nytimes.com/article/coronavirus-body-symptoms.html
检测诊断工具向医生提供有价值的第二意见,并协助他们进行筛查。这种机制也有助于迅速向医生提供结果。在这篇博客中,我们应用了一种基于深度学习(DL)的技术,利用MATLAB在胸片上检测COVID-19。
COVID-19数据集在这个博客使用的是由策划约瑟夫·科恩博士,蒙特利尔大学博士后研究员。多亏了文章通过阿德里安Rosebrock博士为使这一胸片数据集可达世界各地的研究人员和呈现使用DL前期工作。请注意,我们只利用X射线图像。您应该能够从文章直接下载图像。从网站上下载的ZIP文件,并将其解压到一个名为“Covid 19”文件夹后,我们每班一个子文件夹中的“数据集”。标签“Covid”表示COVID-19的在患者中的存在和“正常”否则。因为,我们有两个班的平均分布(25个图像),这里没有阶级的不平衡问题。

加载数据集

首先,使用imageDatastore。这是一个计算效率高的函数加载图像及其标签进行分析。
%明显工作区清晰;关闭所有;clc;%图像数据路径-请相应地修改您的路径数据通路=“数据集”;%的图像数据存储区imd = imageDatastore (datapath公司,……“IncludeSubfolders”,真的,…“LabelSource”、“foldernames”);%确定分头总分割=每个标签(imds)

形象化图像

让我们可视化这些图像,看看每个类的图像是如何不同的。它还将帮助我们确定可用于区分这两个类的分类技术的类型。根据图像,我们可以识别预处理技术,这将有助于我们的分类过程。我们还可以根据类内的相似性和类间的差异来确定可以用于研究的CNN架构的类型。
%图像数num_images =长度(imds.Labels);%可视化随机图像烫发= randperm(NUM_IMAGES,6);图;对于IDX = 1:长度(烫发)副区(2,3,IDX);imshow(imread(imds.Files {烫发(IDX)}));标题(sprintf的( '%s' 的,imds.Labels(烫发(IDX))))端
为了简化DL体系结构的分类过程,我们应用了简单的预处理技术,并在本文的最后提供了该函数。

K-折叠验证

正如你已经知道,有一组有限的数据集提供的图像,我们分裂成集10倍进行分析,即10种不同的算法,将使用不同的一组从数据集图像的培训。这种类型的验证研究将为我们提供我们的表现更好的估计相比,典型的保持退出验证方法。
我们在这个博客中采用了ResNet-50架构,因为它已经被证明对各种医学成像应用非常有效[1,2]。
折叠次数num_folds = 10;对于每个折叠%循环对于fold_idx = 1:num_folds fprintf中( '处理中的%d褶皱\ n%d',fold_idx,num_folds);%测试指数当前倍test_idx = fold_idx:num_folds:NUM_IMAGES;%当前折叠的测试用例imdsTest =子集(IMDS,test_idx);%列车指数当前倍train_idx=setdiff(1:长度(imds.Files),test_idx);为当前折叠训练箱子train_idx imdsTrain =子集(imd);%ResNet架构净= resnet50;lgraph = layerGraph(净值);清网;类别数量%numClasses=numel(类别(imdsTrain.Labels));%新可学习层newLearnableLayer = fullyConnectedLayer(numClasses,... '名称', 'new_fc',... 'WeightLearnRateFactor',10,... 'BiasLearnRateFactor',10);用新图层替换最后一层lgraph = replaceLayer (lgraph fc1000, newLearnableLayer);newsoftmaxLayer = softmaxLayer(“名字”,“new_softmax”);lgraph = replaceLayer (lgraph fc1000_softmax, newsoftmaxLayer);newClassLayer = classificationLayer(“名字”,“new_classoutput”);lgraph = replaceLayer (lgraph ClassificationLayer_fc1000, newClassLayer);%预处理技术imdsTrain.ReadFcn = @(文件名)preprocess_Xray(文件名);imdsTest.ReadFcn = @(文件名)preprocess_Xray(文件名);%培训选项,我们选择了一个迷你小批量由于有限的图像选择= trainingOptions(“亚当”,…‘MiniBatchSize MaxEpochs, 30日,8日……“洗牌”、“every-epoch’,……“InitialLearnRate”, 1的军医,…“详细”,假的,…“阴谋”,“训练进步”);%数据增强增强因子= imageDataAugmenter(... 'RandRotation',[ -  5 5], 'RandXReflection',1,... 'RandYReflection',1 'RandXShear',[ -  0.05 0.05], 'RandYShear',[ -  0.05 0.05]);为ResNet架构调整所有训练映像的大小到[224 224]auimds = augmentedImageDatastore([224],imdsTrain,' dataaug沉着',augmenter);%的培训netTransfer = trainNetwork (auimds、lgraph选项);为ResNet架构调整所有测试图像的大小到[224 224]augtestimds = augmentedImageDatastore([224],imdsTest);%每个病例的测试及其相应的标签和后验[predicted_labels test_idx)、后(test_idx:)) = (netTransfer augtestimds)进行分类;保存为每个折叠获得的独立ResNet架构保存(sprintf('ResNet50_%d_folds',fold_idx,num_folds','netTransfer','test_idx','train_idx');%澄清不必要的变数clearvars -除了fold_idx num_folds num_images predicted_label后imds netTransfer;结束

在训练时,每个折叠将显示一个训练图,为了简单起见,这里仅显示最后的训练图,即10折中的10折。

绩效研究

让我们来衡量我们的算法的性能在混淆矩阵的条款 - 该指标也给出了性能的一个好主意,在精确度和召回条款。我们认为,整体精度是一个很好的指标,因为在这项研究中使用的测试数据集是均匀分布的(属于每个类别的图像而言)。
混淆矩阵
%实际标签actual_labels = imds.Labels;%混淆矩阵figure;plotconfusion(实际标签,预测标签)title('混淆矩阵:ResNet');
ROC曲线
ROC会根据假阳性和检出率协助医生选择手术部位。
test_labels =双(标称(imds.Labels));%ROC曲线-我们的目标类是这个场景中的第一类[fp_rate tp_rate T, AUC] = perfcurve (test_labels后(:1)1);图;情节(fp_rate tp_rate, ' b - ');网格;包含(“假阳性率”);ylabel(检出率);
ROC曲线值之下%面积拍卖

类活动映射

我们想象这些网络使用不同的代码COVID-19情况下,类激活映射(CAM)的结果://www.tianjin-qmedu.com/help/deeplearning/examples/investige-network-predictions-using-class-activation-mapping.html. 这将有助于为医生提供算法决策背后的见解。
以下是各种情况下的结果:

对其他公共数据集的测试

为了进一步研究和分析该算法的性能,我们确定了在没有任何COVID-19标签的情况下,其他公共数据集的COVID-19的概率。我们利用文献[2]中放射科医生标记为正常、细菌性肺炎或病毒性肺炎的病例。如上所述,每个网络都在COVID-19数据集的不同图像集上进行训练。任何covid后验值大于0.5的图像都被认为是假阳性(FP)。结果表明,该算法具有较高的特异性和敏感性。在单核GPU上,每个测试用例花费的时间接近13毫秒。

结论

在这个博客中,我们提出了一个简单的基于深度学习的COVID-19 CAD分类方法。使用ResNet的分类算法性能较好,总体精度和AUC较高。转移学习方法的性能明确重申了基于CNN的分类模型在特征提取方面的优越性。利用新的标记图像集可以很容易地对算法进行再训练,进一步提高算法的性能。将这些结果与其他现有的体系结构相结合,将在AUC和整体精度方面提供性能上的提升。从计算(内存和时间)和性能两方面对这些算法进行全面的研究,可以为主题专家提供基于他们选择的算法。CAD将对医生进行COVID-19筛选有很大帮助,并将有助于提供宝贵的第二意见。

参考文献

[1] Narayanan, B. N., De Silva, M. S., Hardie, R. C., Kueterman, N. K., & Ali, R.(2019)。“理解医学成像应用的深度神经网络预测”。arXiv预印本arXiv: 1912.09621。
[2] Narayanan,B.N.,Davuluru,V.S.P.和Hardie,R.C.(2020年3月)。”两阶段深度学习架构在肺部检查和胸片诊断中的应用”。《医疗成像2020:医疗、研究和应用的成像信息学》(第11318卷,第113180G页)。国际光学和光子学学会。

预处理功能

函数Iout = preprocess_Xray(文件名)%该功能通过将其转化成预处理给定的X射线图像%灰度(如果需要)和随后转换为3通道图像以适应%现有的深度学习架构作者:Barath Narayanan%日期:2020年3月17日%读取文件名I=imread(文件名);有些图像可能是RGB,转换成灰度如果〜ismatrix(I)I = rgb2gray(I);结束%复制图像3次以创建RGB图像Iout =猫(3,我,我,我);结束
关于这篇文章,你有什么问题要问Barath吗?请在下方留言
|

评论

若要留言,请单击在这里登录MathWorks帐户或创建新帐户。