How do I solve this error: Error using matlab.io.​datastore.​ImageDatas​tore/readi​mage (line 32)?

22 vues (au cours des 30 derniers jours)
I am trying to use feature extraction to recognise faces, however when I run the code these errors come up:
Error using matlab.io.datastore.ImageDatastore/readimage (line 32)
Expected input number 2, INDEX, to be a scalar with value <= 8.
Error in Alexnet_Feature_Test (line 31)
I = readimage(imdsTest,idx(i));
Below is my code, I have tried using vgg19 and Alexnet and get the same errors for both
%Load zipped images
unzip('ATTDatabase.zip');
imds = imageDatastore('ATTDatabase','IncludeSubfolders',true,'LabelSource','foldernames');
[imdsTrain,imdsTest] = splitEachLabel(imds,0.7,'randomized');
%Display sample images from zip file
numTrainImages = numel(imdsTrain.Labels);
idx = randperm(numTrainImages,10);
figure
for i = 1:10
subplot(2,5,i)
I = readimage(imdsTrain,idx(i));
imshow(I)
end
%Load pretrained network (AlexNet)
net = vgg19();
net.Layers
inputSize = net.Layers(1).InputSize;
%Extracting image features
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);
augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest);
layer = 'fc7';
featuresTrain = activations(net,augimdsTrain,layer,'OutputAs','rows');
featuresTest = activations(net,augimdsTest,layer,'OutputAs','rows');
%Extracting class labels
YTrain = imdsTrain.Labels;
YTest = imdsTest.Labels;
%Image classifier
classifier = fitcecoc(featuresTrain, YTrain);
%Classification from test
YPred = predict(classifier,featuresTest);
%Showing 4 images with labels
idx = [1 5 10 15];
figure
for i = 1:numel(idx)
subplot(2,2,i)
I = readimage(imdsTest,idx(i));
label = YPred(idx(i));
imshow(I)
title(char(label))
end
%Accuracy of model
accuracy = mean(YPred == YTest)
I am not sure why this is coming up, please help!
  10 commentaires
Sujit Mistry
Sujit Mistry le 14 Déc 2018
Sorry I initially tried using the AT&T database but as they are black and white, they won't work. Here is the link for the images i used: https://fei.edu.br/~cet/facedatabase.html

Connectez-vous pour commenter.

Réponse acceptée

Sean de Wolski
Sean de Wolski le 13 Déc 2018
It looks like the datastore (probably imdsTest) only sees 8 images so you can't read the 10th or 15th one.
  2 commentaires
Sujit Mistry
Sujit Mistry le 14 Déc 2018
Yes, it only reads up to the 8th image and won't work after that, do you know how to solve this issue?
Thanks
Sean de Wolski
Sean de Wolski le 14 Déc 2018
[imdsTrain,imdsTest] = splitEachLabel(imds,0.7,'randomized');
Why do you care about image 10, 15? The validation step is randomly grabbing 8 images (30%) from the original datastore so the indices 10,15 don't mean much anyway. Why not validate against the 8 it picked?
idx = [1 2 5 7]; % or whatever

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by