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

segnetLayers

セマンティック セグメンテーションの SegNet 層の作成

説明

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

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

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

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

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

すべて折りたたむ

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

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);

SegNet 層を作成します。

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

         Layers: [31x1 nnet.cnn.layer.Layer]
    Connections: [34x2 table]

セマンティック セグメンテーション ネットワークの学習用にピクセル ラベル イメージ データストアを作成します。

pximds = pixelLabelImageDatastore(imds,pxds);

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

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

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

net = trainNetwork(pximds,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:07 |       39.69% |       0.7640 |          0.0010 |
|      10 |          10 |       00:01:01 |       49.87% |       0.7390 |          0.0010 |
|      20 |          20 |       00:01:58 |       66.56% |       0.6911 |          0.0010 |
|========================================================================================|
net = 
  DAGNetwork with properties:

         Layers: [31x1 nnet.cnn.layer.Layer]
    Connections: [34x2 table]

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

plot(lgraph)

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

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

         Layers: [59x1 nnet.cnn.layer.Layer]
    Connections: [66x2 table]

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

figure
plot(lgraph)

入力引数

すべて折りたたむ

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

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

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

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

事前学習済みのネットワーク モデル。'vgg16' または 'vgg19' として指定します。これらのモデルには深さ 5 の符号化器があります。

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

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

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: 'NumConvolutionLayers',1

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

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

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

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

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

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

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

出力引数

すべて折りたたむ

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

ヒント

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

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

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

  • segnetLayers によって生成されたネットワークは、trainNetwork で学習を行った後、深層学習用の 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 で導入