在本博客中,我们使用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);网= 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]);auimds = augmentedImageDatastore([224 224],imdsTrain,'DataAugmentation',augmenter);netTransfer = trainNetwork (auimds、lgraph选项);augtestimds = augmentedImageDatastore([224 224],imdsTest);[predicted_labels test_idx)、后(test_idx:)) = (netTransfer augtestimds)进行分类;保存(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));[fp_rate tp_rate T, AUC] = perfcurve (test_labels后(:1)1);图;情节(fp_rate tp_rate, ' b - ');网格;包含(“假阳性率”);ylabel(检出率);
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)I = imread(文件名);如果~ ismatrix(我)我= rgb2gray(我);结束Iout =猫(3,我,我,我);结束
你对这个帖子有什么问题要问Barath吗?请在下方留言。
评论
如欲留言,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。