セマンティック セグメンテーション ネットワークの作成
簡単なセマンティック セグメンテーション ネットワークを作成し、多くのセマンティック セグメンテーション ネットワークで共通してみられる層について学習します。セマンティック セグメンテーション ネットワークの共通パターンでは、畳み込み層と 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
を使用して学習させることができます。
参考
trainnet
(Deep Learning Toolbox)
関連するトピック
- 深層学習を使用したセマンティック セグメンテーション入門
- 深層学習を使用したセマンティック セグメンテーション
- セマンティック セグメンテーション ネットワークの学習
- 深層学習層の一覧 (Deep Learning Toolbox)