セマンティック セグメンテーション用の学習データの解析
セマンティック セグメンテーション ネットワークに学習させるには、イメージ コレクションと対応するピクセル ラベル付きイメージ コレクションが必要です。ピクセル ラベル付きイメージは、すべてのピクセル値がそのピクセルのカテゴリカル ラベルを表すイメージです。
次のコードでは、イメージの小さなセットとそれに対応するピクセル ラベル付きイメージが読み込まれます。
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')
参考
ImageDatastore
| pixelLabelDatastore