combinedda​tastoreのAu​gmentation​の方法

1 visualización (últimos 30 días)
Takeda Ryutaro
Takeda Ryutaro el 22 de Mzo. de 2023
Comentada: Atsushi Ueno el 24 de Mzo. de 2023
Image to Image回帰のNeuralNetworkをつくるため、以下のようにDatastoreを作成しました。
予測子はDicomで応答は同サイズのpngでフォルダに保存しています。
以下のデータセットで学習は可能でしたが、汎化性を高めるため
予測子と応答に同じ関数で画像処理を行い、Augmentationも行いたいと考えています。
dsTrainにtransformを行ったものをいくつか生成して、Sequential datastoreにしてみてもうまく行きませんでした。(読み取り関数がサポートされていないというメッセージがでました。)
最終的には、Augmentationした画像をフォルダに保存すればできるとは思いますが、それ以外でうまい方法はありますでしょうか?
%% random shuffle Separate data
rng(0)
shuffledIndices = randperm(height(T));
idx = floor(0.7 * height(T));
trainingIdx = 1:idx;
trainingDataTbl = T(shuffledIndices(trainingIdx),:);
validationIdx = idx+1 : idx+0.2*length(shuffledIndices);
validationDataTbl = T(shuffledIndices(validationIdx),:);
testIdx = 0.2*length(shuffledIndices)+1+idx : length(shuffledIndices);
testDataTbl = T(shuffledIndices(validationIdx),:);
%% Making Datastore
cd 'C:\Users\------------------\Image\dicomfiles'
ids=imageDatastore(trainingDataTbl.filename,"ReadFcn",@dicomread,"FileExtensions",'.dcm');
val_ids=imageDatastore(validationDataTbl.filename,"ReadFcn",@dicomread,"FileExtensions",'.dcm');
test_ids=imageDatastore(testDataTbl.filename,"ReadFcn",@dicomread,"FileExtensions",'.dcm');
cd ..\pngfiles
%拡張子以外のファイル名は共通なので.dcmから.pngに変更
trainingPng=cellfun(@(x) extractBefore(x,'.dcm'),trainingDataTbl.filename,UniformOutput=false);
valPng=cellfun(@(x) extractBefore(x,'.dcm'),validationDataTbl.filename,UniformOutput=false);
testPng=cellfun(@(x) extractBefore(x,'.dcm'),testDataTbl.filename,UniformOutput=false);
trainingPng=cellfun(@(x) horzcat(x,'.png'),trainingPng,UniformOutput=false);
valPng=cellfun(@(x) horzcat(x,'.png'),valPng,UniformOutput=false);
testPng=cellfun(@(x) horzcat(x,'.png'),testPng,UniformOutput=false);
lds=imageDatastore(trainingPng,"IncludeSubfolders",false,"FileExtensions",'.png','ReadFcn',@imread);
val_lds=imageDatastore(valPng,"IncludeSubfolders",false,'FileExtensions','.png','ReadFcn',@imread);
test_lds=imageDatastore(testPng,"IncludeSubfolders",false,'FileExtensions','.png','ReadFcn',@imread);
% pngとdicomを統合
ds=combine(ids,lds);
val_ds=combine(val_ids,val_lds);
test_ds=combine(test_ids,test_lds);
%% preprocessingはZero paddingして512*512にResizeする関数
dsTrain=transform(ds,@preprocessing);
dsVal=transform(val_ds,@preprocessing);
dsTest=transform(test_ds,@preprocessing);
  5 comentarios
Takeda Ryutaro
Takeda Ryutaro el 23 de Mzo. de 2023
ミスのご指摘も含め、種々のご回答ありがとうございます。
augmentedimagedatastoreが使えれば嬉しいです。
・引数にとるのは、imagedatastoreかと思いますが、combineddatastoreにも適用できるのでしょうか?
・image to image回帰を行っているため、response(png)にも予測子(dicom)と同じ画像処理が行われてほしいのですが、可能なのでしょうか?
すみませんが、教えていただけると幸いです。
Atsushi Ueno
Atsushi Ueno el 24 de Mzo. de 2023
> 引数にとるのは、imagedatastoreかと思いますが、combineddatastoreにも適用できるのでしょうか?
⇒ わかりません(よく調べないと即答できません)。augmentedImageDatastore 関数のドキュメントを眺めて何となく判る事は、回帰問題用の入力データは CombinedDatastore としてではなく「予測子(Predictor)(dicom)」と「応答(response)(png)」の引数に分けて入力する仕様の様です。
>image to image回帰を行っているため、response(png)にも予測子(dicom)と同じ画像処理が行われてほしいのですが、可能なのでしょうか?
「予測子側だけの処理(ノイズ付加等)」と「予測子と応答の両方共に同一の処理(回転等)」をする必要があるという事ですね。上記ドキュメントでは「予測子側だけの処理は CombinedDatastore 結合前に transform 関数で実施」「予測子と応答の同一処理は独自の関数を作成し CombinedDatastore に対して実施」しているので、augmentedImageDatastore 関数ではそれが出来ない(細かい所まで手が届かない)のかもしれません。
augmentedImageDatastore 関数に下記の機能があるのかが論点ですね。
  • CombinedDatastore を入力する事が可能か(分けて入力する必要がありそう)
  • CombinedDatastore の予測子と応答それぞれに対する変換を制御出来るのか
  • (↑予測子と応答に分けて入力すれば予測子側だけ変換(水増し)してくれそうだが、

Iniciar sesión para comentar.

Respuestas (0)

Categorías

Más información sobre イメージ処理の深層学習 en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!