Main Content

deeplabv3plus

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

R2024a 以降

説明

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

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

すべて折りたたむ

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

imageSize = [480 640 3];
numClasses = 5;
network = "resnet18";
net = deeplabv3plus(imageSize,numClasses,network, ...
             DownsamplingFactor=16);

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

analyzeNetwork(net)

イメージ データストアを使用して、三角形データ セットのイメージを読み込みます。データ ストアには、ランダムな三角形のグレースケール イメージが 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);
net = deeplabv3plus(imageSize,numClasses,"resnet18");

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

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

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

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

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

net = trainnet(tds,net,"crossentropy",opts);
    Iteration    Epoch    TimeElapsed    LearnRate    TrainingLoss
    _________    _____    ___________    _________    ____________
            1        1       00:00:04         0.01         0.93844
           50        2       00:04:09         0.01        0.033749
           75        3       00:05:35         0.01        0.026353
Training stopped: Max epochs completed

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

I = imread("triangleTest.jpg");

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

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

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

C = semanticseg(I,net);

結果を表示します。

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

Figure contains an axes object. The axes object contains an object of type image.

サポート関数

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+ ネットワーク。セマンティック イメージ セグメンテーション用の dlnetwork (Deep Learning Toolbox) オブジェクトとして返されます。ネットワークは、符号化器-復号化器アーキテクチャ、膨張畳み込み、およびスキップ接続を使用してイメージをセグメント化します。ネットワークをセマンティック セグメンテーション用に使用する前に、関数 trainnet (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.

拡張機能

バージョン履歴

R2024a で導入

参考

オブジェクト

関数