在这篇博客中,我们将应用基于深度学习(DL)的技术,使用MATLAB在胸片上检测COVID-19。
背景
冠状病毒病(COVID-19)是2019年发现的一种新的人类疾病毒株,过去从未发现过。冠状病毒是一个庞大的病毒家族,可导致从普通感冒到中东呼吸综合征(MERS-COV)和严重急性呼吸综合征(SARS-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
检测和诊断工具向医生提供有价值的第二意见,并协助他们进行筛选。这种机制还有助于迅速向医生提供结果。在这篇博客中,我们将应用基于深度学习(DL)的技术,使用MATLAB在胸片上检测COVID-19。
的
COVID-19数据集在这个博客中使用的是由
高锟博士他是蒙特利尔大学的博士后。多亏了
文章通过
艾德里安·罗斯布洛克博士让全球的研究人员都能接触到胸片数据集,并使用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:长度(perm) subplot(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;forfold_idx =1:num_folds fprintf('处理%d在%d折叠\n',fold_idx,num_folds);test_idx = fold_idx: num_folds: num_images;imdsTest =子集(imds,test_idx);train_idx = setdiff(1:长度(imds.Files) test_idx);imdsTrain =子集(imds,train_idx);网= resnet50;lgraph = layerGraph(net);清楚净;numClasses = numel(categories(imdsTrain.Labels));newLearnableLayer = fullyConnectedLayer(numClasses,…“名称”、“new_fc’,……“WeightLearnRateFactor”10…“BiasLearnRateFactor”,10);lgraph = replaceLayer(lgraph,'fc1000',newLearnableLayer);newsoftmaxLayer = softmaxLayer('Name','new_softmax');lgraph = replaceLayer(lgraph,'fc1000_softmax',newsoftmaxLayer);newClassLayer = classificationLayer('Name','new_classoutput');lgraph = replaceLayer(lgraph,'ClassificationLayer_fc1000',newClassLayer);imdsTrain。ReadFcn = @(filename)preprocess_Xray(filename);imdsTest。ReadFcn = @(filename)preprocess_Xray(filename);选项= trainingOptions('adam',…‘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,options);augtestimds = augmentedImageDatastore([224 224],imdsTest);[predicted_labels(test_idx),posterior(test_idx,:)] = category (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('混淆矩阵:ResNet');
ROC曲线
ROC将根据假阳性和检出率协助医生选择手术点。
test_labels =双(名义(imds.Labels));[fp_rate tp_rate T, AUC] = perfcurve (test_labels后(:1)1);图;情节(fp_rate tp_rate, ' b - ');网格;xlabel('假阳性率');ylabel(检出率);
AUC
类激活映射
我们使用以下代码可视化这些网络针对不同COVID-19病例的类激活映射(CAM)结果:
//www.tatmou.com/help/deeplearning/examples/investigate-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预印本:1912.09621。
[2] Narayanan, B. N., Davuluru, V. S. P., & Hardie, R. C.(2020年3月)。“用于胸片中肺炎检测和诊断的两阶段深度学习架构”。医学成像2020:用于医疗保健、研究和应用的成像信息学(第11318卷,第113180G页)。国际光学与光子学学会。
预处理功能
函数Iout = preprocess_Xray(filename)I = imread(文件名);if ~ismatrix(I) I=rgb2gray(I);结束Iout = cat(3,I,I,I);结束
关于这篇文章,你有什么问题要问Barath吗?请在下方评论
コメント
コメントを残すには,ここをクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。