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!