関数randomPatchExtractionDatastoreを用いたセマンティックセグメンテーションの評価
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
のランダム パッチ抽出データストアを使用したセマンティック セグメンテーション ネットワークの学習を参考に自分で用意したデータセットを用いてセマンティックセグメンテーションを行ったところ学習自体は出来たのですが,深層学習を使用したセマンティック セグメンテーションの1 つのイメージを使用したネットワーク テスト,学習済みネットワークの評価 のような結果を表示することが出来ませんでした.どのようなコードで表示することが出来るのでしょうか.
0 Kommentare
Akzeptierte Antwort
Kenta
am 19 Jan. 2020
こんにちは、例えば、元画像と、パッチのサイズを割り切れるようにしておいて、
グリッド状に左上から右下まで走査していき、敷き詰める感じでやればいいと思います。
下の例は、ご質問中のURLのネットワークをベースに作っています。
元画像が32×32で、8×8のパッチを切り出しています。推論のときは、4×4個分、パッチを取り出し、
それをつなげて敷き詰めています。下は、この質問用の、非常にシンプルなものなので、ご自身の課題にあうように適宜、
作り変えていただければと思います。よろしくお願いいたします。
close all;clear;clc
dataDir = fullfile(toolboxdir('vision'),'visiondata','triangleImages');
imageDir = fullfile(dataDir,'trainingImages');
imds = imageDatastore(imageDir);
classNames = ["triangle","background"];
labelIDs = [255 0];
labelDir = fullfile(dataDir,'trainingLabels');
pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);
patchds = randomPatchExtractionDatastore(imds,pxds,[8 8], ...
'PatchesPerImage',4);
layers = [
imageInputLayer([8 8 1])
convolution2dLayer(3,64,'Padding',1)
reluLayer()
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,64,'Padding',1)
reluLayer()
transposedConv2dLayer(4,64,'Stride',2,'Cropping',1)
convolution2dLayer(1,2)
softmaxLayer()
pixelClassificationLayer()];
options = trainingOptions('sgdm', ...
'InitialLearnRate',1e-3, ...
'MaxEpochs',10, ...
'Verbose',true);
net = trainNetwork(patchds,layers,options);
[x, y]=meshgrid([1:4],[1:4]);
xg=x(:)*8-7;
yg=y(:)*8-7;
I=read(imds);
S=zeros(32,32,'uint8');
C=categorical(zeros(32,32));
for i=1:numel(yg)
Sp=imcrop(I,[yg(i), xg(i), 7 7]);
S(xg(i):xg(i)+7,yg(i):yg(i)+7)=Sp;
C(xg(i):xg(i)+7,yg(i):yg(i)+7) = semanticseg(Sp, net);
end
figure;imshow(I)
figure;imshow(S)
B = labeloverlay(I,C,'Transparency',0.4);
figure;imshow(B)
0 Kommentare
Weitere Antworten (0)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!