Main Content

このページ最新ではありませ。をクリックし,英语のの最新版版を参照参照し。

膨张畳み込み使用したセグメンテーションセグメンテーション

膨张畳み込み使用てセグメンテーションネットワークにさせます。

セマンティックセグメンテーションネットワークはイメージ内のすべてのピクセルを分類して、クラスごとにセグメント化されたイメージを作成します。セマンティック セグメンテーションの応用例としては、自動運転のための道路セグメンテーションや医療診断のための癌細胞セグメンテーションなどがあります。詳細は、深层学习使用した入门入门を参照しください。

DeepLab [1] などのセマンティック セグメンテーション ネットワークでは、膨張畳み込み (Atrous 畳み込みとも呼ばれる) が広範に使用されます。これはパラメーターの数や計算量を増やさずに、層の受容野 (層で確認できる入力の領域) を増やすことができるからです。

学習データの読み込み

例では、説明のために 32 x 32 の三角形のイメージを含む単純なデータセットを使用します。データセットには、付随するピクセル ラベル グラウンド トゥルース データが含まれます。imageDatastorepixelLabelDatastoreを使用て学习を読み込みます。

datafolder = fullfile(toolboxDir(toolboxDir)('想象'),'VisionData',,,,'triangleImages');ImageFolderTrain = fullfile(datafolder,“训练图”);labelFolderTrain = fullfile(dataFolder,“训练标签”);

イメージのimageDatastoreを作成します。

imdsTrain = imageDatastore(imageFolderTrain);

グラウンドトゥルースピクセル用のpixelLabelDatastoreを作成します。

classNames = [“三角形”“背景”];标签= [255 0];PXDSTRAIN = PIXELLABELDATASTASTORE(LabelFolderTrain,classNames,标签)
PXDSTRAIN =带有属性的PXELLABELDATASTASTASTASTORE:files:{200x1 cell} classNames:{2x1 cell} readsize:1 readfcn:@readdatastastoreimage netheratefilesystemystemystemystemystemnestem:{}}

セマンティックセグメンテーションネットワークの作成

この例,畳み込みに基づく単纯セグメンテーションネットワークを使用し。

学习データソースをして,ラベルピクセル数を取得します。

ds = combine(imdstrain,pxDStrain);tbl = counteachlabel(pxdstrain)
tbl =2×3 tableName PixelCount ImagePixelCount ______________ __________ _______________ {'triangle' } 10326 2.048e+05 {'background'} 1.9447e+05 2.048e+05

ラベルの背景用です。クラスクラス不均衡によってによってクラスをを优先优先しししてて学习ににバイアスバイアスががかけかけられますます。これこれを修正するにに,しますのののにはいくつか方法方法をできできますます。。一般一般一般一般一般的のののののののののつつつつつつつつはは,,クラスクラスのの重み重み重みがががクラスクラスクラスの频度に表现たに与え重み増えます逆频度重み付けを使用してクラスクラスの重み重みししし

numberpixels = sum(tbl.pixelcount);频率= tbl.pixelcount / numberpixels;classWeights = 1 ./频率;

入力がイメージサイズに対応する入力层をを使用し,ピクセルピクセルピクセル分类分类分类用用用用ネットワークネットワークを作成しししますますますます。。。。次次次次次次ににに,,畳み込み畳み込み畳み込み层层层,,各畳み込みで膨张系数を増加させせながらながらながらながらながらながらながらながらながらながらながらながらながらながらながら列列列フィルターフィルターフィルターフィルターをををををををををををををををををををををををををを个个个个'填充'オプションを'same'に设定,と同じにように入力パディングします。。ピクセルをを分类するkと1行1列1列1列のをする畳み込み层含めkはの),,后ソフトマックス逆のクラスのを持つPixelClassificationLayerを含めます。

inputSize = [32 32 1]; filterSize = 3; numFilters = 32; numClasses = numel(classNames); layers = [ imageInputLayer(inputSize) convolution2dLayer(filterSize,numFilters,'DilationFactor',1,'填充',,,,'same')batchnormalizationlayer relulayer卷积2Dlayer(filtersize,numfilters,'DilationFactor',,,,2,'填充',,,,'same')batchnormalizationlayer relulayer卷积2Dlayer(filtersize,numfilters,'DilationFactor',,,,4,'填充',,,,'same') batchNormalizationLayer reluLayer convolution2dLayer(1,numClasses) softmaxLayer pixelClassificationLayer('Classes',,,,classNames,'classWights',,,,classWeights)];

ネットワークの学習

学习オプション指定します。

options = trainingOptions('sgdm',,,,...“ maxepochs”,100,...“ MINIBATCHSIZE”,64,...“初始删除”,1E-3);

火车网を使用てに学习させ。。

net = trainnetwork(DS,层,选项);
培训在单CPU。初始化输入数据没有rmalization. |========================================================================================| | Epoch | Iteration | Time Elapsed | Mini-batch | Mini-batch | Base Learning | | | | (hh:mm:ss) | Accuracy | Loss | Rate | |========================================================================================| | 1 | 1 | 00:00:02 | 91.62% | 1.6825 | 0.0010 | | 17 | 50 | 00:00:35 | 88.56% | 0.2393 | 0.0010 | | 34 | 100 | 00:01:09 | 92.08% | 0.1672 | 0.0010 | | 50 | 150 | 00:01:42 | 93.17% | 0.1472 | 0.0010 | | 67 | 200 | 00:02:13 | 94.15% | 0.1313 | 0.0010 | | 84 | 250 | 00:02:45 | 94.47% | 0.1167 | 0.0010 | | 100 | 300 | 00:03:10 | 95.04% | 0.1100 | 0.0010 | |========================================================================================| Training finished: Max epochs completed.

ネットワークのテスト

テストデータ読み込みます。ののimageDatastoreを作成ますグラウンドトゥルースピクセルラベルののpixelLabelDatastoreを作成します。

imagefoldertest = fullfile(datafolder,'testImages');imdstest = imagedatastore(imageFolderTest);labelfoldertest = fullfile(datafolder,“测试标签”);pxdstest = pixellabeldatastore(labelfoldertest,classNames,labels);

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

pxdsPred = semanticseg(imdsTest,net,“ MINIBATCHSIZE”,32,“写入”,tempdir);
运行语义分割网络-----------------------------------------------------处理100张图像。

评估电子细分を使用て精度を评価し。。

metrics = evaluateSemanticSegmentation(pxdsPred,pxdsTest);
Evaluating semantic segmentation results ---------------------------------------- * Selected metrics: global accuracy,班级准确性,iou,加权iou,bf得分。*处理了100张图像。*完成...完成。* Data set metrics: GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU MeanBFScore ______________ ____________ _______ ___________ ___________ 0.95237 0.97352 0.72081 0.92889 0.46416

セマンティックセグメンテーションの评価详细については,评估电子细分を参照しください。

新しいイメージのセグメンテーション

テストイメージtriangleTest.jpgを読み取っ表示します。

imgtest = imread('triangletest.jpg');图Imshow(imgtest)

图包含一个轴对象。轴对象包含类型图像的对象。

semanticsegを使用してテスト イメージをセグメント化し、Labeloverlayを使用して結果を表示します。

c = semanticseg(imgtest,net);b = labeloverlay(imgtest,c);图IMShow(B)

图包含一个轴对象。轴对象包含类型图像的对象。