minibatchqueueの nextメソッドでフ​ァイル名を取得する方​法はありますか?

1 次查看(过去 30 天)

imageDatastore の [data, info] = read(ds)を使用すると、infoに抽出されたデータのファイル名を取得できます。
同様にminibatchqueue の nextメソッドの実行で同様の方法は可能でしょうか?
minibatchqueueを使用して、画像とラベルに加えてファイル名も取得したいです。

采纳的回答

MathWorks Support Team
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 个)

类别

Help CenterFile Exchange 中查找有关 Multidimensional Arrays 的更多信息

标签

尚未输入任何标签。

Community Treasure Hunt

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

Start Hunting!