Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

segnetLayers

(削除予定) セマンティック セグメンテーション用の SegNet 層グラフの作成

segnetLayers は将来のリリースで削除される予定です。代わりに、dlnetwork (Deep Learning Toolbox) オブジェクトを使用して SegNet ネットワークを作成します。詳細については、バージョン履歴を参照してください。

説明

lgraph = segnetLayers(imageSize,numClasses,model) は、事前学習済みの model の層および重みで事前に初期化されている SegNet 層 lgraph を返します。

SegNet は、セマンティック イメージ セグメンテーション用の畳み込みニューラル ネットワークです。ネットワークは pixelClassificationLayer を使用して、入力イメージ内のすべてのピクセルのカテゴリカル ラベルを予測します。

segnetLayers を使用して、SegNet のネットワーク アーキテクチャを作成します。Deep Learning Toolbox™ の関数 trainNetwork (Deep Learning Toolbox) を使用してネットワークに学習させなければなりません。

lgraph = segnetLayers(imageSize,numClasses,encoderDepth) は、指定された符号化器の深さを使用して設定された、初期化されていない SegNet 層を返します。

lgraph = segnetLayers(imageSize,numClasses,encoderDepth,Name,Value) は、Name,Value ペアの引数を 1 つ以上指定したオプションを追加で使用して SegNet 層を返します。

すべて折りたたむ

深さ 4 の符号化器/復号化器で SegNet 層を作成します。

imageSize = [480 640 3];
numClasses = 5;
encoderDepth = 4;
lgraph = segnetLayers(imageSize,numClasses,encoderDepth)
lgraph = 
  LayerGraph with properties:

     InputNames: {'inputImage'}
    OutputNames: {'pixelLabels'}
         Layers: [59x1 nnet.cnn.layer.Layer]
    Connections: [66x2 table]

ネットワークを表示します。

figure
plot(lgraph)

学習イメージとピクセル ラベルを読み込みます。

dataSetDir = fullfile(toolboxdir('vision'),'visiondata','triangleImages');
imageDir = fullfile(dataSetDir,'trainingImages');
labelDir = fullfile(dataSetDir,'trainingLabels');

学習イメージを保持するイメージ データストアを作成します。

imds = imageDatastore(imageDir);

クラス名と関連するラベル ID を定義します。

classNames = ["triangle", "background"];
labelIDs   = [255 0];

学習イメージのグラウンド トゥルース ピクセル ラベルを保持するピクセル ラベル データストアを作成します。

pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);

セマンティック セグメンテーション ネットワークに学習させるために、イメージ データとピクセル ラベル データを組み合わせます。

ds = combine(imds,pxds);

SegNet 層を作成します。

imageSize = [32 32];
numClasses = 2;
lgraph = segnetLayers(imageSize,numClasses,2)
lgraph = 
  LayerGraph with properties:

     InputNames: {'inputImage'}
    OutputNames: {'pixelLabels'}
         Layers: [31x1 nnet.cnn.layer.Layer]
    Connections: [34x2 table]

学習オプションをセットアップします。

options = trainingOptions('sgdm','InitialLearnRate',1e-3, ...
      'MaxEpochs',20,'VerboseFrequency',10);

ネットワークに学習をさせます。

net = trainNetwork(ds,lgraph,options)
Training on single CPU.
Initializing input data normalization.
|========================================================================================|
|  Epoch  |  Iteration  |  Time Elapsed  |  Mini-batch  |  Mini-batch  |  Base Learning  |
|         |             |   (hh:mm:ss)   |   Accuracy   |     Loss     |      Rate       |
|========================================================================================|
|       1 |           1 |       00:00:03 |       39.75% |       0.7658 |          0.0010 |
|      10 |          10 |       00:00:25 |       49.98% |       0.7388 |          0.0010 |
|      20 |          20 |       00:00:49 |       66.39% |       0.6910 |          0.0010 |
|========================================================================================|
Training finished: Max epochs completed.


net = 
  DAGNetwork with properties:

         Layers: [31x1 nnet.cnn.layer.Layer]
    Connections: [34x2 table]
     InputNames: {'inputImage'}
    OutputNames: {'pixelLabels'}

ネットワークを表示します。

plot(lgraph)

入力引数

すべて折りたたむ

ネットワーク入力のイメージ サイズ。以下として指定します。

  • [height, width] の形式の 2 要素ベクトル。

  • [height, width, depth] の形式の 3 要素ベクトル。depth はイメージ チャネルの数です。depth を、RGB イメージの場合は 3、グレースケール イメージの場合は 1、マルチスペクトル イメージとハイパースペクトル イメージの場合はチャネル数に設定します。

セマンティック セグメンテーションのクラス数。1 より大きい整数で指定します。

事前学習済みのネットワーク モデル。'vgg16' または 'vgg19' として指定します。これらのモデルには深さ 5 の符号化器があります。'vgg16' モデルを使用する場合は、RGB 入力を指定しなければなりません。関数 im2gray を使用して、グレースケール イメージを RGB に変換できます。

符号化器の深さ。正の整数で指定します。

SegNet は、符号化器と対応する復号化器のサブネットワークで構成されます。これらのネットワークの深さが、入力イメージの処理時のダウンサンプル回数またはアップサンプル回数を決定します。符号化器ネットワークは、入力イメージを係数 2D でダウンサンプリングします。DencoderDepth の値です。復号化器ネットワークは符号化器ネットワーク出力を係数 2D でアップサンプリングします。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: 'NumConvolutionLayers',1

各符号化器と復号化器のセクション内の畳み込み層の数。正の整数または正の整数のベクトルとして指定します。

NumConvolutionLayers説明
スカラーすべての符号化器と復号化器のセクションで同じ数の層が使用されます。
ベクトルNumConvolutionLayersk 番目の要素は、k 番目の符号化器セクションおよび対応する復号化器セクションの畳み込み層の数です。一般的な値は、[1, 3] の範囲にあります。

SegNet 符号化器ネットワークの各セクションの出力チャネルの数。正の整数または正の整数のベクトルとして指定します。segnetLayers は、対応する符号化器セクションに一致するように復号化器の出力チャネルの数を設定します。

NumOutputChannels説明
スカラーすべての符号化器と復号化器のセクションで同じ数の出力チャネルが使用されます。
ベクトルNumOutputChannelsk 番目の要素は、k 番目の符号化器セクションおよび対応する復号化器セクションの出力チャネルの数です。

畳み込み層のフィルター サイズ。正の奇数の整数または正の奇数の整数の 2 要素の行ベクトルとして指定します。一般的な値は、[3, 7] の範囲にあります。

FilterSize説明
スカラーフィルターは正方形です。
2 要素の行ベクトル

フィルターのサイズは [height width] です。

出力引数

すべて折りたたむ

SegNet ネットワーク アーキテクチャを表す層。layerGraph (Deep Learning Toolbox) オブジェクトとして返されます。

ヒント

  • SegNet 符号化器と復号化器のサブネットワーク内のセクションは、畳み込み層、バッチ正規化層および ReLU 層で構成されます。

  • すべての畳み込み層は、バイアス項がゼロに固定されるように構成されます。

  • 符号化器と復号化器のサブネットワーク内の畳み込み層の重みは、'MSRA' 重み初期化メソッドを使用して初期化されます。'vgg16' または 'vgg19' モデルの場合、復号化器サブネットワークのみが MSRA を使用して初期化されます。[1]

  • segnetLayers によって生成されたネットワークは、trainNetwork (Deep Learning Toolbox) で学習を行った後、深層学習用の GPU コード生成をサポートします。詳細と例についてはコード生成 (Deep Learning Toolbox)を参照してください。

参照

[1] He, K., X. Zhang, S. Ren, and J. Sun. "Delving Deep Into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." Proceedings of the IEEE International Conference on Computer Vision. 2015, 1026–1034.

[2] Badrinarayanan, V., A. Kendall, and R. Cipolla. "Segnet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation." arXiv. Preprint arXiv: 1511.0051, 2015.

拡張機能

バージョン履歴

R2017b で導入

すべて折りたたむ

R2024a: segnetLayers は削除予定

関数 segnetLayers は将来のリリースで削除される予定です。コードを更新するには、代わりに dlnetwork (Deep Learning Toolbox) を作成してください。addLayers (Deep Learning Toolbox)connectLayers (Deep Learning Toolbox) などの関数を使用してネットワークを構築できます。

ネットワークに出力層を含めないでください。代わりに、損失関数を定義します。ピクセル分類に適した損失関数のサンプルを次に示します。

function loss = modelLoss(Y,T)
  z = generalizedDice(Y,T); 
  loss = 1 - mean(z,"all"); 
end 

function loss = modelLoss(Y,T) 
  mask = ~isnan(T);
  targets(isnan(T)) = 0;
  loss = crossentropy(Y,T,Mask=mask); 
end

関数 trainnet (Deep Learning Toolbox) を使用してネットワークに学習させるときに損失関数を指定します。たとえば、次のコードは、学習データ images と損失関数 modelLoss を使用して、dlnetwork ネットワーク net に学習させます。

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