There is a problem running minibatchqueue function.

조회 수: 3 (최근 30일)
泽宇 王
泽宇 王 2021년 5월 17일
댓글: bipun manpati 2021년 5월 29일
I made my data set. Here is a part of it.
I run my dataset and an error occurs at this step.
mbqTrain = minibatchqueue(preprocessedTrainingData, 2,...
"MiniBatchSize", miniBatchSize,...
"MiniBatchFcn", @(images, boxes, labels) createBatchData(images, boxes, labels, classNames), ...
"MiniBatchFormat", ["SSCB", ""],...
"DispatchInBackground", dispatchInBackground,...
"OutputCast", ["", "double"]);
It says: Error using minibatchqueue, Unable to apply function specified by 'MiniBatchFcn' value.
Caused by: Error using cat, Dimensions of arrays being concatenated are not consistent.
I checked and found that when running the function createBatchData:
function [XTrain, YTrain] = createBatchData(data, groundTruthBoxes, groundTruthClasses, classNames)
some of the data in the input argumentsr groundTruthBoxes become empty. LIke the third line:
But it's supposed to have a 3*4double data here. But it just disappear.
I dont know whether other people have met this question, or it just me. But I'm really frustrated with this question.
Please help me.

답변 (1개)

泽宇 王
泽宇 王 2021년 5월 18일
I figured out what was the problem. After my step-by-step debugging, I found problem in this line of code.
preprocessedTrainingData = transform(augmentedTrainingData, @(data)preprocess(yolov3Detector, data));
data = read(preprocessedTrainingData);
This line of code points to this function: vision.internal.cnn.LetterBoxImage
function [Inew,bboxnew] = LetterBoxImage(I,targetSize,varargin):
[Irow,Icol,Ichannels] = size(I);
bboxnew = [];
% Compute aspect Ratio.
arI = Irow./Icol;
% Preserve the maximum dimension based on the aspect ratio.
if arI<1
IcolFin = targetSize(1,2);
IrowFin = floor(IcolFin.*arI);
else
IrowFin = targetSize(1,1);
IcolFin = floor(IrowFin./arI);
end
% Resize the input image.
Itmp = imresize(I,[IrowFin,IcolFin]);
% Initialize Inew with gray values.
Inew = ones([targetSize,Ichannels],'like',I).*0.5;
% Compute the offset.
if arI<1
buff = targetSize(1,1)-IrowFin;
else
buff = targetSize(1,2)-IcolFin;
end
% Place the resized image on the canvas image.
if (buff==0)
Inew = Itmp;
else
buffVal = floor(buff/2);
if arI<1
Inew(buffVal:buffVal+IrowFin-1,:,:) = Itmp;
if ~isempty(varargin)
% Resize bounding boxes.
bboxnew = iScaleBboxes(varargin{1,1},size(Itmp),size(I));
bboxnew(:,2) = bboxnew(:,2)+buffVal;
end
else
Inew(:,buffVal:buffVal+IcolFin-1,:) = Itmp;
if ~isempty(varargin)
% Resize bounding boxes.
bboxnew = iScaleBboxes(varargin{1,1},size(Itmp),size(I));
bboxnew(:,1) = bboxnew(:,1)+buffVal;
end
end
end
end
I find the picture which gets error has the size with 612*612*3, and the target size is 227*227*3. So the variable arI goes to 1, and the varible buff goes to 0. The calculation of bboxnew has been skipped, so it goes to [].
  댓글 수: 1
bipun manpati
bipun manpati 2021년 5월 29일
hi there,
I would like to know if this error is due to the same size of width and height of the image. as you have mentioned the image size is 612. i had checked in vehicle dataset and found that it has different size of width and height. For my case, image size is 256*256* 3 and found all bounding boxes empty.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Language Support에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by