MATLAB Answers

0

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

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

  0 Comments

Sign in to comment.

2 Answers

Kei Otsuka
Answer by Kei Otsuka
on 25 May 2018
 Accepted Answer

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 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
on 28 May 2018
groundTruthオブジェクトの値は読み取り専用となっており、コピーしてもその属性は引き継がれる認識ですが、 どのような方法でgTruth2を作成されましたでしょうか。
方法を記載して頂ければ原因を調べてみることもできますが、groundTruthオブジェクトを新規に作成し直す方法が確実ですので、こちらの ヘルプ を参考にお試し頂ければ幸いです。 Examplesを見て頂くと良いかと思います。

Sign in to comment.


Answer by 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);
となります。

  0 Comments

Sign in to comment.