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

17 ビュー (過去 30 日間)
Akifumi Yoshida
Akifumi Yoshida 2022 年 6 月 22 日
コメント済み: Shunichi Kusano 2022 年 7 月 7 日
画像と、画像に対応する特徴データを入力とする深層学習ネットワークの学習に関する質問です。
画像 (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 は同じ行数でなければなりません。

採用された回答

Shunichi Kusano
Shunichi Kusano 2022 年 6 月 23 日
各データストアのミニバッチサイズが違うと同じエラーが再現しました。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 件のコメント
Shunichi Kusano
Shunichi Kusano 2022 年 7 月 7 日
「学習後のモデル性能が低い」というのはそもそも学習に用いたデータセットでも精度が出てないということでしょうか。つまりlossが下がらないということですか?
判断材料としてそれぞれのパターンで学習に用いたコードと、学習後のモデル性能を評価した際のコード、それから学習した際の学習曲線をシェアいただけると何かわかるかもしれません。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Find more on イメージを使用した深層学習 in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!