Semantic Segmentation Output & Response size

3 次查看(过去 30 天)
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:

类别

Help CenterFile Exchange 中查找有关 Recognition, Object Detection, and Semantic Segmentation 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by