深度学习

理解和使用深度学习网络

深度学习用于医学成像:COVID-19检测

我很高兴发表另一篇文章Barath Narayanan代顿大学研究所(UDRI),LinkedIn的资料
作者:博士。拉塞尔·c·难的代顿大学
博士。Barath Narayanan2013年和2017年分别从代顿大学(UD)获得电气工程硕士和博士学位。他目前担任联合任命的研究科学家UDRI的软件系统组并作为附属教员ECE部门在特拉华大学。他的研究方向包括深度学习、机器学习、计算机视觉和模式识别。
在本博客中,我们使用MATLAB在胸片上应用基于深度学习(DL)的技术来检测COVID-19。

背景

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

加载数据集

让我们从使用加载数据库开始imageDatastore.它是一个计算效率很高的函数,可以加载图像及其标签进行分析。
%明显工作区清晰;关闭所有;clc;%图像数据路径-请相应地修改您的路径datapath公司=“数据集”;%的图像数据存储imd = imageDatastore (datapath公司,……“IncludeSubfolders”,真的,…“LabelSource”、“foldernames”);决定分开total_split = countEachLabel (imd)

可视化图像

让我们可视化这些图像,看看每个类的图像有何不同。它还将帮助我们确定可用于区分这两个类别的分类技术的类型。基于图像,我们可以识别预处理技术,这将有助于我们的分类过程。我们还可以根据班级内的相似性和班级间的差异来确定可以用于研究的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-fold验证

正如您已经知道的,这个数据集中可用的图像有限,我们将数据集分成10倍进行分析,即使用数据集中的不同图像集将训练10种不同的算法。与典型的保留验证方法相比,这种类型的验证研究将为我们提供更好的性能评估。
我们在本博客中采用ResNet-50架构,因为它已被证明对各种医学成像应用非常有效[1,2]。
%折叠数num_folds = 10;%循环每一次折叠for fold_idx=1:num_folds fprintf('在%d折叠中处理%d \n',fold_idx,num_folds);%测试当前折叠指数test_idx = fold_idx: num_folds: num_images;当前折叠的测试用例test_idx imdsTest =子集(imd);%训练当前折叠的索引train_idx = setdiff(1:长度(imds.Files) test_idx);%为当前折叠训练案例train_idx imdsTrain =子集(imd);% ResNet架构网= resnet50;lgraph = layerGraph(净);清楚净;类别数%numClasses =元素个数(类别(imdsTrain.Labels));%新的可学习层newLearnableLayer = fulllyconnectedlayer (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 224],imdsTrain,'DataAugmentation',augmenter);%的培训netTransfer = trainNetwork (auimds、lgraph选项);ResNet架构调整所有测试图像的大小为[224 224]augtestimds = augmentedImageDatastore([224 224],imdsTest);%测试及其对应的标签和每个案例的后验[predicted_labels test_idx)、后(test_idx:)) = (netTransfer augtestimds)进行分类;%保存每次折叠获得的独立ResNet架构保存(sprintf (ResNet50_ % d_among_ % d_folds, fold_idx, num_folds),‘netTransfer’,‘test_idx’,‘train_idx’);%清除不必要的变量clearvars -except fold_idx num_folds num_images predicted_labels后imds netTransfer;结束

在训练时,每次折叠都会显示一个训练图,为了简洁起见,这里只显示最终的训练图,折叠10个中的10个。

性能研究

让我们根据混淆矩阵来衡量我们算法的性能——这个指标也能很好地反映精确度和查全率方面的性能。我们认为总体精度是一个很好的指标,因为本研究中使用的测试数据集是均匀分布的(就属于每个类别的图像而言)。
混淆矩阵
%实际标签actual_labels = imds.Labels;%混淆矩阵图;plotconfusion(actual_labels,predicted_labels') title('Confusion Matrix: 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曲线值下的面积AUC

类活动映射

我们使用以下代码对不同COVID-19病例的这些网络的类激活映射(CAM)结果进行可视化://www.ru-cchi.com/help/deeplearning/examples/investigate-network-predictions-using-class-activation-mapping.html.这将有助于为医生提供算法决策背后的见解。
以下是不同情况下得到的结果:

在其他公开可用的数据集中进行测试

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

结论

在这篇博客中,我们提出了一种简单的基于深度学习的CAD分类方法。基于ResNet的分类算法具有较高的总体精度和AUC。迁移学习方法的表现清楚地重申了基于CNN的分类模型在提取特征方面的良好表现。算法可以很容易地用新的标记图像集重新训练,以进一步提高性能。将这些结果与其他现有的体系结构相结合,将在AUC和总体精度方面提高性能。对这些算法在计算(内存和时间)和性能方面的全面研究为主题专家提供了基于他们的选择来选择算法的依据。CAD将极大地帮助医生进行COVID-19筛查,并有助于提供有价值的第二意见。

参考文献

[1]纳拉亚南,B. N,德·席尔瓦,m.s.,哈迪,R. C,库特曼,N. K,和阿里,R.(2019)。“理解深度神经网络预测在医学成像中的应用”。arXiv预印本arXiv: 1912.09621。
[2]纳拉亚南,B. N.,达武鲁,V. S. P.和哈迪,R. C.(2020年,3月)。“两阶段深度学习架构在胸部x线片中的肺炎检测和诊断”。在医学成像2020:医疗保健、研究和应用的成像信息学(11318卷,113180G页)。国际光学与光子学学会。

预处理功能

函数Iout = preprocess_Xray(filename)此函数对给定的x射线图像进行预处理,将其转换为%灰度如果需要,然后转换为3通道图像来适应现有的深度学习架构作者:Barath Narayanan%日期:3/17/2020%读取文件名I = imread(文件名);有些图像可能是RGB,将它们转换为灰度如果~ ismatrix(我)我= rgb2gray(我);结束复制镜像3次,创建RGB镜像Iout =猫(3,我,我,我);结束
你对这个帖子有什么问题要问Barath吗?请在下方留言。
|
  • 打印
  • 发送电子邮件

评论

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

Baidu
map