Main Content

pixelClassificationLayer

(削除予定) セマンティック セグメンテーションのピクセル分類層の作成

pixelClassificationLayer オブジェクトは将来のリリースで削除される予定です。関数 trainnet (Deep Learning Toolbox) を使用し、関数 crossentropy (Deep Learning Toolbox) を使用して損失を指定します。詳細については、互換性の考慮事項を参照してください。

説明

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

作成

説明

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) および関数 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 で導入

すべて折りたたむ

R2024a: pixelClassificationLayer は削除予定

pixelClassificationLayer オブジェクトは将来のリリースで削除される予定です。コードを更新するには、次の手順に従います。

  • ネットワークを dlnetwork (Deep Learning Toolbox) オブジェクトとして定義します。addLayers (Deep Learning Toolbox)connectLayers (Deep Learning Toolbox) などの関数を使用してネットワークを構築できます。ネットワークに出力層を含めないでください。

  • 関数 crossentropy (Deep Learning Toolbox) を使用するカスタム損失関数を定義します。以下は、ピクセル分類に適したサンプル損失関数です。

    function loss = modelLoss(Y,T) 
      mask = ~isnan(T);
      targets(isnan(T)) = 0;
      loss = crossentropy(Y,T,Mask=mask,NormalizationFactor="mask-included"); 
    end
  • 関数 trainnet (Deep Learning Toolbox) とカスタム損失関数を使用してネットワークに学習させます。たとえば、次のコードは、学習データ images とカスタム損失関数 modelLoss を使用して、dlnetwork ネットワーク net に学習させます。

    netTrained = trainnet(images,net,@modelLoss,options);