メインコンテンツ

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

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

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

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

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

imds = imageDatastore(imDir);

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

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

Figure contains an axes object. The hidden axes object contains an object of type image.

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)

Figure contains an axes object. The hidden axes object contains an object of type image.

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

buildingMask = C == 'building';

figure
imshowpair(I, buildingMask,'montage')

Figure contains an axes object. The hidden axes object contains an object of type image.

参考

|

トピック