MATLAB Answers

セマンティックセグメンテーションのトレーニング イメージとテスト イメージ

19 views (last 30 days)
Kodai Sato
Kodai Sato on 20 Jan 2020
Edited: Kenta on 9 Feb 2020 at 8:23
上のURLを参考に自分で用意したデータセットを用いてセマンティックセグメンテーションを行おうとしているのですが上のURLの学習セットとテスト セットの準備において,イメージとピクセル ラベル データを学習セットとテスト セットに無作為に分割する際,例えば,Aのイメージとピクセル ラベル データはテストセットにして残りを無作為に分けるといったことは可能なのでしょうか?

  0 Comments

Sign in to comment.

Answers (1)

Kenta
Kenta on 21 Jan 2020
こんにちは、以下のように、imnameで、自分の指定する画像Aの名前を打ち込んでください。
そのうえで、下の改訂版の補助関数を置けばできます。
下が確認のためのモンタージュ表示です。
result.PNG
imname='006900';
[imdsTrain, imdsVal, imdsTest, pxdsTrain, pxdsVal, pxdsTest] = partitionCamVidData_revised(imds,pxds,imname);
以下が改訂版の補助関数です。イメージデータストアから、自分の指定する画像を探し出して、
それのインデックスを最後に持ってこれば、テストデータに含めることができます。
function [imdsTrain, imdsVal, imdsTest, pxdsTrain, pxdsVal, pxdsTest] = partitionCamVidData_revised(imds,pxds,imname)
% Partition CamVid data by randomly selecting 60% of the data for training. The
% rest is used for testing.
% Set initial random state for example reproducibility.
rng(0);
numFiles = numel(imds.Files);
shuffledIndices = randperm(numFiles);
imLogical=contains(imds.Files,imname);
imIdex=find(imLogical==1);
imIdexDel=find(shuffledIndices==imIdex);
shuffledIndices(imIdexDel) = [];
shuffledIndices=[shuffledIndices,imIdex];
% Use 60% of the images for training.
numTrain = round(0.60 * numFiles);
trainingIdx = shuffledIndices(1:numTrain);
% Use 20% of the images for validation
numVal = round(0.20 * numFiles);
valIdx = shuffledIndices(numTrain+1:numTrain+numVal);
% Use the rest for testing.
testIdx = shuffledIndices(numTrain+numVal+1:end);
% Create image datastores for training and test.
trainingImages = imds.Files(trainingIdx);
valImages = imds.Files(valIdx);
testImages = imds.Files(testIdx);
imdsTrain = imageDatastore(trainingImages);
imdsVal = imageDatastore(valImages);
imdsTest = imageDatastore(testImages);
% Extract class and label IDs info.
classes = pxds.ClassNames;
labelIDs = camvidPixelLabelIDs();
% Create pixel label datastores for training and test.
trainingLabels = pxds.Files(trainingIdx);
valLabels = pxds.Files(valIdx);
testLabels = pxds.Files(testIdx);
pxdsTrain = pixelLabelDatastore(trainingLabels, classes, labelIDs);
pxdsVal = pixelLabelDatastore(valLabels, classes, labelIDs);
pxdsTest = pixelLabelDatastore(testLabels, classes, labelIDs);
end

  11 Comments

Show 8 older comments
Kenta
Kenta on 9 Feb 2020 at 8:09
そうですか...それでは枚数の問題ではなさそうですね。こちらのデータではうまくいきましたので、データの定義の仕方など軽微なものと思います。ただ、そちらの状況があまりわからないので、こちらでエラーを取るのはあまり効率がよくないと思います。今回のコードをオリジナルとして、kodai satoさまのほうで、原因解明や調整のほう、ご検討いただけないでしょうか?
Kodai Sato
Kodai Sato on 9 Feb 2020 at 8:15
承知いたしました
ご丁寧にありがとうございました
Kenta
Kenta on 9 Feb 2020 at 8:22
もしかしたら、imnameが正しくないのかもしれません。テストに回したい画像が、1.jpgという名前なら、1.jpgか1とするなど、いろいろと試してみてください。そのほかの考えられる原因としては、pngになってるなど、拡張子が単にちがうだけかもしれません。

Sign in to comment.

Sign in to answer this question.