深層学習を使用したセマンティック セグメンテーション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);

 Respuesta aceptada

Kenta
Kenta el 18 de Dic. de 2019

1 voto

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

10 comentarios

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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Deep Learning Toolbox en Centro de ayuda y File Exchange.

Productos

Versión

R2019b

Preguntada:

el 18 de Dic. de 2019

Comentada:

el 19 de Dic. de 2019

Community Treasure Hunt

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

Start Hunting!