セマンティック セグメンテーション ネットワークの作成
簡単なセマンティック セグメンテーション ネットワークを作成し、多くのセマンティック セグメンテーション ネットワークで共通してみられる層について学習します。セマンティック セグメンテーション ネットワークの共通パターンでは、畳み込み層と 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 =
6×1 Layer array with layers:
1 '' 2-D Convolution 32 3×3 convolutions with stride [1 1] and padding [1 1 1 1]
2 '' ReLU ReLU
3 '' 2-D Max Pooling 2×2 max pooling with stride [2 2] and padding [0 0 0 0]
4 '' 2-D Convolution 32 3×3 convolutions with stride [1 1] and padding [1 1 1 1]
5 '' ReLU ReLU
6 '' 2-D Max Pooling 2×2 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 =
4×1 Layer array with layers:
1 '' 2-D Transposed Convolution 32 4×4 transposed convolutions with stride [2 2] and cropping [1 1 1 1]
2 '' ReLU ReLU
3 '' 2-D Transposed Convolution 32 4×4 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 =
2×1 Layer array with layers:
1 '' 2-D Convolution 3 1×1 convolutions with stride [1 1] and padding [0 0 0 0]
2 '' Softmax softmax
すべての層の積み重ね
すべての層を積み重ねて、セマンティック セグメンテーション ネットワークを完成させます。
net = [
imgLayer
downsamplingLayers
upsamplingLayers
finalLayers
]net =
13×1 Layer array with layers:
1 '' Image Input 32×32×3 images with 'zerocenter' normalization
2 '' 2-D Convolution 32 3×3 convolutions with stride [1 1] and padding [1 1 1 1]
3 '' ReLU ReLU
4 '' 2-D Max Pooling 2×2 max pooling with stride [2 2] and padding [0 0 0 0]
5 '' 2-D Convolution 32 3×3 convolutions with stride [1 1] and padding [1 1 1 1]
6 '' ReLU ReLU
7 '' 2-D Max Pooling 2×2 max pooling with stride [2 2] and padding [0 0 0 0]
8 '' 2-D Transposed Convolution 32 4×4 transposed convolutions with stride [2 2] and cropping [1 1 1 1]
9 '' ReLU ReLU
10 '' 2-D Transposed Convolution 32 4×4 transposed convolutions with stride [2 2] and cropping [1 1 1 1]
11 '' ReLU ReLU
12 '' 2-D Convolution 3 1×1 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)