Main Content

countEachLabel

(非推奨) bigimageDatastore オブジェクトの各クラスのピクセル ラベル数のカウント

bigimageDatastore オブジェクトの関数 countEachLabel は推奨されません。代わりに、blockedImageDatastore オブジェクトに関連付けられた関数 countEachLabel を使用してください。詳細については、互換性の考慮事項を参照してください。

説明

counts = countEachLabel(bigds) は、大きなイメージのデータストア bigds に含まれるすべての大きなイメージについて、各ピクセル ラベルの数を返します。

すべて折りたたむ

ピクセル ラベル データを読み込みます。

load('buildingPixelLabeled.mat');

ピクセル ラベル データのクラスとピクセル ラベル ID を指定します。

pixelLabelID = [1 2 3 4];
classNames = ["sky" "grass" "building" "sidewalk"];

ピクセル ラベル データを管理する bigimage を作成します。

bigLabeledImage = bigimage(uint8(label),'Classes',classNames,'PixelLabelIDs',pixelLabelID);
bigimageshow(bigLabeledImage)

bigLabeledImage から最も細かい解像度レベルで 200 x 150 ピクセルのブロックを読み取る bigimageDatastore を作成します。

level = 1;
blockSize = [200 150];
biglabelds = bigimageDatastore(bigLabeledImage,level,'BlockSize',blockSize);

各クラスのピクセル ラベル数をカウントします。

tbl = countEachLabel(biglabelds)
tbl=4×3 table
       Name       PixelCount    BlockPixelCount
    __________    __________    _______________

    "sky"              81525        1.58e+05   
    "grass"            32983           51200   
    "building"    1.8036e+05       3.072e+05   
    "sidewalk"         10491           51200   

一様な事前重み付けを使用して、クラスのバランスを調整します。

prior = 1/numel(classNames);
uniformClassWeights = prior ./ tbl.PixelCount
uniformClassWeights = 4×1
10-4 ×

    0.0307
    0.0758
    0.0139
    0.2383

逆頻度重み付けを使用して、クラスのバランスを調整します。

 totalNumberOfPixels = sum(tbl.PixelCount);
 freq = tbl.PixelCount / totalNumberOfPixels;
 invFreqClassWeights = 1./freq
invFreqClassWeights = 4×1

    3.7456
    9.2580
    1.6931
   29.1067

中央頻度重み付けを使用して、クラスのバランスを調整します。

freq = tbl.PixelCount ./ tbl.BlockPixelCount;
medFreqClassWeights = median(freq) ./ freq
medFreqClassWeights = 4×1

    1.0689
    0.8562
    0.9394
    2.6917

入力引数

すべて折りたたむ

大きなイメージ データストア。bigimageDatastore オブジェクトとして指定します。

出力引数

すべて折りたたむ

ラベル情報。3 つの変数を含むテーブルとして返されます。

ピクセル数の変数説明
Nameピクセル ラベルのクラス名
PixelCountクラスに含まれているピクセル数
ImagePixelCountそのクラスのインスタンスをもつイメージに含まれている合計ピクセル数

ヒント

countEachLabel によって返されたラベル情報を使用して、クラス バランス調整のために、クラスの重み付けを計算できます。たとえば、tbl に含まれる、ラベル付けされたピクセル データ情報の場合、次のようになります。

  • 一様なクラス バランス調整は、それぞれの事前確率が一様になるよう、各クラスに重み付けをします。

    numClasses = height(tbl)
    prior = 1/numClasses;
    classWeights = prior./tbl.PixelCount

  • 逆頻度バランス調整は、少数しか存在しないクラスの重みが大きくなるよう、各クラスに重み付けをします。

    totalNumberOfPixels = sum(tbl.PixelCount)
    frequency = tbl.PixelCount / totalNumberOfPixels;
    classWeights = 1./frequency

  • 中央頻度バランス調整は、中央頻度を使用して、各クラスに重み付けをします。

    imageFreq = tbl.PixelCount ./ tbl.ImagePixelCount
    classWeights = median(imageFreq) ./ imageFreq
    

計算されたクラスの重みは pixelClassificationLayer (Computer Vision Toolbox) に渡せます。

バージョン履歴

R2020a で導入

すべて展開する

参考

(Computer Vision Toolbox) | (Deep Learning Toolbox) | |