RGB 3 成分ピクセルとスカラー ピクセル

13 次查看(过去 30 天)
Kodai Sato
Kodai Sato 2020-1-3
编辑: koki mori 2020-6-21
深層学習を使用したセマンティック セグメンテーションをもとに自分で用意したデータセットでセマンティックセグメンテーションを行おうとしたところ,以下のようなエラーが発生しました.解決法を教えてください.
エラー: trainingOptions (line 285)
'ValidationData' の値は無効です。 ピクセル ラベル イメージは、RGB 3 成分ピクセル ラベル ID ではなく、スカラー ピクセル ラベル ID をもっています。
  12 个评论
Kenta
Kenta 2020-1-12
はい、またそちらでmatlabのアプリのほうを試されて、質問内容のほう、アップデートしていただけると幸いです。よろしくお願いいたします。
上が参考になると思います。
Kodai Sato
Kodai Sato 2020-1-15
上のURLの例に添付されているサポート関数でリサイズするとスカラー ピクセル ラベル IDになるようです

请先登录,再进行评论。

采纳的回答

Kenta
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 个评论
Kodai Sato
Kodai Sato 2020-1-20
上のURLにある学習オプションの選択のコードをコピーしました
Kenta
Kenta 2020-1-20
编辑:Kenta 2020-1-20
リンクのほう、教えていただきありがとうございます。私の見ていたコードは同様の例でしたが、その記述はありませんでした。

请先登录,再进行评论。

更多回答(1 个)

koki mori
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スケールに直した後、その枚数目の名前になるようになっているので注意してください。

产品


版本

R2019b

Community Treasure Hunt

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

Start Hunting!