minibatchqueueの nextメソッドでファイル名を取得する方法はありますか?
6 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
MathWorks Support Team
le 19 Sep 2025
Réponse apportée : MathWorks Support Team
le 19 Sep 2025
imageDatastore の [data, info] = read(ds)を使用すると、infoに抽出されたデータのファイル名を取得できます。
同様にminibatchqueue の nextメソッドの実行で同様の方法は可能でしょうか?
minibatchqueueを使用して、画像とラベルに加えてファイル名も取得したいです。
Réponse acceptée
MathWorks Support Team
le 19 Sep 2025
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 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Multidimensional Arrays dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!