minibatchqueueの nextメソッドでファイル名を取得する方法はありますか?
1 次查看(过去 30 天)
显示 更早的评论
MathWorks Support Team
2025-9-19,0:00
回答: MathWorks Support Team
2025-9-19,2:31
imageDatastore の [data, info] = read(ds)を使用すると、infoに抽出されたデータのファイル名を取得できます。
同様にminibatchqueue の nextメソッドの実行で同様の方法は可能でしょうか?
minibatchqueueを使用して、画像とラベルに加えてファイル名も取得したいです。
采纳的回答
MathWorks Support Team
2025-9-19,0:00
minibatchqueue/ next 側には直接的にファイル名を取得/出力する機能はありません。
このような処理を行う場合は、transform データストアを挟み、transformの出力を データとファイル名の2出力とした上で、minibatchqueue へ受け渡すという方法で実現できます。
以下はサンプルコードとなります。
% imageデータストアの作成
ds = imageDatastore('MerchData','IncludeSubfolders',true);
% transformedDatastore で データ,ファイル名 の出力を2種類にする
% 変換を作成
trds = transform(ds, @(x, info) myfun(x, info), 'IncludeInfo',true);
% minibatchqueue オブジェクト作成
mbq = minibatchqueue(trds,2,...
'MiniBatchSize', 5,...
'MiniBatchFcn', @(data, info) customMiniBatchPreprocessing(data, info), ...
'MiniBatchFormat', ["SSCB", ""],...
'OutputEnvironment',["gpu","cpu"],...
'OutputAsDlarray',[1,0],...
'OutputCast',["single","char"]);
% next メソッドによる読み込み
[data, filenames] = next(mbq);
%%% 以下は transform / minibatchqueue に対するコールバック関数となります
function [Y,info] = myfun(x, info)
Y{1} = x;
Y{2} = string(info.Filename);
end
function [processedImages, fileNames] = customMiniBatchPreprocessing(data, info)
numImages = numel(data);
% 画像データのサイズを統一し、SSCB形式で結合します。
firstImage = data{1};
[H, W, C] = size(firstImage); % 最初の画像の高さ、幅、チャネル数を取得
% 出力用の配列を初期化
processedImages = zeros(H, W, C, numImages, 'like', firstImage);
for i = 1:numImages
currentImage = data{i};
processedImages(:,:,:,i) = currentImage;
end
% ファイル名をstring配列として結合します。
fileNames = string(info);
end
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Multidimensional Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!