イメージラベラーの紐付けを別のPCで復元する方法

16 views (last 30 days)
Hirotada Masuda
Hirotada Masuda on 25 May 2018
Answered: Ryuhei Funada on 2 Apr 2019
あるPC上のイメージラベラーで行ったラベリングのセッションファイル、gTruthファイル、ラベルのピクセルラベルデータをフォルダごと移動し、別PC上のMatlabで読み込もうとしているのですが、セッションファイルは読み込めるものの、gTruth読み込みの際に以下のエラーが発生し復元することができません。
gTruth.matからラベルを読み込めません。groundTruthオブジェクトには有効なDataSourceがありません。有効な
groundTruthDataSourceオブジェクトを使用してDatasourceを更新してください。
別のPC上で再度ピクセルラベルデータと画像とを紐付けし直す方法を教えていただけませんでしょうか。

Accepted Answer

Kei Otsuka
Kei Otsuka on 25 May 2018
gTruth.matに格納されているデータソースの情報は絶対パスになっているため、ファイルを別PCに移動した場合には
groundTruthオブジェクト(gTruth.mat)を作り直す必要があります。
まず、groundTruthDataSourceオブジェクトでデータソースを指定し、
dataSource = groundTruthDataSource('05_highway_lanechange_25s.mp4');
ラベル情報の指定、
names = {'Car'};
types = [labelType('PixelLabel')];
pixelLabelID = {1};
labelDefs = table(names,types, pixelLabelID, ...
'VariableNames',{'Name','Type','PixelLabelID'});
ラベル画像のリスト作成を行い、
folderInfo = dir('PixelLabelData');
folderInfo = folderInfo(~ismember({folderInfo.name}, {'.', '..'}));
filelist = {folderInfo.name}';
for i = 1:size(filelist, 1)
tmp = strcat(fullfile(pwd, 'PixelLabelData\'), filelist{i});
filelist(i) = {tmp};
end
labelData = table(filelist,'VariableNames',{'PixelLabelData'});
最終的にgroundTruthオブジェクトを作成します。
gTruth = groundTruth(dataSource,labelDefs,labelData)
慣れると画像の追加や交換が簡単に行えますし、使い勝手が格段に上がります。 是非お試し下さい。 (詳しくは ヘルプ もご覧ください)
  2 Comments
Hirotada Masuda
Hirotada Masuda on 26 May 2018
既存のgroundTruthにおけるgTruth.DataSource及びgTruth.LabelDefinitionをコピー・修正し、正しいパスで新たにgTruth2を作り直したのですが、依然同様のエラーにてラベルの読み込みができない状態です。 考えられる要因はありますでしょうか。以下が各変数の出力です。
gTruth2 =
groundTruth のプロパティ:
DataSource: {318×1 cell}
LabelDefinitions: [1×4 table]
LabelData: [318×1 table]
>> gTruth2.DataSource
ans =
318×1 cell 配列
{'C:\Users\・・・(略)・・・\training_1.tif' }
{'C:\Users\・・・(略)・・・\training_2.tif' }
(以下略)
Kei Otsuka
Kei Otsuka on 28 May 2018
Edited: Kei Otsuka on 28 May 2018
groundTruthオブジェクトの値は読み取り専用となっており、コピーしてもその属性は引き継がれる認識ですが、 どのような方法でgTruth2を作成されましたでしょうか。
方法を記載して頂ければ原因を調べてみることもできますが、groundTruthオブジェクトを新規に作成し直す方法が確実ですので、こちらの ヘルプ を参考にお試し頂ければ幸いです。 Examplesを見て頂くと良いかと思います。

Sign in to comment.

More Answers (1)

Ryuhei Funada
Ryuhei Funada on 2 Apr 2019
イメージラベラー用のgroundTruthオブジェクトでは、R2018bからオブジェクト関数changeFilePathsを使用して、groundTruthDataSourceの絶対パスを変更することができます。
下記をご参照ください。
web(fullfile(docroot, 'vision/ref/groundtruth.changefilepaths.html'))
groundTruthオブジェクトを新規に作成する方法も引き続き利用することができます。
例えばtrainingImagesDirが対象ファイルが含まれるディレクトリのパスとして
imds = imageDatastore(trainingImagesDir);
gds = groundTruthDataSource(imds.Files);
gTruth = groundTruth(gds, gTruth.LabelDefinitions, gTruth.LabelData);
となります。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!