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

6 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2025 年 9 月 19 日
回答済み: MathWorks Support Team 2025 年 9 月 19 日

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

採用された回答

MathWorks Support Team
MathWorks Support Team 2025 年 9 月 19 日
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 Center および File ExchangeMultidimensional Arrays についてさらに検索

タグ

タグが未入力です。

Community Treasure Hunt

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

Start Hunting!