augmentedI​mageDatast​oreと特徴データを​結合したcombin​edDatastor​eを用いてtrain​Networkするに​は?

1 view (last 30 days)
画像と、画像に対応する特徴データを入力とする深層学習ネットワークの学習に関する質問です。
画像 (imageDatastore)、特徴データ (arrayDatastore) をcombineで結合したCombinedDatastoreを用いて、回帰型深層学習ネットワークの学習(trainNetwork)を行っています。
画像のデータストアがimageDatastoreやarrayDatastoreの場合、特徴データと結合後、trainNetworkにより問題なく学習が進行します。
同じデータを用いて画像のaugmentationを行いたく、
dsXTrain = augmentedImageDatastore([size_y size_x], imagedatastore)
によりaugmentedImageDatastoreに変換し、これを特徴データとcombineし、trainNetworkに用いると、以下のメッセージが表示され、学習を行うことができません。どのようにすればよいのでしょうか?
使い方によるエラー trainNetwork
水平方向に連結される table はすべて、同じ行数でなければなりません。cell 配列と table を連結する
場合、cell 配列と table は同じ行数でなければなりません。

Accepted Answer

Shunichi Kusano
Shunichi Kusano on 23 Jun 2022
各データストアのミニバッチサイズが違うと同じエラーが再現しました。combineする際にreadSize, minibatchSizeを揃えてあげれば大丈夫かと思います。下記が例です。
%% イメージデータストア
dataFolder = fullfile(toolboxdir('nnet'),'nndemos','nndatasets','DigitDataset');
imds = imageDatastore(dataFolder, ...
'IncludeSubfolders',true);
%% augmentedデータストア
auds = augmentedImageDatastore([100 100],imds);
%% 入力用特徴量arrayデータストア
numData = auds.NumObservations;
dummyArray = rand(numData,1);
arrdsIn = arrayDatastore(dummyArray,"ReadSize",auds.MiniBatchSize);
%% 応答子用数値ベクトル
numData = auds.NumObservations;
dummyArray = rand(numData,1);
arrdsOut = arrayDatastore(dummyArray, "ReadSize",auds.MiniBatchSize);
%% combine
cds = combine(arrdsIn,auds,arrdsOut);
read(cds)
ans = 128×3 table
Var1 input Var3 _______ _______________ ________ 0.84635 {100×100 uint8} 0.88035 0.90818 {100×100 uint8} 0.12305 0.67433 {100×100 uint8} 0.76929 0.32715 {100×100 uint8} 0.25515 0.37823 {100×100 uint8} 0.5072 0.15886 {100×100 uint8} 0.99285 0.38741 {100×100 uint8} 0.399 0.11833 {100×100 uint8} 0.7312 0.73402 {100×100 uint8} 0.069723 0.25619 {100×100 uint8} 0.28101 0.3847 {100×100 uint8} 0.62227 0.03869 {100×100 uint8} 0.94875 0.26308 {100×100 uint8} 0.41549 0.5522 {100×100 uint8} 0.46006 0.86584 {100×100 uint8} 0.017776 0.81635 {100×100 uint8} 0.74653
%% 学習
net = trainNetwork(cds,lgraph,options); % lgraphのInputNamesとcdsの入力データの順番が整合しているかを確認
解決しなければ、すみません、再度お知らせ願います。
  3 Comments
Akifumi Yoshida
Akifumi Yoshida on 7 Jul 2022
先日はご回答いただきありがとうございました.
augmentedImageDatastore(画像入力)のMiniBatchSize, arrayDatastore(特徴入力)のReadSizeを揃えることでcombinedDatastoreに結合させた後,trainNetworkがエラーなく動作することを確認しました.
しかし,これに関連し,別の問題が生じています.
以下では,入力データが画像と応答子のみの場合でご説明します.
画像はImageDatastoreを経てaugmentedImageDatastoreに登録し,応答子はarrayDatastoreに登録,これらをcombineを用いて結合させ,このcombinedDatastoreを深層学習モデルの学習に用いると,学習後のモデル性能がまったく低い状態になってしまいます.
同じ画像を3次元配列に読み込んだ後にこれをarrayDatastoreに登録し,さらにarrayDatastoreに登録された応答子と結合し,これによって得られたcombinedDatastoreを同じ深層学習モデルの学習に用いると,期待した処理性能が得られています.
augmentedImageDatastoreを用いたcombinedDatastoreで正しく深層学習モデルの学習ができていないと思いますが,どのような原因が考えられ,どのように対処すべきでしょうか?
Shunichi Kusano
Shunichi Kusano on 7 Jul 2022
「学習後のモデル性能が低い」というのはそもそも学習に用いたデータセットでも精度が出てないということでしょうか。つまりlossが下がらないということですか?
判断材料としてそれぞれのパターンで学習に用いたコードと、学習後のモデル性能を評価した際のコード、それから学習した際の学習曲線をシェアいただけると何かわかるかもしれません。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!