Main Content

セマンティック セグメンテーション ネットワークの作成

簡単なセマンティック セグメンテーション ネットワークを作成し、多くのセマンティック セグメンテーション ネットワークで共通してみられる層について学習します。セマンティック セグメンテーション ネットワークの共通パターンでは、畳み込み層と ReLU 層間でイメージをダウンサンプリングした後、入力サイズを一致させるために出力をアップサンプリングする必要があります。この操作は、イメージ ピラミッドを使用した標準のスケールスペース解析に類似しています。ただし、このプロセス中、ネットワークはセグメント化するクラスの特定のセットに対して最適化されている非線形フィルターを使用して操作を実行します。

イメージ入力層の作成

セマンティック セグメンテーション ネットワークは imageInputLayer から始まります。これは、ネットワークで処理できる最小のイメージ サイズを定義します。ほとんどのセマンティック セグメンテーション ネットワークは完全畳み込みです。つまり、指定の入力サイズよりも大きいイメージを処理できます。ここでは、64×64 の RGB イメージを処理するネットワークで [32 32 3] のイメージ サイズが使用されています。

inputSize = [32 32 3];
imgLayer = imageInputLayer(inputSize)
imgLayer = 
  ImageInputLayer with properties:

                      Name: ''
                 InputSize: [32 32 3]
        SplitComplexInputs: 0

   Hyperparameters
          DataAugmentation: 'none'
             Normalization: 'zerocenter'
    NormalizationDimension: 'auto'
                      Mean: []

ダウンサンプリング ネットワークの作成

畳み込み層と ReLU 層から始めます。畳み込み層の出力サイズが入力サイズと同じになるように、畳み込み層のパディングが選択されています。これによって、ネットワークで処理を進める間、ほとんどの層間の入力サイズと出力サイズが変わらないため、ネットワークが作成しやすくなります。

filterSize = 3;
numFilters = 32;
conv = convolution2dLayer(filterSize,numFilters,Padding=1);
relu = reluLayer();

ダウンサンプリングは、最大プーリング層を使用して実行されます。'Stride' パラメーターを 2 に設定することで、入力を 2 の係数でダウンサンプリングする最大プーリング層を作成します。

poolSize = 2;
maxPoolDownsample2x = maxPooling2dLayer(poolSize,Stride=2);

畳み込み層、ReLU 層および最大プール層を積み重ねて、その入力を 4 の係数でダウンサンプリングするネットワークを作成します。

downsamplingLayers = [
    conv
    relu
    maxPoolDownsample2x
    conv
    relu
    maxPoolDownsample2x
    ]
downsamplingLayers = 
  6x1 Layer array with layers:

     1   ''   2-D Convolution   32 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
     2   ''   ReLU              ReLU
     3   ''   2-D Max Pooling   2x2 max pooling with stride [2  2] and padding [0  0  0  0]
     4   ''   2-D Convolution   32 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
     5   ''   ReLU              ReLU
     6   ''   2-D Max Pooling   2x2 max pooling with stride [2  2] and padding [0  0  0  0]

アップサンプリング ネットワークの作成

アップサンプリングは、転置畳み込み層 (一般的には "deconv" または "逆畳み込み" 層とも呼ばれる) を使用して実行されます。転置畳み込みがアップサンプリングに使用されている場合、アップサンプリングとフィルター処理が同時に実行されます。

2 でアップサンプリングする転置畳み込み層を作成します。

filterSize = 4;
transposedConvUpsample2x = transposedConv2dLayer(4,numFilters,Stride=2,Cropping=1);

出力サイズが入力サイズの 2 倍になるよう 'Cropping' パラメーターが 1 に設定されています。

転置畳み込み層と ReLU 層を積み重ねます。この層のセットへの入力は 4 でアップサンプリングされます。

upsamplingLayers = [
    transposedConvUpsample2x
    relu
    transposedConvUpsample2x
    relu
    ]
upsamplingLayers = 
  4x1 Layer array with layers:

     1   ''   2-D Transposed Convolution   32 4x4 transposed convolutions with stride [2  2] and cropping [1  1  1  1]
     2   ''   ReLU                         ReLU
     3   ''   2-D Transposed Convolution   32 4x4 transposed convolutions with stride [2  2] and cropping [1  1  1  1]
     4   ''   ReLU                         ReLU

ピクセル分類用の最終層の作成

最終的な層のセットは、ピクセル分類の作成を行います。これらの最終層は、入力イメージと同じ空間次元 (高さと幅) を持つ入力を処理します。ただし、チャネル数 (3 番目の次元) は大きく、最後の転置畳み込み層フィルター数と同じになります。この 3 つ目の次元を、セグメント化するクラス数まで絞り込む必要があります。これを実行するには、フィルターの数がクラス数 (3 など) と一致する 1 行 1 列の畳み込み層を使用します。

入力特徴マップの 3 番目の次元をクラス数まで結合する畳み込み層を作成します。

numClasses = 3;
conv1x1 = convolution2dLayer(1,numClasses);

この 1 行 1 列の畳み込み層の後に、ソフトマックス層が続きます。この層は、全結合層の出力を正規化するソフトマックス活性化関数を適用します。ソフトマックス層の出力は、合計が 1 になる正の数値で構成されており、分類の確率と見なすことができます。

finalLayers = [
    conv1x1
    softmaxLayer()
    ]
finalLayers = 
  2x1 Layer array with layers:

     1   ''   2-D Convolution   3 1x1 convolutions with stride [1  1] and padding [0  0  0  0]
     2   ''   Softmax           softmax

すべての層の積み重ね

すべての層を積み重ねて、セマンティック セグメンテーション ネットワークを完成させます。

net = [
    imgLayer    
    downsamplingLayers
    upsamplingLayers
    finalLayers
    ]
net = 
  13x1 Layer array with layers:

     1   ''   Image Input                  32x32x3 images with 'zerocenter' normalization
     2   ''   2-D Convolution              32 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
     3   ''   ReLU                         ReLU
     4   ''   2-D Max Pooling              2x2 max pooling with stride [2  2] and padding [0  0  0  0]
     5   ''   2-D Convolution              32 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
     6   ''   ReLU                         ReLU
     7   ''   2-D Max Pooling              2x2 max pooling with stride [2  2] and padding [0  0  0  0]
     8   ''   2-D Transposed Convolution   32 4x4 transposed convolutions with stride [2  2] and cropping [1  1  1  1]
     9   ''   ReLU                         ReLU
    10   ''   2-D Transposed Convolution   32 4x4 transposed convolutions with stride [2  2] and cropping [1  1  1  1]
    11   ''   ReLU                         ReLU
    12   ''   2-D Convolution              3 1x1 convolutions with stride [1  1] and padding [0  0  0  0]
    13   ''   Softmax                      softmax

このネットワークには、Deep Learning Toolbox™ の trainnet を使用して学習させることができます。

参考

(Deep Learning Toolbox)

関連するトピック