セマンティックセグメンテーションのラベル設定

7 ビュー (過去 30 日間)
kota kobayashi
kota kobayashi 2018 年 7 月 30 日
コメント済み: kota kobayashi 2018 年 8 月 2 日
深層学習を使用したセマンティック セグメンテーション https://jp.mathworks.com/help/vision/examples/semantic-segmentation-using-deep-learning.html を参考に、自分で設定したクラスにラベルIDを設定しようとしていますが、うまくいきません。そこで classes=["sea","land","sky"] labelIDs = [1 2 3]; (カラーマップはcmap = [ 0 0 0 0 0 20 0 0 40 ]) とするとうまくいきますが、これでは、セマンティックセグメンテーションさせたときの色とカラーマップを対応させることができません。 例を参考に、
classes = [
"sea"
"land"
"sky"
];
labelIDs = {...
[
000 000 020; ...
]
[
000 000 040; ...
]
[
000 000 060; ...
]
};
などと設定して実行すると以下のエラーがでます。 位置 1 のインデックスが配列範囲を超えています。
エラー: images.internal.labeloverlayalgo (line 13) colormap = [colormap(1,:);colormap];
エラー: labeloverlay (line 95) B = images.internal.labeloverlayalgo(A,L,cmap,alpha,includeList);
エラー: DataCheck (line 28) B = labeloverlay(I,C); どのようにラベルを設定すべきか教えてください。

採用された回答

Kei Otsuka
Kei Otsuka 2018 年 7 月 31 日
例題に含まれているサポート関数の内容を一度確認されると良いと思います。
CamVidデータセットではラベル画像がRGBカラー3値で与えられているため、
ラベルIDを以下のように3値で指定しています。
function labelIDs = camvidPixelLabelIDs()
% "Sky"
[
128 128 128; ... % "Sky"
]
.
.
一方、imageLabeler等を利用して作成したラベル画像はグレースケールであるため、
3値を指定してしまうとエラーとなります。
従いまして、ラベルIDは利用するラベル画像にあわせて指定して頂き、
そのIDに該当する色情報はcmapに定義して利用します。
一例として、"sky"と"Building"の2クラスが存在したとして、
それぞれのピクセルラベルの値が"1","2"であり、セグメンテーション結果を
"赤"、"緑"としたい場合は以下のように指定します。
classes = [
"Sky"
"Building"
];
% 該当するラベル画像の値
labelIDs = cell(2,1);
labelIDs{1,1} = 1;
labelIDs{2,1} = 2;
% 対応する色
cmap = [
128 0 0 % Sky=赤
0 128 0 % Building=緑
];

その他の回答 (1 件)

kota kobayashi
kota kobayashi 2018 年 8 月 1 日
編集済み: kota kobayashi 2018 年 8 月 1 日
何度もすいません。 テスト画像に、以下のコードでセグメンテーションさせるとき、
I = read(imdsTest);
C = _semanticseg(I, net);_
B = labeloverlay(I, C);
cmap = camvidColorMap;
figure
imshow(B)
pixelLabelColorbar(cmap,classes);
イメージラベラーでラベリングしたときの色とラベルが対応するように塗分けられるという認識で合っていますか?だとすると、cmapで設定する値は、イメージラベラーで使われている色のRGB値に合わせる必要があるということになりますが。
  2 件のコメント
Kei Otsuka
Kei Otsuka 2018 年 8 月 1 日
ご認識の通りで、イメージラベラーでラベリングした時の色と同じにしたければ、
cmapを合わせる必要があります。 イメージラベラーで利用されているカラーマップは
'lines'ですね。
c = colormap('lines');
imshow(reshape(c(1:10,:), [10 1 3]),[])
kota kobayashi
kota kobayashi 2018 年 8 月 2 日
ありがとうございます!!

サインインしてコメントする。

Community Treasure Hunt

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

Start Hunting!