。
このこのでは,7チャネル(3つのカラーチャネル,3つの近近外チャネルおよびマスクの,U-net畳み込みニューラルネットワークを习させるニューラルネットワーク习习习させる畳み込み。
このこのでは,U-netネットワークに学习ささ方法を示し,さらに事前学习のU-netネットワークもます.u-netネットワークの习.u-netネットワークの学习をしたの学校を选択た场习习をた场合计,计算能力3.0以上のcuda対応nvidia™gpuを使用することを强く强くますし(并行计算工具箱™が必要)。
�し,地区の环境的生育学家的健全性を评価し测定ますします。
深层学习ベースののによりにより,高解像度の航空写真から植被正式に测定でき。课题课题1つに,视覚クラス类似した,のクラスををこと,たとえば绿のを草,たとえば绿ピクセルをを,低木または树木として区别することがあります。分类の精度を高めるために,一部のデータセットには各ピクセルに关する追加情报を提供するマルチスペクトルイメージが含まれています。たとえば,ハームリンビーチ州立公园のデータセットでは,クラスをより明显ににするが补完さていいいいいいいい
この例では,ネットワークに学习させるに,高解像度のマルチスペクトルデータセット使使ます[1]。このイメージセットはニューヨーク州ハームリンビーチ州立公园の上空でドローン使をまして撮影されたた撮影には,18个のオブジェクトラベルの付い,ラベル付き学习,検证セットセット,検证セットおよびセットセットが含まれれますファイルののサイズ〜3.0 GBです。
补助关节downloadHamlinBeachMSIData
ををの垫,データセット垫ファイルバージョンをしますますます。このさははいしとしてとしてれてにサポートファイルとしてれていい
imageDir = tempdir;url =“http://www.cis.rit.edu/ ~ rmk6217 / rit18_data.mat”;downloadhamlinbeachmsidata(URL,imagedir);
さらに,補助関数downloadTrainedUnet
をを使し,このデータセット用に事前习済みのu-netをダウンロードしますますますます。事前习ていますとしてされていますとして习习済みますを。の完了を待つことなく例体をを行。
trouseunet_url ='//www.tatmou.com/金宝appsupportfiles/vision/data/multispectralunet.mat';DownloadTroundTordUre(trounduneT_URL,imagedir);
データデータセットをワークワークスペースに読み込み読み込み
负载(fullfile (imageDir“rit18_data”,'rit18_data.mat'));
データの构造体を确认します。
谁train_dataval_data测试数据
名称大小字节类属性test_data 7x12446x7654 1333663576 uint16 train_data 7x9393x5642 7x9393x5642 741934284 uint16 val_data 7x8833x6918 855493716 uint16
マルチスペクトルイメージデータはNumChannels.x宽度x高度ただし,matlab®では,マルチチャネルイメージは宽度x高度xNumChannels.配列に配置されます。チャネルが3番目の次元にようにデータを形状変更ははははははは,关联SwitchChannelstothirdPlane.
を关注数目は,この例にサポートファイル添付されいます。
train_data = switchchannelstothirdplane(train_data);val_data = switchChannelstClirdplane(val_data);test_data = switchChannelstClirdPlane(test_data);
データが正しい構造体であることを確認します。
谁train_dataval_data测试数据
名称大小字节类属性test_data 12446x76546 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)))},......'毗邻'10,'背景颜色',“白色”) 标题(“训练图像(左)、验证图像(中)和测试图像(右)的RGB组件”)
ヒストグラムヒストグラム均等ををった习习データ最后ののつのチャネル,モンタージュとしては,これらのチャネル,近赤ににてし。。たとえば,2番目のチャネルイメージ中间にに木は,他の2つのチャネルの木より表示さます。
图蒙太奇(......{histeq (train_data (:: 4)),......组合时间(train_data(:,:,5)),......histeq (train_data (:: 6))},......'毗邻'10,'背景颜色',“白色”) 标题('IR频道1(左),2,(中心)和3(右)的训练图像')
チャネル7は有效なセグメンテーション示す示すマスク。学习イメージ,検证イメージおよびテストのマスクをします。
图蒙太奇(......{train_data(:,:,7),......val_data(:,:7),......test_data (:: 7)},......'毗邻'10,'背景颜色',“白色”) 标题('训练图像(左),验证图像(中心)和测试图像(右)'掩模')
ラベル付きイメージには,セグメンテーション用のトゥルースデータれ,それぞれのピクセルははがのクラスいずれか割り当てていますますクラスとにます。
disp(类)
0类/图像边框1.道路标记2.树3.建筑物4.车辆(汽车,卡车或公共汽车)5。人6.救生员椅7.野餐桌8.黑色木板9.白色木板10。橙色着陆垫11.水浮标12.岩石13.其他植被14.草15.沙子16.水(湖)17.水(池塘)18.沥青(停车场/走道)
クラス名のベクトルを作物成し。
ClassNames = [“路标”,“树”,“建筑”,“汽车”,“人”,......“救生员”,“PicnicTable”,“BlackwoodPanel”,......“WhiteWoodPanel”,“OrangeLandingPad”,“浮标”,“摇滚”,......“LowleVelseGetation”,“grass_lawn”,“sand_beach”,......“water_lake”,“water_pond”,“沥青”];
〖rgb学院〗たををわせわせわせわせたわせわせわせ。
CMAP = JET(NUMER(CLASSNMES));B = Labeloverlay(Histeq(train_data(:,:,:,4:6)),train_labels,“透明”,0.8,'colormap',cmap);图标题('训练标签') imshow(B) N = numel(classNames);蜱虫= 1 / (N * 2): 1 / N: 1;colorbar ('ticklabels',cellstr(classnames),'蜱'蜱虫,'ticklength',0,“TickLabelInterpreter”,“没有”);Colormap(CMAP)
学习データを垫ファイルとして,学校ラベルをpngファイルとして保存ます。
保存(“train_data.mat”,'train_data');IMWRITE(TRAIN_LABELS,'train_labels.png');
ランダムパッチ抽出データストアをして,ネットワークに学习データをします。このこのストアは,グラウンドトゥルースはとピクセルラベルをイメージデータとピクセルラベルストアからからからからからからからからからからパッチパッチパッチ抽出します。パッチは,大厦イメージに対するメモリ不锈钢,利用可幂な学习の量を效果的に増やすためのをを増やす増やすためのなな増やす増やすのななな増やすためのななな的増やすための的的手増やすための的的な法
学習イメージを“train_data.mat”
からimageageAtastore.
に格納することから始めます。垫ファイル形式は非標準イメージ形式であるため,イメージデータを読み取るために垫ファイルリーダーを使用しなければなりません。学習データから最初の6つのチャネルを抽出し,マスクを含む最後のチャネルを除外する補助垫ファイルリーダー矩阵
を关注数目は,この例にサポートファイル添付されいます。
imd = imageDatastore (“train_data.mat”,'fileextensions','。垫',“ReadFcn”,@ matroder);
PixellabeldAtastore.
(计算机视觉工具箱)を作物,18个个のラベル付き领域をラベルパッチを格式します。
Pixellabelids = 1:18;pxds = pixellabeldataStore('train_labels.png',classnames,pixellabelids);
イメージイメージデータストアととピクセルラベルストアストアRandompatchExtractionDatastore.
(图像处理工具箱)を作物しし。それぞれのミニバッチに,サイズが256 x 256ピクセルのそれぞれの反复でますますれます反复で,1000个のミニバッチが抽出れます。
pxds dsTrain = randomPatchExtractionDatastore (imd, [256256],'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では,最初の一般の畳み込み层最大プーリング层畳み込み点,入力イメージの度を逐次ていきます。一道の畳み込み层が,その中にアップサンプリング演算演算原理が,入力イメージの解像を上げてます[2] .u-netの名前は,このネットワークが文「u“「のように対称の形状描けることにに由しいいいいいいいいいいますいいい
この例では,畳み込みに対する入力と出出同じににように,u-netを変更し,畳み込みでゼロパディング使使ます。附近createunet.
ををのてた事前にをたますにに,このて,このて,このていファイル添付さてい。
InputTilesize = [256,256,6];lgraph = creemenet(inputTileSize);DISP(LAPH.LAYERS)
58x1 Layer array with layers: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)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]12 Encoder-Section-3-Conv-1卷积256 3 x3x128旋转步[1]和填充[1 1 1 1]13的Encoder-Section-3-ReLU-1 ReLU ReLU 14“Encoder-Section-3-Conv-2”Convolution 256 3x3x256 convolutions with stride [1 1] and padding [1 1 1 1] 15 'Encoder-Section-3-ReLU-2' ReLU ReLU 16 'Encoder-Section-3-MaxPool' Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 17 'Encoder-Section-4-Conv-1' Convolution 512 3x3x256 convolutions with stride [1 1] and padding [1 1 1 1] 18 'Encoder-Section-4-ReLU-1' ReLU ReLU 19 'Encoder-Section-4-Conv-2' Convolution 512 3x3x512 convolutions with stride [1 1] and padding [1 1 1 1] 20 'Encoder-Section-4-ReLU-2' ReLU ReLU 21 'Encoder-Section-4-DropOut' Dropout 50% dropout 22 'Encoder-Section-4-MaxPool' Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 23 'Mid-Conv-1' Convolution 1024 3x3x512 convolutions with stride [1 1] and padding [1 1 1 1] 24 'Mid-ReLU-1' ReLU ReLU 25 'Mid-Conv-2' Convolution 1024 3x3x1024 convolutions with stride [1 1] and padding [1 1 1 1] 26 'Mid-ReLU-2' ReLU ReLU 27 'Mid-DropOut' Dropout 50% dropout 28 'Decoder-Section-1-UpConv' Transposed Convolution 512 2x2x1024 transposed convolutions with stride [2 2] and cropping [0 0 0 0] 29 'Decoder-Section-1-UpReLU' ReLU ReLU 30 'Decoder-Section-1-DepthConcatenation' Depth concatenation Depth concatenation of 2 inputs 31 'Decoder-Section-1-Conv-1' Convolution 512 3x3x1024 convolutions with stride [1 1] and padding [1 1 1 1] 32 'Decoder-Section-1-ReLU-1' ReLU ReLU 33 'Decoder-Section-1-Conv-2' Convolution 512 3x3x512 convolutions with stride [1 1] and padding [1 1 1 1] 34 'Decoder-Section-1-ReLU-2' ReLU ReLU 35 'Decoder-Section-2-UpConv' Transposed Convolution 256 2x2x512 transposed convolutions with stride [2 2] and cropping [0 0 0 0] 36 'Decoder-Section-2-UpReLU' ReLU ReLU 37 'Decoder-Section-2-DepthConcatenation' Depth concatenation Depth concatenation of 2 inputs 38 'Decoder-Section-2-Conv-1' Convolution 256 3x3x512 convolutions with stride [1 1] and padding [1 1 1 1] 39 'Decoder-Section-2-ReLU-1' ReLU ReLU 40 'Decoder-Section-2-Conv-2' Convolution 256 3x3x256 convolutions with stride [1 1] and padding [1 1 1 1] 41 'Decoder-Section-2-ReLU-2' ReLU ReLU 42 'Decoder-Section-3-UpConv' Transposed Convolution 128 2x2x256 transposed convolutions with stride [2 2] and cropping [0 0 0 0] 43 'Decoder-Section-3-UpReLU' ReLU ReLU 44 'Decoder-Section-3-DepthConcatenation' Depth concatenation Depth concatenation of 2 inputs 45 'Decoder-Section-3-Conv-1' Convolution 128 3x3x256 convolutions with stride [1 1] and padding [1 1 1 1] 46 'Decoder-Section-3-ReLU-1' ReLU ReLU 47 'Decoder-Section-3-Conv-2' Convolution 128 3x3x128 convolutions with stride [1 1] and padding [1 1 1 1] 48 'Decoder-Section-3-ReLU-2' ReLU ReLU 49 'Decoder-Section-4-UpConv' Transposed Convolution 64 2x2x128 transposed convolutions with stride [2 2] and cropping [0 0 0 0] 50 'Decoder-Section-4-UpReLU' ReLU ReLU 51 'Decoder-Section-4-DepthConcatenation' Depth concatenation Depth concatenation of 2 inputs 52 'Decoder-Section-4-Conv-1' Convolution 64 3x3x128 convolutions with stride [1 1] and padding [1 1 1 1] 53 'Decoder-Section-4-ReLU-1' ReLU ReLU 54 'Decoder-Section-4-Conv-2' Convolution 64 3x3x64 convolutions with stride [1 1] and padding [1 1 1 1] 55 'Decoder-Section-4-ReLU-2' ReLU ReLU 56 'Final-ConvolutionLayer' Convolution 18 1x1x64 convolutions with stride [1 1] and padding [0 0 0 0] 57 'Softmax-Layer' Softmax softmax 58 'Segmentation-Layer' Pixel Classification Layer Cross-entropy loss
モーメンタム项付き确率的勾配降下(SGDM)最最化ををしてネットワーク学问培训选项
をを用してsgdm用作ハイパー设定设定指定します。
深いネットワークの学習には時間がかかります。高い学習率を指定して学習を加速します。ただし,これによりネットワークの勾配が発散つまり制御できないほど増大し,ネットワークを正常に学習させることができない場合があります。勾配を意味のある範囲に維持するには,'gradientthreshold'
を0.05
として指定することで勾配のクリップを有象に,'GradientThresholdMethod'
を指定して勾配のl2ノルムノルム使使。
initialLearningRate = 0.05;maxEpochs = 150;minibatchSize = 16;l2reg = 0.0001;选择= trainingOptions ('sgdm',......“InitialLearnRate”,initiallearningrate,......'势头',0.9,......'L2Regularization',l2reg,......'maxepochs',maxepochs,......'minibatchsize',小匹马,......'shownrateschedule','分段',......'洗牌','每个时代',......'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;如果dotrained modeldateTime = datestr(现在,“dd-mmm-yyyy-HH-MM-SS”);[NET,INFO] = Trainnetwork(Dstrain,Largrain,选项);节省(['MultiSpectRaluet-'modelDateTime的时代,num2str(maxepochs)'。垫'],“净”,'选项');其他的负载(fullfile (imageDir“trainedUnet”,“multispectralUnet.mat”));结束
ここでU-NETををて,マルチマルチスペクトルイメージを意味ごとセグメントセグメントセグメントできできでき
学习済みネットワークでフォワードフォワードパス実行するするに,关关semmentImage.
で検証データセットを使用します。この関数は,この例にサポートファイルとして添付されています。semmentImage.
は,关节semanticseg
(计算机视觉工具箱)をを用してイメージパッチセグメンテーションセグメンテーション実行。
predictpatchsize = [1024 1024];segmentedImage = sementImage(val_data,net,predictpatchsize);
セグメンテーションの有効な部分だけを抽出するには,セグメント化されたイメージに検証データのマスクチャネルを乗算します。
segmentedImage = UINT8(Val_Data(:,:,7)〜= 0)。* segmentedImage;图imshow(segmentedimage,[])标题('分段图像')
セマンティックセグメンテーションの出力にはがが多く含まます。イメージの后后定理を実して,ノイズと现处于ピクセルピクセル取り除き。关联Medfilt2.
(图像处理工具箱)ノイズからごま塩,セグメンテーションからごまれ,セグメンテーションノイズ除去れ,セグメントノイズ除去れ,セグメント化され。
semmentedimage = medfilt2(sementedimage,[7,7]);imshow(segmentedimage,[]);标题('被删除的噪音分段图像')
〖RGB〗イメージセグメントたたたたたイメージますますたたイメージをますますたたたイメージます。
b = labeloverlay(组织(val_data(:::[3 2 1])),segmentedImage,“透明”,0.8,'colormap',cmap);数字imshow(b)标题('标记验证图像')颜色栏('ticklabels',cellstr(classnames),'蜱'蜱虫,'ticklength',0,“TickLabelInterpreter”,“没有”);Colormap(CMAP)
セグメントセグメントさトゥルーストゥルースををファイルとして保存しをこれらははメトリクスメトリクス算出するにはとしてメトリクスを算出にはとしてメトリクスし算出とグラウンドグラウンドされれれれれれれれれれれれれれれれされれイメージイメージとグラウンドグラウンドグラウンドグラウンドグラウンド
imwrite (segmentedImage“results.png”);IMWRITE(VAL_LABELS,'gtruth.png');
セグメンテーションセグメンテーションの结果ととグラウンドトゥルース用にPixellabeldAtastore.
(计算机视觉工具箱)を作物成し。
pxdsresults = pixellabeldataStore(“results.png”,classnames,pixellabelids);pxdstruth = pixellabeldataStore('gtruth.png',classnames,pixellabelids);
関数evaluateSemanticSegmentation
(计算机视觉工具箱)〖使用〗し,セマンティックセグメンテーションのグローバル精密をしします。
舰导弹= evaluateSemanticSegmentation (pxdsResults pxdsTruth,'度量标准',“global-accuracy”);
评估语义分割结果--------------------------------- *所选指标:全球准确性。*处理1个图像。*完成......完成。*数据集指标:GlobalAccuracy ______________0.90698
グローバル精度のは,正交分类されたピクセルのががががわずかに超えてことをてわずかいい超えてことを示していい
この例の最终目标,マルチスペクトルイメージで植被率をすることです。
植生としてラベル付けさたたピクセルピクセルををます。ラベルid2(“树”),13(“Lowlevelseation”)および14(“grass_lawn”)は植生物のです。またマスクイメージのroiのの数号合并すること,有效なピクセル数号合并を求めます。
vegetationClassIds = uint8([2、13、14]);vegetationPixels = ismember (segmentedImage (:), vegetationClassIds);validPixels = (segmentedImage ~ = 0);numVegetationPixels =总和(vegetationPixels (:));numValidPixels =总和(validPixels (:));
00
percivedvegetationcover =(numvegetationpixels / numvalidpixels)* 100;fprintf(“植被覆盖的百分比为%3.2f %%。,百分比植物;
植被覆盖率为51.72%。
[1] Kemker,R.,C. Salvaggio和C. Kanan。“语义细分的高分辨率多光谱数据集。”corr,abs / 1703.01918。2017年。
[2] Ronneberger,O.,P.Fischer和T.Brox。“U-Net:用于生物医学图像分割的卷积网络。”Cor,ABS / 1505.04597。2015年。
imageageAtastore.
|培训选项
|trainNetwork
|evaluateSemanticSegmentation
(计算机视觉工具箱)|PixellabeldAtastore.
(计算机视觉工具箱)|semanticseg
(计算机视觉工具箱)|不平衡
(计算机视觉工具箱)|histeq
(图像处理工具箱)|RandompatchExtractionDatastore.
(图像处理工具箱)