Error: Undefined function 'preprocessData' for input arguments of type 'cell'.

52 views (last 30 days)
I am implementing MATLAB 2019b examle "Object Detection Using YOLO v2 Deep Learning"(https://www.mathworks.com/help/vision/ug/train-an-object-detector-using-you-only-look-once.html), but when I run the following line of code:
anchorBoxes = estimateAnchorBoxes(preprocessedTrainingData ,numAnchors)
it gives me error as mentioned in title. Thanks for helping out.
A small piece of code from example is mentioned below:
%...............Code..................................%
unzip vehicleDatasetImages.zip
data = load('vehicleDatasetGroundTruth.mat');
vehicleDataset = data.vehicleDataset;
rng(0)
shuffledIdx = randperm(height(vehicleDataset));
idx = floor(0.6 * height(vehicleDataset));
trainingDataTbl = vehicleDataset(shuffledIdx(1:idx),:);
imdsTrain = imageDatastore(trainingDataTbl{:,'imageFilename'});
bldsTrain = boxLabelDatastore(trainingDataTbl(:,'vehicle'));
trainingData = combine(imdsTrain,bldsTrain);
inputSize = [224 224 3];
preprocessedTrainingData = transform(trainingData, @(data)preprocessData(data,inputSize));
numAnchors = 5;
anchorBoxes = estimateAnchorBoxes(preprocessedTrainingData ,numAnchors)
%.................................................................................................................................................%
  1 Comment
Harshveer Singh
Harshveer Singh on 6 May 2020
I am also getting the similar error. Unable to resolve it. I copied all the supporting function into a .m file. I then tried calling the function through its name in the command window but unable to do so. Someone please help how to go ahead with it.

Sign in to comment.

Accepted Answer

Steven Lord
Steven Lord on 9 Oct 2019
The preprocessData function is a supporting function that is part of that example and is not on the MATLAB path in general. Scroll down to the Supporting Functions section of that example and make a copy of that function, either as a local function inside the file where you're implementing your own variant of the example or as a separate function file.
  4 Comments
TEJAS PHUTANE
TEJAS PHUTANE on 29 Dec 2019
I have changed the code for detection of balls from 1000 images but still stuck on following problem while executing code:
trainingDataForEstimation = transform(trainingData,@(data)preprocessData(data,inputSize));
numAnchors = 7;
[anchorBoxes, meanIoU] = estimateAnchorBoxes(trainingDataForEstimation, numAnchors)
OUTPUT:
Invalid transform function defined on datastore.
The cause of the error was:
Error using bboxresize>iParseInputs (line 89)
The value of 'bboxA' is invalid. Expected input number 1, bboxA, to be integer-valued.
Error in bboxresize (line 49)
params = iParseInputs(bboxA,scale);
Error in training>preprocessData (line 56)
data{2} = bboxresize(data{2},scale);
Error in training>@(data)preprocessData(data,inputSize) (line 17)
trainingDataForEstimation = transform(trainingData,@(data)preprocessData(data,inputSize));
Error in matlab.io.datastore.TransformedDatastore/read (line 148)
data = self.Transforms{ii}(data);
Error in matlab.io.Datastore/readall (line 250)
data = [data; read(copyds)]; %#ok<AGROW>
Error in matlab.io.datastore.TransformedDatastore/readall (line 188)
data = readall@matlab.io.Datastore(copyds);
Error in estimateAnchorBoxes>iReadallBoxes (line 270)
boxes = readall(ds);
Error in estimateAnchorBoxes>iCheckBoxesFromDatastore (line 215)
boxes = iReadallBoxes(ds);
Error in estimateAnchorBoxes>iParseInputs (line 168)
boxes = iCheckBoxesFromDatastore(datastore);
Error in estimateAnchorBoxes (line 136)
[boxes, numAnchors, params] = iParseInputs(datastore, numAnchors, varargin{:});
Error in training (line 19)
[anchorBoxes, meanIoU] = estimateAnchorBoxes(trainingDataForEstimation, numAnchors)

Sign in to comment.

More Answers (2)

michael scheinfeild
michael scheinfeild on 7 Mar 2020
some fix needed in preprocessing , first round and be sure it is positive top left , i think maybe check box outside image will be good , i didnt did it . also rounding of box cordinates is important !. also see that in image we have several bounding boxes and we check them all !
function data = preprocessData(data,targetSize)
% Resize image and bounding boxes to the targetSize.
scale = targetSize(1:2)./size(data{1},[1 2]);
data{1} = imresize(data{1},targetSize(1:2));
boxEstimate=round(data{2});
boxEstimate(:,1)=max(boxEstimate(:,1),1);
boxEstimate(:,2)=max(boxEstimate(:,2),1);
data{2} = bboxresize(boxEstimate,scale);
end
  9 Comments

Sign in to comment.


Samuel Manickavasagam S
Samuel Manickavasagam S on 23 Jan 2020
Tejas Phutane i too have this error
  1 Comment
TEJAS PHUTANE
TEJAS PHUTANE on 2 Mar 2020
I tried verifying 1000 images in batches of 50 images and found errors in total 60 images.This method solved my problem

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!