Main Content

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

ディープ ネットワーク デザイナーでの簡単なセマンティック セグメンテーション ネットワークの学習

この例では、ディープ ネットワーク デザイナーを使用し、簡単なセマンティック セグメンテーション ネットワークを作成し、その学習を行う方法を説明します。

セマンティック セグメンテーションは、イメージの各ピクセルをクラス ラベル ("花"、"人物"、"道路"、"空"、"海洋"、"自動車" など) に関連付けるプロセスを表します。セマンティック セグメンテーションの応用例としては、自動運転のための道路セグメンテーションや医療診断のための癌細胞セグメンテーションなどがあります。詳細については、深層学習を使用したセマンティック セグメンテーション入門 (Computer Vision Toolbox)を参照してください。

学習データの読み込み

セマンティック セグメンテーション ネットワークに学習させるには、イメージ コレクションと、対応するピクセル ラベル付きイメージ コレクションが必要です。ピクセル ラベル付きイメージは、すべてのピクセル値がそのピクセルのカテゴリカル ラベルを表すイメージです。この例では、説明のために 32 x 32 の三角形のイメージを含む単純なデータ セットを使用します。イメージ ラベラー (Computer Vision Toolbox)を使用して、対話形式でピクセルにラベル付けし、ラベル データをコンピューター ビジョン用にエクスポートできます。セマンティック セグメンテーション アプリケーション用の学習データ作成の詳細については、セマンティック セグメンテーションのピクセルのラベル付け (Computer Vision Toolbox)を参照してください。

学習データを読み込みます。

dataFolder  = fullfile(toolboxdir('vision'), ...
'visiondata','triangleImages');

学習用データの準備

imageDir = fullfile(dataFolder,'trainingImages');
labelDir = fullfile(dataFolder,'trainingLabels');

イメージを格納する ImageDatastore を作成します。

imds = imageDatastore(imageDir);

グラウンド トゥルース ピクセル ラベルを格納する PixelLabelDatastore を作成します。このデータ セットには、"triangle""background" の 2 つのクラスがあります。

classNames = ["triangle","background"];
labelIDs   = [255 0];

pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);

関数 combine を使用して、イメージ データストアとピクセル ラベル データストアを CombinedDatastore オブジェクトに統合します。統合されたデータストアは、基になるデータストアでのイメージ ペア間のパリティを維持します。

cds = combine(imds,pxds);

ネットワークの構成

ディープ ネットワーク デザイナーを開きます。

deepNetworkDesigner

ディープ ネットワーク デザイナーでは、深層学習ネットワークの構築、編集、および学習ができます。[空のネットワーク] で一時停止し、[新規] をクリックします。

[層のライブラリ] から [デザイナー] ペインに層をドラッグして、セマンティック セグメンテーション ネットワークを作成します。

次の順序で層を結合します。

  1. imageInputLayer (InputSize32,32,1 に設定)

  2. convolution2dLayer (FilterSize3,3NumFilters64Padding1,1,1,1 に設定)

  3. reluLayer

  4. maxPooling2dLayer (PoolSize2,2Stride2,2Padding0,0,0,0 に設定)

  5. convolution2dLayer (FilterSize3,3NumFilters64Padding1,1,1,1 に設定)

  6. reluLayer

  7. transposedConv2dLayer (FilterSize4,4 NumFilters64 Stride2,2and Cropping1,1,1,1 に設定)

  8. convolution2dLayer (FilterSize1,1NumFilters2Padding0,0,0,0 に設定)

  9. softmaxLayer

  10. pixelClassificationLayer

このネットワークをコマンド ラインで作成し、deepNetworkDesigner(layers) を使用してネットワークをディープ ネットワーク デザイナーにインポートすることもできます。

layers = [
    imageInputLayer([32 32 1])
    convolution2dLayer([3,3],64,'Padding',[1,1,1,1])
    reluLayer
    maxPooling2dLayer([2,2],'Stride',[2,2])
    convolution2dLayer([3,3],64,'Padding',[1,1,1,1])
    reluLayer
    transposedConv2dLayer([4,4],64,'Stride',[2,2],'Cropping',[1,1,1,1])
    convolution2dLayer([1,1],2)
    softmaxLayer
    pixelClassificationLayer
    ];

このネットワークは、ダウンサンプリングとアップサンプリングの設計に基づくシンプルなセマンティック セグメンテーション ネットワークです。セマンティック セグメンテーション ネットワークの構築の詳細については、セマンティック セグメンテーション ネットワークの作成 (Computer Vision Toolbox)を参照してください。

データのインポート

学習データストアをインポートするには、[データ] タブで [データのインポート][カスタム データのインポート] を選択します。学習データとして CombinedDatastore オブジェクト cds を選択します。検証データは None を選択します。[インポート] をクリックして学習データをインポートします。

ディープ ネットワーク デザイナーが、インポートされたセマンティック セグメンテーション データのプレビューを表示します。プレビューには、学習イメージとグラウンド トゥルース ピクセル ラベルが表示されます。ネットワークは入力イメージを要求し (左側)、各ピクセルの分類を三角形または背景のいずれかとして返します (右側)。

ネットワークの学習

学習オプションを設定し、ネットワークに学習させます。

[学習] タブで、[学習オプション] をクリックします。[InitialLearnRate]0.001 に、[MiniBatchSize]64 に、[MaxEpochs]100 に設定します。[OK] をクリックして学習オプションを設定します。

[学習] をクリックしてネットワークに学習させます。

学習が完了したら、[エクスポート] をクリックして、学習済みネットワークをワークスペースにエクスポートします。学習済みネットワークは、変数 trainedNetwork_1 に保存されます。

イメージ内の三角形のセグメント化

テスト データと学習済みネットワークを使用して予測を行います。

semanticseg を使用してテスト イメージをセグメント化します。関数 labeloverlay を使用して、ラベルをイメージの上に重ねて表示します。

imgTest = imread('triangleTest.jpg');
testSeg = semanticseg(imgTest,trainedNetwork_1);
testImageSeg = labeloverlay(imgTest,testSeg);

結果を表示します。

figure
imshow(testImageSeg)

ネットワークは、テスト イメージの三角形に正常にラベルを付けます。

この例で学習を行ったセマンティック セグメンテーション ネットワークは非常にシンプルです。より複雑なセマンティック セグメンテーション ネットワークを構築するには、Computer Vision Toolbox の関数segnetLayers (Computer Vision Toolbox)deeplabv3plusLayers (Computer Vision Toolbox)、およびunetLayers (Computer Vision Toolbox)を使用できます。関数 deeplabv3plusLayers を使用して DeepLab v3+ ネットワークを作成する方法を示す例については、深層学習を使用したセマンティック セグメンテーション (Computer Vision Toolbox)を参照してください。

参考

| (Computer Vision Toolbox) | (Computer Vision Toolbox) | (Computer Vision Toolbox) | (Image Processing Toolbox) | (Computer Vision Toolbox) | | (Computer Vision Toolbox) | (Computer Vision Toolbox) | (Computer Vision Toolbox)

関連するトピック