Main Content

セマンティック セグメンテーション用の学習データの解析

セマンティック セグメンテーション ネットワークに学習させるには、イメージ コレクションと対応するピクセル ラベル付きイメージ コレクションが必要です。ピクセル ラベル付きイメージは、すべてのピクセル値がそのピクセルのカテゴリカル ラベルを表すイメージです。

次のコードでは、イメージの小さなセットとそれに対応するピクセル ラベル付きイメージが読み込まれます。

dataDir = fullfile(toolboxdir('vision'),'visiondata');
imDir = fullfile(dataDir,'building');
pxDir = fullfile(dataDir,'buildingPixelLabels');

imageDatastore を使用してイメージ データを読み込みます。イメージは必要な場合にのみメモリに読み取られるため、イメージ データストアは大規模なイメージ コレクションを効率的に表すことができます。

imds = imageDatastore(imDir);

最初のイメージを読み取って表示します。

I = readimage(imds,1);
figure
imshow(I)

pixelLabelDatastore を使用してピクセル ラベル イメージを読み込み、ラベル ID とカテゴリカル名の間のマッピングを定義します。ここで使用されているデータセットでは、ラベルは "sky"、"grass"、"building"、および "sidewalk" です。これらのクラスのラベル ID はそれぞれ 1、2、3、4 です。

クラス名を定義します。

classNames = ["sky" "grass" "building" "sidewalk"];

各クラス名のラベル ID を定義します。

pixelLabelID = [1 2 3 4];

pixelLabelDatastore を作成します。

pxds = pixelLabelDatastore(pxDir,classNames,pixelLabelID);

最初のピクセル ラベル イメージを読み取ります。

C = readimage(pxds,1);

出力 C は categorical 行列です。ここで、C(i,j) はピクセル I(i,j) のカテゴリカル ラベルです。

C(5,5)
ans = categorical
     sky 

イメージにピクセル ラベルを重ね合わせて、イメージのさまざまな部分へのラベル付けを確認します。

B = labeloverlay(I,C);
figure
imshow(B)

カテゴリカル出力形式を使うと、クラス名別での操作が必要なタスクが簡略化されます。たとえば、次のように建物だけのバイナリ マスクを作成できます。

buildingMask = C == 'building';

figure
imshowpair(I, buildingMask,'montage')

参考

|

関連するトピック