主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

深層学習を使用したマルチスペクトルメジのセマンティックセグメンテション

この例では7チャネル(3つのカラーチャネル,3つの近赤外チャネルおよびマスク)のマルチスペクトルイメージのセマンティックセグメンテーションを実行する,U-Net畳み込みニューラルネットワークを学習させる方法を示します。

この例では,U-Netネットワークに学習させる方法を示し,さらに事前学習済みのU-Netネットワークも示します。U-Netネットワークの学習を選択した場合,以3.0计算能力上のCUDA対応NVIDIA GPU™を使用します(并行计算工具箱™が必要)。

はじめに

セマンティックセグメンテ,ションでは;セマンティックセグメンテーションの適用例の1つに,森林被覆の時間的変化である森林伐採の追跡があります。環境保護機関は,森林伐採を追跡し,地域の環境的生態学的健全性を評価し測定します。

深層学習ベースのセマンティックセグメンテーションにより,高解像度の航空写真から植被を正確に測定できます。課題の1つに,視覚的に類似した特性のクラスを切り分けること,たとえば緑のピクセルを草,低木または樹木として区別することがあります。分類の精度を高めるために,一部のデータセットには各ピクセルに関する追加情報を提供するマルチスペクトルイメージが含まれています。たとえば,ハームリンビーチ州立公園のデータセットでは,クラスをより明確に分離する近赤外チャネルでカラーイメージが補完されています。

この例では,深層学習ベースのセマンティックセグメンテーション手法を使用して,マルチスペクトルイメージセットから領域の植被率を計算する方法を説明します。

デ,タのダウンロ,ド

この例では,ネットワークに学習させるために,高解像度のマルチスペクトルデータセットを使用します[1]。このイメージセットはニューヨーク州のハームリンビーチ州立公園の上空でドローンを使用して撮影されました。このデータには18個のオブジェクトクラスラベルの付いた,ラベル付き学習セット,検証セットおよびテストセットが含まれます。デタファルのサズは~ 3.0 gbです。

補助関数downloadHamlinBeachMSIDataを使用して,デタセットのmatファルバジョンをダウンロドします。この関数は,この例にサポ,トファ,ルとして添付されています。

imageDir = tempdir;url =“http://www.cis.rit.edu/ ~ rmk6217 / rit18_data.mat”;downloadHamlinBeachMSIData (url, imageDir);

さらに,補助関数downloadTrainedUnetを使用して,このデ,タセット用に事前学習済みバ,ジョンのU-Netをダウンロ,ドします。この関数は,この例にサポ,トファ,ルとして添付されています。事前学習済みのモデルを使用することで,学習の完了を待ことなく例全体を実行できます。

trainedUnet_url =“//www.tatmou.com/金宝appsupportfiles/vision/data/multispectralUnet.mat”;downloadTrainedUnet (trainedUnet_url imageDir);

学習デ,タの検証

デ,タセットをワ,クスペ,スに読み込みます。

负载(fullfile (imageDir“rit18_data”“rit18_data.mat”));

デ,タの構造体を確認します。

train_dataval_datatest_data
名称大小字节类属性test_data 7x12446x7654 1333663576 uint16 train_data 7x9393x5642 741934284 uint16 val_data 7x8833x6918 855493716 uint16

マルチスペクトルメジデタはnumChannelsx宽度x高度配列に配置されます。ただし,matlab®では,マルチチャネル宽度x高度xnumChannels配列に配置されます。チャネルが3番目の次元になるようにデタを形状変更するには,補助関数switchChannelsToThirdPlaneを使用します。この関数は,この例にサポ,トファ,ルとして添付されています。

train_data = switchChannelsToThirdPlane(train_data);val_data = switchChannelsToThirdPlane(val_data);test_data = switchChannelsToThirdPlane(test_data);

デ,タが正しい構造体であることを確認します。

train_dataval_datatest_data
名称大小字节类属性test_data 12446x7654x7 1333663576 uint16 train_data 9393x5642x7 741934284 uint16 val_data 8833x6918x7 855493716 uint16

RGBカラチャネルは3番目,2番目および1番目のメジチャネルです。学習,検証およびテストメジの色成分をモンタジュとして表示します。イメージを画面上で明るく表示するには,関数histeqを使用してヒストグラム均等化を行います。

图蒙太奇(...{histeq(train_data(:,:,[3 2 1])),...Histeq (val_data(:,:,[3 2 1])),...Histeq (test_data(:,:,[3 2 1]))},...“BorderSize”10“写成BackgroundColor”“白色”)标题(“训练图像(左)、验证图像(中)和测试图像(右)的RGB组件”

ヒストグラム均等化を行った学習デタの最後の3のチャネルを,ジュとして表示します。これらのチャネルは,近赤外域に対応します。熱の痕跡に基づいて,。たとえば2番目のチャネルイメージの中央にある木は,他の2つのチャネルの木より詳しく表示されます。

图蒙太奇(...{histeq (train_data (:: 4)),...histeq (train_data (:: 5)),...histeq (train_data (:: 6))},...“BorderSize”10“写成BackgroundColor”“白色”)标题(“训练图IR通道1(左)、2(中)、3(右)”

チャネル7は有効なセグメンテ,ション領域を示すマスクです。学習メジ,検証ジのマスクを表示します。

图蒙太奇(...{train_data (:: 7)...val_data (:: 7)...test_data (:: 7)},...“BorderSize”10“写成BackgroundColor”“白色”)标题(“训练图(左)、验证图(中)、测试图(右)的掩码”

ラベル付きイメージには,セグメンテーション用のグラウンドトゥルースデータが含まれ,それぞれのピクセルには18個のクラスのいずれかが割り当てられています。クラスとそれに対応するidのリストを取得します。

disp(类)
0.其他类/图像边界道路标志2。树3。建设4。交通工具(小汽车、卡车或公共汽车)6人。7号椅子。野餐桌8。9.黑木面板 White Wood Panel 10. Orange Landing Pad 11. Water Buoy 12. Rocks 13. Other Vegetation 14. Grass 15. Sand 16. Water (Lake) 17. Water (Pond) 18. Asphalt (Parking Lot/Walkway)

クラス名のベクトルを作成します。

classNames = [“路标”“树”“建筑”“汽车”“人”...“LifeguardChair”“PicnicTable”“BlackWoodPanel”...“WhiteWoodPanel”“OrangeLandingPad”“浮”“石头”...“LowLevelVegetation”“Grass_Lawn”“Sand_Beach”...“Water_Lake”“Water_Pond”“沥青”];

ヒストグラム均等化を行ったRGB学習メジにラベルを重ね合わせます。カラバをメジに追加します。

cmap = jet(编号(classNames));B = labeloverlay(histeq(train_data(:,:,4:6)),train_labels,“透明”, 0.8,“Colormap”,提出);图的标题(“培训”标签) imshow(B) N = number (classNames);ticks = 1/(N*2):1/N:1;colorbar (“TickLabels”cellstr(类名),“滴答”蜱虫,“TickLength”0,“TickLabelInterpreter”“没有”);colormap城市规划机构(cmap)

学習デタをmatファルとして,学習ラベルをPNGファルとして保存します。

保存(“train_data.mat”“train_data”);imwrite (train_labels“train_labels.png”);

学習用ランダムパッチ抽出デ,タストアの作成

ランダムパッチ抽出デ,タストアを使用して,ネットワ,クに学習デ,タを供給します。このデータストアは,グラウンドトゥルースイメージとピクセルラベルデータを含むイメージデータストアとピクセルラベルデータストアから,対応する複数のランダムパッチを抽出します。パッチは,大きなイメージに対するメモリ不足を防ぎ,利用可能な学習データの量を効果的に増やすための一般的な手法です。

学習▪▪メ▪▪ジを“train_data.mat”からimageDatastoreに格納することから始めます。垫ファイル形式は非標準イメージ形式であるため,イメージデータを読み取るために垫ファイルリーダーを使用しなければなりません。学習データから最初の6つのチャネルを抽出し,マスクを含む最後のチャネルを除外する補助垫ファイルリーダーmatReaderを使用できます。この関数は,この例にサポ,トファ,ルとして添付されています。

imds = imageDatastore(“train_data.mat”“FileExtensions”“.mat”“ReadFcn”, @matReader);

pixelLabelDatastore(计算机视觉工具箱)を作成して,18個のラベル付き領域を含むラベルパッチを格納します。

pixelLabelIds = 1:18;pxds = pixelLabelDatastore(“train_labels.png”一会,pixelLabelIds);

イメージデータストアとピクセルラベルデータストアからrandomPatchExtractionDatastoreを作成します。それぞれのミニバッチには,サesc escズが256 × 256ピクセルの16個のパッチが含まれます。エポックのそれぞれの反復で,1000個のミニバッチが抽出されます。

dsTrain = randompatchextracactiondatastore (imds,pxds,[256,256],“PatchesPerImage”, 16000);

ランダムパッチ抽出デ,タストアdsTrainは,エポックの各反復でデ,タのミニバッチをネットワ,クに渡します。デ,タストアをプレビュ,してデ,タを調査します。

inputBatch =预览(dsTrain);disp (inputBatch)
InputImage ResponsePixelLabelImage  __________________ _______________________ { 256×256×6 uint16}{256×256分类}{256×256×6 uint16}{256×256分类}{256×256×6 uint16}{256×256分类}{256×256×6 uint16}{256×256分类}{256×256×6 uint16}{256×256分类}{256×256×6 uint16}{256×256分类}{256×256×6 uint16}{256×256分类}{256×256×6 uint16}{256×256分类}

U-Netネットワ,ク層の作成

この例ではU-Netネットワ,クのバリエ,ションを使用します。U-Netでは,最初の一連の畳み込み層に最大プーリング層が点在し,入力イメージの解像度を逐次下げていきます。これらの層に,一連の畳み込み層が続き,その中にアップサンプリング演算処理が点在し,入力イメージの解像度を逐次上げていきます[2]。U- netの名前は,このネットワ,クが文字“U”のように対称の形状で描けることに由来しています。

この例では,畳み込みに対する入力と出力が同じサイズになるように,U-Netを変更して,畳み込みでゼロパディングを使用します。補助関数createUnetを使用して,数個のハパパラメタが事前に選択されたU-Netを作成します。この関数は,この例にサポ,トファ,ルとして添付されています。

inputTileSize = [256,256,6];lgraph = createUnet(inputTileSize);disp (lgraph.Layers)
58x1带有图层的图层数组:256 x256x6 ImageInputLayer的图像输入图像的zerocenter正常化64 3 x3x6 Encoder-Section-1-Conv-1的卷积运算与步幅[1]和填充[1 1 1 1]3‘Encoder-Section-1-ReLU-1 ReLU ReLU 4 Encoder-Section-1-Conv-2卷积64 3 x3x64旋转步[1]和填充[1 1 1 1]5‘Encoder-Section-1-ReLU-2 ReLU ReLU 6“Encoder-Section-1-MaxPool”马克斯池2 x2马克斯池步(2 - 2)和填充[0 0 0 0]7“Encoder-Section-2-Conv-1”卷积128 3 x3x64旋转步[1]和填充(1 1 1)8“Encoder-Section-2-ReLU-1”ReLU ReLU 9 Encoder-Section-2-Conv-2卷积128 3 x3x128旋转步[1]和填充[1 1 1 1]10 ' Encoder-Section-2-ReLU-2 ReLU ReLU 11“Encoder-Section-2-MaxPool”马克斯池2 x2马克斯池步(2 - 2)和填充[0 0 0 0]256 3 x3x128 Encoder-Section-3-Conv-1的卷积运算与步幅[1]和填充[1 1 1 1]13“Encoder-Section-3-ReLU-1”ReLU ReLU 14 Encoder-Section-3-Conv-2卷积256 3 x3x256旋转步[1]和填充[1 1 1 1]15 ' Encoder-Section-3-ReLU-2 ReLU ReLU 16“Encoder-Section-3-MaxPool”马克斯池2 x2马克斯池步(2 - 2)和填充[0 0 0 0]17 Encoder-Section-4-Conv-1卷积512 3 x3x256旋转步[1]和填充[1 1 1 1]18“Encoder-Section-4-ReLU-1”ReLU ReLU 19 Encoder-Section-4-Conv-2卷积512 3 x3x512旋转步[1]和填充[1 1 1 1] 20 ' Encoder-Section-4-ReLU-2 ReLU ReLU 21“Encoder-Section-4-DropOut”辍学50%辍学22“Encoder-Section-4-MaxPool”马克斯池2 x2马克斯池步(2 - 2)和填充[0 0 0 0]23 Mid-Conv-1卷积1024 3 x3x512旋转步[1]和填充[1 1 1 1]24的Mid-ReLU-1 ReLU ReLU 25 Mid-Conv-2卷积1024 3 x3x1024旋转步[1]和填充[1 1 1 1]26 ' Mid-ReLU-2 ReLU ReLU 27“Mid-DropOut”辍学辍学28 50%Decoder-Section-1-UpConv转置卷积512 2 x2x1024转置运算与步幅2[2]和裁剪[0 0 0 0]29的Decoder-Section-1-UpReLU ReLU ReLU 30 Decoder-Section-1-DepthConcatenation深度深度串联连接的2输入31 Decoder-Section-1-Conv-1卷积512 3 x3x1024旋转步[1]和填充[1 1 1 1]32“Decoder-Section-1-ReLU-1”ReLU ReLU 33 Decoder-Section-1-Conv-2卷积512 3 x3x512[1]和隆起与进步填充[1 1 1 1]34 ' Decoder-Section-1-ReLU-2 ReLU ReLU 35 Decoder-Section-2-UpConv转置卷积256 2 x2x512转置运算与步幅2[2]和裁剪[0 0 0 0]36的Decoder-Section-2-UpReLU ReLU ReLU 37的Decoder-Section-2-DepthConcatenation深度连接深度连接2输入38 Decoder-Section-2-Conv-1卷积256 3 x3x512旋转步[1]和填充[1 1 1 1]39的Decoder-Section-2-ReLU-1 ReLU ReLU 40“Decoder-Section-2-Conv-2”卷积256 3 x3x256旋转步[1]和填充(1 1 1)41 ' Decoder-Section-2-ReLU-2 ReLU ReLU 42 Decoder-Section-3-UpConv转置卷积128 2 x2x256转置运算与步幅2[2]和裁剪[0 0 0 0]43的Decoder-Section-3-UpReLU ReLU ReLU 44的Decoder-Section-3-DepthConcatenation深度连接深度连接2输入45‘Decoder-Section-3-Conv-1卷积128 3 x3x256旋转与步幅[1]和填充[1 1 1 1]46‘Decoder-Section-3-ReLU-1 ReLU ReLU 47 Decoder-Section-3-Conv-2卷积128 3 x3x128旋转步[1]和填充[1 1 1 1]48 ' Decoder-Section-3-ReLU-2 ReLU ReLU 49 Decoder-Section-4-UpConv转置卷积64 2 x2x128转置运算与步幅2[2]和种植50[0 0 0 0]的Decoder-Section-4-UpReLU ReLU ReLU 51 Decoder-Section-4-DepthConcatenation的深度连接深度连接2输入52 x3x128 Decoder-Section-4-Conv-1卷积64 3旋转步[1]和填充[1 1 1 1]53的Decoder-Section-4-ReLU-1 ReLU ReLU 54 Decoder-Section-4-Conv-2卷积64 3 x3x64旋转步[1]和填充[1 1 1 1]55的Decoder-Section-4-ReLU-2 ReLU ReLU 56 Final-ConvolutionLayer的卷积18 1 x1x64旋转步[1]和填充[0 0 0 0]57 ' Softmax-Layer Softmax Softmax 58 Segmentation-Layer的像素分类层叉损失

学習オプションの選択

モメンタム項付き確率的勾配降下(sgdm)最適化を使用してネットワクに学習させます。関数trainingOptions(深度学习工具箱)を使用してSGDM用ハパパラメタ設定を指定します。

深いネットワ,クの学習には時間がかかります。高い学習率を指定して学習を加速します。ただし,これによりネットワークの勾配が発散つまり制御できないほど増大し,ネットワークを正常に学習させることができない場合があります。勾配を意味のある範囲に維持するには,“GradientThreshold”0.05として指定することで勾配のクリップを有効にし,“GradientThresholdMethod”を指定して勾配のl2ノルムを使用します。

initialLearningRate = 0.05;maxEpochs = 150;minibatchSize = 16;L2reg = 0.0001;选项= trainingOptions(“个”...“InitialLearnRate”initialLearningRate,...“动量”, 0.9,...“L2Regularization”l2reg,...“MaxEpochs”maxEpochs,...“MiniBatchSize”minibatchSize,...“LearnRateSchedule”“分段”...“洗牌”“every-epoch”...“GradientThresholdMethod”“l2norm”...“GradientThreshold”, 0.05,...“阴谋”“训练进步”...“VerboseFrequency”, 20);

ネットワ,クの学習

学習オプションとランダムパッチ抽出デ,タストアを構成した後,関数trainNetwork(深度学习工具箱)を使用してU-Netネットワ,クに学習させます。ネットワ,クを学習させるには,以下のコ,ドでdoTrainingパラメ,タ,を真正的に設定します。3.0以学習には、计算能力上のCUDA対応NVIDIA GPU™を使用することを強く推奨します。

次のコ,ドでdoTrainingパラメ,タ,をのままにしておくと,この例は事前学習済みのU-Netネットワ,クを返します。

メモ:NVIDIA™Titan Xでの学習には約20時間を要します。ご使用のgpuハ,ドウェアによっては,さらに長い時間がかかる可能性もあります。

doTraining = false;如果doTraining modelDateTime = datestr(现在,“dd-mmm-yyyy-HH-MM-SS”);[net,info] = trainNetwork(dsTrain,lgraph,options);保存([“multispectralUnet -”modelDateTime的时代,num2str (maxEpochs)“.mat”),“净”“选项”);其他的负载(fullfile (imageDir“trainedUnet”“multispectralUnet.mat”));结束

ここでU-Netを使用して,マルチスペクトルe - netメ,ジを意味ごとにセグメント化できます。

テストデ,タでの結果の予測

学習済みネットワ,クでフォワ,ドパスを実行するには,補助関数segmentImageで検証デ,タセットを使用します。この関数は,この例にサポ,トファ,ルとして添付されています。segmentImageは,関数semanticseg(计算机视觉工具箱)を使用してメジパッチのセグメンテションを実行します。

predictPatchSize = [1024 1024];segmentedImage = segmentmage (val_data,net,predictPatchSize);

セグメンテーションの有効な部分だけを抽出するには,セグメント化されたイメージに検証データのマスクチャネルを乗算します。

segmentedImage = uint8(val_data(:,:,7)~=0) .* segmentedImage;figure imshow(segmentedImage,[]) title(“分割图像”

セマンティックセグメンテションの出力にはノズが多く含まれます。@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @関数medfilt2を使用して,セグメンテ,ションからごま塩ノ,ズを取り除きます。ノ@ @ズが除去され,セグメント化された@ @メ@ @ジを可視化します。

segmentedImage = medfilt2(segmentedImage,[7,7]);imshow (segmentedImage []);标题(“去除噪声的分割图像”

ヒストグラム均等化を行ったRGB検証メジにセグメント化されたメジを重ね合わせます。

B = labeloverlay(histeq(val_data(:,:,[3 2 1])),segmentedImage,“透明”, 0.8,“Colormap”,提出);图imshow(B)标题(“标记验证图像”) colorbar (“TickLabels”cellstr(类名),“滴答”蜱虫,“TickLength”0,“TickLabelInterpreter”“没有”);colormap城市规划机构(cmap)

セグメント化された▪▪メ▪▪ジとグラウンドトゥル▪スラベルをPNGファ▪▪ルとして保存します。これらは精度メトリクスを算出するために使用されます。

imwrite (segmentedImage“results.png”);imwrite (val_labels“gtruth.png”);

セグメンテ,ションの精度の定量化

セグメンテ,ションの結果とグラウンドトゥル,スラベル用にpixelLabelDatastore(计算机视觉工具箱)を作成します。

pxdsResults = pixelLabelDatastore(“results.png”一会,pixelLabelIds);pxdsTruth = pixelLabelDatastore(“gtruth.png”一会,pixelLabelIds);

関数evaluateSemanticSegmentation(计算机视觉工具箱)を使用して,セマンティックセグメンテ,ションのグロ,バル精度を測定します。

ssm = evaluateSemanticSegmentation(pxdsResults,pxdsTruth,“指标”“global-accuracy”);
评估语义分割结果  ---------------------------------------- * 所选指标:全球精度。*处理1张图像。*完成……完成了。*数据集指标:GlobalAccuracy ______________ 0.90698

グローバル精度のスコアは,正しく分類されたピクセルの割合が90%をわずかに超えていることを示しています。

植被率の計算

この例の最終目標は,マルチスペクトル。

植生としてラベル付けされたピクセルの数を求めます。ラベルID 2(“树木”)、13日(“LowLevelVegetation”)および14 (Grass_Lawn)は植生のクラスです。またマスクイメージのROIのピクセル数を合計することにより,有効なピクセル数の合計を求めます。

vegetationClassIds = uint8([2,13,14]);vegetationPixels = ismember(segmentedImage(:),vegetationClassIds);validPixels = (segmentedImage~=0);numVegetationPixels = sum(vegetationPixels(:));numValidPixels = sum(validPixels(:));

植被率は,植生のピクセルの数を有効なピクセルの数で除算して計算されます。

percentVegetationCover = (numVegetationPixels/numValidPixels)*100;流(“植被覆盖的百分比是%3.2f%%。”, percentVegetationCover);
植被覆盖率为51.72%。

参考文献

[1] Kemker, R., C. Salvaggio, C. Kanan。用于语义分割的高分辨率多光谱数据集, abs / 1703.01918。2017.

[2]罗内伯格,O. P.费舍尔和T.布罗克斯。U-Net:用于生物医学图像分割的卷积网络, abs / 1505.04597。2015.

参考

|||(计算机视觉工具箱)|(计算机视觉工具箱)|(计算机视觉工具箱)|(计算机视觉工具箱)|(深度学习工具箱)|(深度学习工具箱)

関連するトピック

外部のWebサ电子邮箱ト