RGB 3 成分ピクセルとスカラー ピクセル
1 回表示 (過去 30 日間)
古いコメントを表示
深層学習を使用したセマンティック セグメンテーションをもとに自分で用意したデータセットでセマンティックセグメンテーションを行おうとしたところ,以下のようなエラーが発生しました.解決法を教えてください.
エラー: trainingOptions (line 285)
'ValidationData' の値は無効です。 ピクセル ラベル イメージは、RGB 3 成分ピクセル ラベル ID ではなく、スカラー ピクセル ラベル ID をもっています。
12 件のコメント
Kenta
2020 年 1 月 12 日
はい、またそちらでmatlabのアプリのほうを試されて、質問内容のほう、アップデートしていただけると幸いです。よろしくお願いいたします。
上が参考になると思います。
採用された回答
Kenta
2020 年 1 月 20 日
編集済み: Kenta
2020 年 1 月 20 日
こんにちは、訓練時の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 件のコメント
その他の回答 (1 件)
koki mori
2020 年 6 月 21 日
編集済み: koki mori
2020 年 6 月 21 日
はじめまして、もし解決していたら申し訳ありません。
自分もセマンティックセグメンテーションのラベル付き画像を自作していてここで詰まっていたのでよければ参考にしてください。
原因としては他の回答者さんにもある通り、スカラーピクセル値でやっているのが問題でした。なのでグレースケール(スカラー値)を無理やり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 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!