Main Content

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

deeplabv3plusLayers

セマンティック イメージ セグメンテーション用の DeepLab v3+ 畳み込みニューラル ネットワークの作成

R2019b 以降

説明

layerGraph = deeplabv3plusLayers(imageSize,numClasses,network) は、指定されたベース ネットワーク、クラス数、およびイメージ サイズをもつ DeepLab v3+ 層を返します。

layerGraph = deeplabv3plusLayers(___,'DownsamplingFactor',value) はさらに、ダウンサンプリング係数 (出力ストライド)[1]8 または 16 に設定します。ダウンサンプリング係数は、DeepLab v3+ の符号化器セクションが入力イメージをダウンサンプリングする量を設定します。

すべて折りたたむ

ResNet-18 ベースの DeepLab v3+ ネットワークを作成します。

imageSize = [480 640 3];
numClasses = 5;
network = 'resnet18';
lgraph = deeplabv3plusLayers(imageSize,numClasses,network, ...
             'DownsamplingFactor',16);

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

analyzeNetwork(lgraph)

イメージ データストアを使用して、三角形データ セットのイメージを読み込みます。データ ストアには、ランダムな三角形のグレースケール イメージが 200 個格納されています。各イメージは 32×32 です。

dataSetDir = fullfile(toolboxdir('vision'),'visiondata','triangleImages');
imageDir = fullfile(dataSetDir,'trainingImages');
imds = imageDatastore(imageDir);

ピクセル ラベル データストアを使用して、三角形データ セットのピクセル ラベルを読み込みます。

labelDir = fullfile(dataSetDir, 'trainingLabels');
classNames = ["triangle","background"];
labelIDs   = [255 0];
pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);

DeepLab v3+ ネットワークを作成します。

imageSize = [256 256];
numClasses = numel(classNames);
lgraph = deeplabv3plusLayers(imageSize,numClasses,'resnet18');

イメージとピクセル ラベル データを学習用に組み合わせ、前処理変換を適用して学習イメージのサイズを変更します。

cds = combine(imds,pxds);
tds = transform(cds, @(data)preprocessTrainingData(data,imageSize));

学習オプションの指定。ミニバッチ サイズを小さくして、メモリ使用量を減らします。

opts = trainingOptions('sgdm',...
    'MiniBatchSize',8,...
    'MaxEpochs',3);

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

net = trainNetwork(tds,lgraph,opts);
Training on single GPU.
Initializing input data normalization.
|========================================================================================|
|  Epoch  |  Iteration  |  Time Elapsed  |  Mini-batch  |  Mini-batch  |  Base Learning  |
|         |             |   (hh:mm:ss)   |   Accuracy   |     Loss     |      Rate       |
|========================================================================================|
|       1 |           1 |       00:00:00 |       34.79% |       0.9817 |          0.0100 |
|       2 |          50 |       00:00:23 |       99.02% |       0.0261 |          0.0100 |
|       3 |          75 |       00:00:31 |       99.16% |       0.0211 |          0.0100 |
|========================================================================================|

テスト イメージを読み取ります。

I = imread('triangleTest.jpg');

入力イメージ サイズを 32 で割った値に等しい因数でテスト イメージをサイズ変更し、テスト イメージの三角形と学習時の三角形のサイズがほぼ等しくなるようにします。

I = imresize(I,'Scale',imageSize./32);

イメージをセグメント化します。

C = semanticseg(I,net);

結果を表示します。

B = labeloverlay(I,C);
figure
imshow(B)

サポート関数

function data = preprocessTrainingData(data, imageSize)
% Resize the training image and associated pixel label image.
data{1} = imresize(data{1},imageSize);
data{2} = imresize(data{2},imageSize);

% Convert grayscale input image into RGB for use with ResNet-18, which
% requires RGB image input.
data{1} = repmat(data{1},1,1,3);
end

入力引数

すべて折りたたむ

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

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

  • [height, width, 3] の形式の 3 要素ベクトル。3 番目の要素 3 は、RGB に対応します。

ネットワークが分類するクラス数。1 より大きい整数として指定します。

ベース ネットワーク。resnet18 (Deep Learning Toolbox)resnet50 (Deep Learning Toolbox)mobilenetv2 (Deep Learning Toolbox)xception (Deep Learning Toolbox)、または inceptionresnetv2 (Deep Learning Toolbox) として指定します。対応するネットワーク アドオンをインストールしなければなりません。

出力引数

すべて折りたたむ

DeepLab v3+ ネットワーク。セマンティック イメージ セグメンテーション用の畳み込みニューラル ネットワークとして返されます。ネットワークは、符号化器-復号化器アーキテクチャ、膨張畳み込み、およびスキップ接続を使用してイメージをセグメント化します。ネットワークをセマンティック セグメンテーション用に使用する前に、関数 trainNetwork (Deep Learning Toolbox) (Deep Learning Toolbox™ が必要) を使用してネットワークに学習させなければなりません。

アルゴリズム

  • xception (Deep Learning Toolbox) ベース ネットワークまたは mobilenetv2 (Deep Learning Toolbox) ベース ネットワークのいずれかを使用して DeepLab v3+ ネットワークを作成する場合、深さ方向に分離可能な畳み込みがアトラス空間ピラミッドプーリング (ASPP) および復号化器サブネットワークで使用されます。他のすべてのベース ネットワークでは、畳み込み層が使用されます。

  • この DeepLab v3+ の実装には、ASPP にグローバル平均プーリング層が含まれていません。

参照

[1] Chen, L., Y. Zhu, G. Papandreou, F. Schroff, and H. Adam. "Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation." Computer Vision — ECCV 2018, 833-851. Munic, Germany: ECCV, 2018.

拡張機能

バージョン履歴

R2019b で導入