clc; clear; close all; imds = imageDatastore('C:\DIP\sheykhi covid19\COVID-CTset',... 'IncludeSubfolders',true,'FileExtensions',{'.tif','.png'},'LabelSource','foldernames'); imds.ReadSize = numpartitions(imds) imds.ReadFcn = @customreader; % imds.ReadFcn = @(imds)imresize(imread(imds),[75,75,3]); countEachLabel(imds) for i=1:50 img = readimage(imds,i); % imshow(img) size(img) % pause end %%plot folder for i = 1:9 I=imread(['000',num2str(i), '.jpg']); subplot(3,6,i); imshow(I); end for i = 10:18 I=imread(['00',num2str(i), '.jpg']); subplot(3,6,i); imshow(I); end %% [imdsTrain,imdsValidation] = splitEachLabel(imds,.5,'randomize'); countEachLabel(imdsTrain) layers = [ imageInputLayer([200 200 ]) convolution2dLayer(3,8,'Padding','same') batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) convolution2dLayer(3,16,'Padding','same') batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) convolution2dLayer(3,32,'Padding','same') batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) convolution2dLayer(3,64,'Padding','same') batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) convolution2dLayer(3,128,'Padding','same') batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) convolution2dLayer(3,256,'Padding','same') batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) convolution2dLayer(3,512,'Padding','same') batchNormalizationLayer reluLayer fullyConnectedLayer(2) softmaxLayer classificationLayer]; options = trainingOptions('sgdm', ... 'InitialLearnRate',.001, ... 'MaxEpochs',80, ... 'Shuffle','every-epoch', ... 'ValidationData',imdsValidation, ... 'ValidationFrequency',100, ... 'Verbose',false, ... 'Plots','training-progress'); net = trainNetwork(imdsTrain,layers,options); %%train YPred = classify(net,imdsTrain); accuracy_train = sum(YPred == imdsTrain.Labels)/numel(imdsTrain.Labels) figure plotconfusion(imdsTrain.Labels,YPred) [X,Y,T_train, AUC_train] = perfcurve(single(imdsTrain.Labels=='-'),single(YPred=='-'),'1'); figure plot(X,Y, 'LineWidth',2) xlabel('False positive rate','FontSize',14) ylabel('True positive rate','FontSize',14) title('ROC for Train Data Classification','FontSize',14) %%test YPred = classify(net,imdsValidation); accuracy_test = sum(YPred == imdsValidation.Labels)/numel(imdsValidation.Labels) figure plotconfusion(imdsValidation.Labels,YPred) [X,Y, T_test, AUC_test] = perfcurve(single(imdsValidation.Labels=='-'),single(YPred=='-'),'1'); figure plot(X,Y, 'LineWidth',2) xlabel('False positive rate','FontSize',14) ylabel('True positive rate','FontSize',14) title('ROC for Test Data Classification','FontSize',14) %%All YPred = classify(net,imds); accuracy_all = sum(YPred == imds.Labels)/numel(imds.Labels) figure plotconfusion(imds.Labels,YPred) [X,Y, T_all, AUC_all] = perfcurve(single(imds.Labels=='-'),single(YPred=='-'),'1'); figure plot(X,Y, 'LineWidth',2) xlabel('False positive rate','FontSize',14) ylabel('True positive rate','FontSize',14) title('ROC for All Data Classification','FontSize',14)