Main Content

pixelClassificationLayer

セマンティック セグメンテーションのピクセル分類層の作成

説明

ピクセル分類層は、各イメージ ピクセルまたはボクセルのカテゴリカル ラベルを提供します。

作成

説明

layer = pixelClassificationLayer は、セマンティック イメージ セグメンテーション ネットワークのピクセル分類出力層を作成します。この層は、CNN によって処理される各イメージ ピクセルまたはボクセルのカテゴリカル ラベルを出力します。学習中、層は未定義のピクセルのラベルを自動的に無視します。

layer = pixelClassificationLayer(Name=Value) は、1 つ以上の名前と値の引数を使用してオプションの ClassesClassWeights、および Name を設定し、ピクセル分類出力層を返します。たとえば、pixelClassificationLayer(Name="pixclass") は、pixclass という名前のピクセル分類層を作成します。

プロパティ

すべて展開する

出力層のクラス。categorical ベクトル、string 配列、文字ベクトルの cell 配列、または "auto" として指定します。Classes"auto" の場合、学習時にクラスが自動的に設定されます。string 配列または文字ベクトルの cell 配列 str を指定すると、出力層のクラスが categorical(str,str) に設定されます。

データ型: char | categorical | string | cell

クラスの重み。"none" または実数スカラーのベクトルとして指定します。ベクトルの要素は Classes のクラスに対応します。ClassWeights を指定する場合、Classes を指定しなければなりません。

少数しか存在しないクラスが学習データに含まれる場合、クラスの重み付けを使用して、クラスのバランスを調整します。

この プロパティ は読み取り専用です。

層の出力サイズ。学習前の値は "auto" で、学習時の値は数値で指定します。

この プロパティ は読み取り専用です。

学習に使用する損失関数。"crossentropyex" として指定します。

層の名前。文字ベクトルまたは string スカラーとして指定します。Layer 配列入力の場合、関数 trainnet (Deep Learning Toolbox)trainNetwork (Deep Learning Toolbox)assembleNetwork (Deep Learning Toolbox)layerGraph (Deep Learning Toolbox)、および dlnetwork (Deep Learning Toolbox) は、名前が "" の層に自動的に名前を割り当てます。

pixelClassificationLayer オブジェクトは、このプロパティを文字ベクトルとして格納します。

データ型: char | string

この プロパティ は読み取り専用です。

層への入力の数。1 として返されます。この層は単一の入力のみを受け入れます。

データ型: double

この プロパティ は読み取り専用です。

入力名。{'in'} として返されます。この層は単一の入力のみを受け入れます。

データ型: cell

すべて折りたたむ

入力イメージ内のすべてのピクセルのカテゴリカル ラベルを予測します。

layers = [
         imageInputLayer([32 32 3])
         convolution2dLayer(3,16,Stride=2,Padding=1)
         reluLayer
         transposedConv2dLayer(3,1,Stride=2,Cropping=1)
         softmaxLayer
         pixelClassificationLayer
      ]
layers = 
  6x1 Layer array with layers:

     1   ''   Image Input                  32x32x3 images with 'zerocenter' normalization
     2   ''   2-D Convolution              16 3x3 convolutions with stride [2  2] and padding [1  1  1  1]
     3   ''   ReLU                         ReLU
     4   ''   2-D Transposed Convolution   1 3x3 transposed convolutions with stride [2  2] and cropping [1  1  1  1]
     5   ''   Softmax                      softmax
     6   ''   Pixel Classification Layer   Cross-entropy loss 

一部のクラスが学習データに少数しか存在しない場合、逆クラス頻度重み付けを使用して、クラスのバランスを調整します。最初に、pixelLabelDatastore を使用して学習データ全体のクラスの頻度をカウントします。次に、pixelClassificationLayer の 'ClassWeights' を、計算された逆クラス頻度に設定します。

イメージとピクセル ラベル データの位置を設定します。

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

imds のグラウンド トゥルース イメージと pxds のピクセル ラベル付きイメージを使用して、ピクセル ラベル イメージ データストアを作成します。

  imds = imageDatastore(imDir);
  classNames = ["sky" "grass" "building" "sidewalk"];
  pixelLabelID = [1 2 3 4];
  pxds = pixelLabelDatastore(pxDir,classNames,pixelLabelID);     

データセット内のクラスの分布を表にします。

  tbl = countEachLabel(pxds)
tbl=4×3 table
        Name        PixelCount    ImagePixelCount
    ____________    __________    _______________

    {'sky'     }    3.1485e+05       1.536e+06   
    {'grass'   }    1.5979e+05       1.536e+06   
    {'building'}    1.0312e+06       1.536e+06   
    {'sidewalk'}         25313       9.216e+05   

逆クラス頻度重み付けを計算します。

  totalNumberOfPixels = sum(tbl.PixelCount);
  frequency = tbl.PixelCount / totalNumberOfPixels;
  inverseFrequency = 1./frequency
inverseFrequency = 4×1

    4.8632
    9.5827
    1.4848
   60.4900

'ClassWeights' を逆クラス頻度に設定します。

  layer = pixelClassificationLayer(...
      Classes=tbl.Name,ClassWeights=inverseFrequency)
layer = 
  PixelClassificationLayer with properties:

            Name: ''
         Classes: [sky    grass    building    sidewalk]
    ClassWeights: [4x1 double]
      OutputSize: 'auto'

   Hyperparameters
    LossFunction: 'crossentropyex'

拡張機能

バージョン履歴

R2017b で導入