RGB 3 成分ピクセルとスカラー ピクセル
1 view (last 30 days)
Show older comments
深層学習を使用したセマンティック セグメンテーションをもとに自分で用意したデータセットでセマンティックセグメンテーションを行おうとしたところ,以下のようなエラーが発生しました.解決法を教えてください.
エラー: trainingOptions (line 285)
'ValidationData' の値は無効です。 ピクセル ラベル イメージは、RGB 3 成分ピクセル ラベル ID ではなく、スカラー ピクセル ラベル ID をもっています。
12 Comments
Kenta
on 12 Jan 2020
はい、またそちらでmatlabのアプリのほうを試されて、質問内容のほう、アップデートしていただけると幸いです。よろしくお願いいたします。
上が参考になると思います。
Accepted Answer
Kenta
on 20 Jan 2020
Edited: Kenta
on 20 Jan 2020
こんにちは、訓練時のvalidationデータですが、RGB 3 成分ピクセル ラベル IDは受け付けますが、少なくとも私の試したデータでは、スカラーラベルIDは入らないようです。上のURLの補助関数自体ではなく、その中の操作の過程で、RGBラベルがスカラーラベルに変換されます。それをRGBラベルのままにすると動きました。trainNetwork関数も含めて実行できました。リサイズの補助関数とi_learningを添付します。i_learningのほうでは、imageSize=[360 480 3];と変更しただけです。
ただ、扱うデータなど、私の環境と微妙にちがうので、軽微なエラーを返すかもしれません。練習段階として、実行したいのであれば、ひとまず、optionsの'ValidationData',pximdsVal,...は削除して、全体感を見るほうが効率はよいかもしれません。
ちなみに、'ValidationData',pximdsVal,とすれば、検証データを入れ込めるというコードはどこを参考にしましたか?上のURLではvalidationdataは設定していなかったので、どこのページに書いてあったか教えてもらえますか?
while count<numel(pxds.Files)+1
% Read the pixel data.
% [C,info] = read(pxds);
C=imread(pxds.Files{count});
% Convert from categorical to uint8.
%L = uint8(C); %2018
% L = uint8(C{1}); %2019
L = uint8(C);
% Resize the data. Use 'nearest' interpolation to
% preserve label IDs.
L = imresize(L,[360 480],'nearest');
%L = imresize(L,[180 240],'nearest');
% Write the data to disk.
% [~, filename, ext] = fileparts(info.Filename);
name=pxds.Files{count};
name1=extractBefore(name,'label');
name2=extractAfter(name,'label');
name3=strcat(name1,'labelResized',name2);
imwrite(L,name3)
count=count+1;
end
2 Comments
More Answers (1)
koki mori
on 21 Jun 2020
Edited: koki mori
on 21 Jun 2020
はじめまして、もし解決していたら申し訳ありません。
自分もセマンティックセグメンテーションのラベル付き画像を自作していてここで詰まっていたのでよければ参考にしてください。
原因としては他の回答者さんにもある通り、スカラーピクセル値でやっているのが問題でした。なのでグレースケール(スカラー値)を無理やりRGBスケールにしてあげることで解決しました。
以下にそのソースコードを載せておきますね。
rootFile = fullfile('C:\','Users','自分のユーザー名','OneDrive','デスクトップ');%画像データ保存場所
imDir = fullfile(rootFile,'imageLabel');%画像ディレクトリ
imds = imageDatastore(imDir);%グレースケール画像データストア(スカラー値画像)
for v = 1:1:173 %画像枚数
Y = readimage(imds,v); %イメージ読み込み
[G] = imsplit(Y); %グレースケールのピクセル値を取得
Y = cat(3,G,G,G); %ピクセル値を3次元行列として連結
s = num2str(v); %インクリメント変数Vを文字列に変換
str = [s,'.png']; %変換した文字列と拡張子文字列を連結
newstr = join(str);
imwrite(Y,newstr); %指定した文字列のイメージファイルの保存
end
上記のコードではRGBスケールに直した後、その枚数目の名前になるようになっているので注意してください。
0 Comments
See Also
Categories
Find more on Image Processing Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!