Semantic Segmentation Output & Response size

조회 수: 1 (최근 30일)
Monika Zeilhofer
Monika Zeilhofer 2020년 7월 28일
답변: Divya Gaddipati 2020년 8월 10일
Hello,
when training a pretrained model (resnet18) for image segmentation, I always get the following error:
Error using trainNetwork (line 170)
Invalid training data. The output size ([250 1000 2]) of the last layer does not match the response size
([250 1000 1]).
Error in SemanticSegmentation (line 45)
[net, info] = trainNetwork(pximds,lgraph,options);
Already checke the network with the deep network designer and it says no errors.
Here you can see my code:
imds=imageDatastore('\\tuwzs9a-vm-02\homes\ga54saw\windows\dokumente\QuaBu\Geteilte Bilder\test')
classNames = ["noKnot", "Knot"];
pixelLabelID = [0; 1];
pxds = pixelLabelDatastore('\\tuwzs9a-vm-02\homes\ga54saw\windows\dokumente\QuaBu',classNames,pixelLabelID);
pximds = pixelLabelImageDatastore(imds,pxds);
[imdsTrain, imdsVal, imdsTest, pxdsTrain, pxdsVal, pxdsTest] = partitionData(imds,pxds);
% Specify the network image size. This is typically the same as the traing image sizes.
imageSize = [250 1000 3];
% Specify the number of classes.
numClasses = 2;
% Create DeepLab v3+.
lgraph = deeplabv3plusLayers(imageSize, numClasses, "resnet18");
%lgraph=segnetLayers(imageSize,numClasses,2);
tbl = countEachLabel(pxds);
imageFreq = tbl.PixelCount ./ tbl.ImagePixelCount;
classWeights = median(imageFreq) ./ imageFreq;
pxLayer = pixelClassificationLayer('Name','labels','Classes',tbl.Name,'ClassWeights',classWeights);
lgraph = replaceLayer(lgraph,"classification",pxLayer);
% Define validation data.
pximdsVal = pixelLabelImageDatastore(imdsVal,pxdsVal);
% Define training options.
options = trainingOptions('sgdm', ...
'LearnRateSchedule','piecewise',...
'LearnRateDropPeriod',10,...
'LearnRateDropFactor',0.3,...
'Momentum',0.9, ...
'InitialLearnRate',1e-3, ...
'L2Regularization',0.005, ...
'ValidationData',pximdsVal,...
'MaxEpochs',30, ...
'MiniBatchSize',2, ...
'Shuffle','every-epoch', ...
'CheckpointPath', tempdir, ...
'VerboseFrequency',2,...
'Plots','training-progress',...
'ValidationPatience', 4);
%Start Training
pximds = pixelLabelImageDatastore(imdsTrain,pxdsTrain);
net = trainNetwork(pximds,lgraph,options);
%Test
I = readimage(imdsTest,9);
C = semanticseg(I, net);
B = labeloverlay(I,C,'Colormap',cmap,'Transparency',0.4);
imshow(B)
pixelLabelColorbar(cmap, classes);
Would be really happy to get some help to solve the problem.
Thank you very much.

답변 (1개)

Divya Gaddipati
Divya Gaddipati 2020년 8월 10일
As it is evident from the error message, the size at the output layer should be same as the ground truth image size. Try changing the output layer size to [250 1000 1].
Here's a link to Semantic Segmentation example in MATLAB:

Community Treasure Hunt

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

Start Hunting!

Translated by