最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

pixelClassificationLayer

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

説明

ピクセル分類層は、各イメージ ピクセルの categorical ラベルを提供します。

作成

構文

layer = pixelClassificationLayer
layer = pixelClassificationLayer(Name,Value)

説明

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) に設定されます。既定値は 'auto' です。

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

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

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

層の名前。文字ベクトルまたは string スカラーとして指定します。層グラフに層を含めるには、空ではない一意の層の名前を指定しなければなりません。この層が含まれる系列ネットワークに学習させて Name'' に設定すると、学習時に層に名前が自動的に割り当てられます。

データ型: char | string

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

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

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

学習に使用する損失関数。'crossentropyex' で指定します。

すべて折りたたむ

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

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   ''   Convolution                  16 3x3 convolutions with stride [2  2] and padding [1  1  1  1]
     3   ''   ReLU                         ReLU
     4   ''   Transposed Convolution       1 3x3 transposed convolutions with stride [2  2] and output cropping [1  1]
     5   ''   Softmax                      softmax
     6   ''   Pixel Classification Layer   Cross-entropy loss 

一部のクラスが学習データに少数しか存在しない場合、逆クラス頻度重み付けを使用して、クラスのバランスを調整します。最初に、pixelLabelImageDatastore を使用して学習データ全体のクラスの頻度をカウントします。次に、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);     
  pximds = pixelLabelImageDatastore(imds,pxds);

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

  tbl = countEachLabel(pximds)
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 で導入