深層学習を使用したセマンティック セグメンテーションhttps://jp.mathworks.com/help/releases/R2018a/vision/examples/semantic-segmentation-using-deep-learning.html
をもとに自分で用意したデータセットで解析を行ったところ以下のようなエラーが出ました.
無題.png
以下にi_learningのコードを示します.
%ネットワークの作成
imageSize = [360 480 3];
numClasses = numel(classes);
lgraph = segnetLayers(imageSize,numClasses,'vgg16');
%クラスの重み付けを使用したクラスのバランス調整
imageFreq = tbl.PixelCount ./ tbl.ImagePixelCount;
classWeights = median(imageFreq) ./ imageFreq;
pxLayer = pixelClassificationLayer('Name','labels','ClassNames',tbl.Name,'ClassWeights',classWeights);
lgraph = removeLayers(lgraph,'pixelLabels');
lgraph = addLayers(lgraph, pxLayer);
lgraph = connectLayers(lgraph,'softmax','labels');
%学習オプションの選択
options = trainingOptions('sgdm', ...
'Momentum',0.9, ...
'InitialLearnRate',1e-3, ...
'L2Regularization',0.0005, ...
'MaxEpochs',100, ...
'MiniBatchSize',2, ...
'Shuffle','every-epoch', ...
'VerboseFrequency',2);
%データ拡張
augmenter = imageDataAugmenter('RandXReflection',true,...
'RandXTranslation',[-10 10],'RandYTranslation',[-10 10]);
%学習の開始
pximds = pixelLabelImageDatastore(imdsTrain,pxdsTrain,'DataAugmentation',augmenter);
net= trainNetwork(pximds,lgraph,options);

 채택된 답변

Kenta
Kenta 2019년 12월 18일

1 개 추천

classWeights
と入力して、それぞれの値を教えてもらえますか?訓練データに、ある稀なラベルが含まれていなくて0で割っている状態なのではないかと思いました。
classWeights = median(imageFreq) ./ (imageFreq+0.0001);
などとすれば回避できると思いました。

댓글 수: 10

Kodai Sato
Kodai Sato 2019년 12월 18일
classWeightsはどこに入力すればよいのでしょうか?
コマンドウィンドウに入力すると関数または変数 'classWeights' が認識されません。と返ってきます.
Kenta
Kenta 2019년 12월 18일
imageFreq
そうですね、失礼いたしました。うえのように打って下さい。
Kodai Sato
Kodai Sato 2019년 12월 18일
申し訳ありません
そちらの関数でも認識されませんでした
クラス別のピクセル数はグラフがあるので一応添付します
untitled.png
Kenta
Kenta 2019년 12월 18일
tbl.ImagePixelCount
何度もすいません、こちらを打ってみてください。
Kodai Sato
Kodai Sato 2019년 12월 18일
以下のようになりました
>> tbl.ImagePixelCount
ans =
20719666
4297113
0
0
Kenta
Kenta 2019년 12월 18일
3,4番目の出現数が0なので、0で割ると、無限大になってしまいますね。
そのため、クラスの重みも無限になってしまい。エラーを返したということですね。
そのため、
imageFreq = tbl.PixelCount ./ (tbl.ImagePixelCount+1);
などとして、分母が0になるのを防ぐと、うまく実行できると思います。
その後のコードで変更があれば、適宜変更していただけると幸いです。
ただ、ここまで大きくクラスに偏りがあると、課題設計を少し変更した方がいいかもしれません。
Kodai Sato
Kodai Sato 2019년 12월 19일
何度も申し訳ありません
上のコードのように変更しましたが同様なエラーが発生します
imageFreq =
0.1032
0.0000
0
0
Kenta
Kenta 2019년 12월 19일
imageFreq = tbl.PixelCount ./ (tbl.ImagePixelCount+1);
classWeights = median(imageFreq) ./ (imageFreq+0.001)+0.0001;
などとすれば、ひとまず動きますでしょうか?
Kodai Sato
Kodai Sato 2019년 12월 19일
tbl.PixelCount
を実行したところこちらも0であったため
imageFreq = (tbl.PixelCount+1) ./ (tbl.ImagePixelCount+1);
としたところ実行できました
何度も申し訳ありませんでした
Kenta
Kenta 2019년 12월 19일
はい、無事実行できてよかったです。

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Deep Learning Toolbox에 대해 자세히 알아보기

제품

릴리스

R2019b

질문:

2019년 12월 18일

댓글:

2019년 12월 19일

Community Treasure Hunt

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

Start Hunting!