Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

pixelClassificationLayer

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

説明

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

作成

説明

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

layer = pixelClassificationLayer(Name,Value) は、名前と値のペアを使用してオプションの 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 配列入力の場合、関数 trainNetworkassembleNetworklayerGraph、および dlnetwork は、名前が '' の層に自動的に名前を割り当てます。

データ型: char | string

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

層の入力の数。この層は単一の入力のみを受け入れます。

データ型: double

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

層の入力名。この層は単一の入力のみを受け入れます。

データ型: 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'

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2017b で導入