faster r-cnnのエラーについて

こんにちは。
Faster r-cnnの学習を以下のドキュメンテーションを参考に行いました。
しかし、学習を実行すると以下のようなエラーが発生してしまいました。
エラー内容が行列の次元が一致していないみたいなのですが、どの行列が一致していないのかわかりません。因みに、ドキュメンテーションではResnet50を使用していますが、自分はResnet18を使用しています。
情報が少なく申し訳ありませんが、何かご指摘アドバイスいただければ幸いです。
よろしくお願いいたします。
エラー: ./
行列の次元は一致しなければなりません。
エラー: vision.internal.cnn.layer.RPNCrossEntropy/backwardLoss (line 161)
dX = (-T./nnet.internal.cnn.util.boundAwayFromZero(Y))./numObservations;
エラー: vision.internal.cnn.layer.RPNOutputInternalLayer/backwardLoss (line 99)
dLdZCls = this.RPNClassificationLayer.backwardLoss(Zcls, Tcls);
エラー: nnet.internal.cnn.DAGNetwork/computeGradientsForTraining/efficientBackProp (line 748)
dLossdX = thisLayer.backwardLoss( ...
エラー: nnet.internal.cnn.DAGNetwork>@()efficientBackProp(i) (line 840)
@() efficientBackProp(i), ...
エラー: nnet.internal.cnn.util.executeWithStagedGPUOOMRecovery (line 11)
[ varargout{1:nOutputs} ] = computeFun();
エラー: nnet.internal.cnn.DAGNetwork>iExecuteWithStagedGPUOOMRecovery (line 1563)
[varargout{1:nargout}] = nnet.internal.cnn.util.executeWithStagedGPUOOMRecovery(varargin{:});
エラー: nnet.internal.cnn.DAGNetwork/computeGradientsForTraining (line 839)
theseGradients = iExecuteWithStagedGPUOOMRecovery( ...
エラー: nnet.internal.cnn.Trainer/computeGradients (line 200)
[gradients, predictions, states] = net.computeGradientsForTraining(X, Y, propagateState);
エラー: nnet.internal.cnn.Trainer/train (line 119)
[gradients, predictions, states] = this.computeGradients(net, X, response, propagateState);
エラー: vision.internal.cnn.trainNetwork (line 96)
trainedNet = trainer.train(trainedNet, trainingDispatcher);
エラー: trainFasterRCNNObjectDetector>iTrainEndToEnd (line 897)
[net, info] = vision.internal.cnn.trainNetwork(...
エラー: trainFasterRCNNObjectDetector (line 428)
[detector, info] = iTrainEndToEnd(trainingData, fastRCNN, options, params, executionSettings, imageInfo);
エラー: Untitled2 (line 127)
[detector, info] = trainFasterRCNNObjectDetector(trainingData,lgraph,options, ...

 Accepted Answer

Kenta
Kenta on 1 Oct 2020

0 votes

こんにちは、
エラー: ./
とあるので、このコマンドのある行でエラーが起こっているのだと思います。
絶対にそうとは言い切れませんが、HYさんの書いたコードの中にエラーがありそうです。
「検索」で探したりすれば、候補が割り出せそうです。ライブエディターで実行している場合はctl+enterでセクションごとに実行できるので、分けて実行してみたりもすれば見つかりそうです。

7 Comments

HY
HY on 1 Oct 2020
Kenta様
ご回答ありがとうございます。
確認したところ補助関数にエラーのコードがあったのですが、ドキュメンテーションと全く同じ補助関数を使用しているため、原因がわかりません。
セクションごとに実行したところ、以下の学習を行うコードを実行するとエラーが発生してしまいます...
[detector, info] = trainFasterRCNNObjectDetector(trainingData,lgraph,options, ...
'NegativeOverlapRange',[0 0.3], ...
'PositiveOverlapRange',[0.6 1]);
Kenta
Kenta on 1 Oct 2020
なるほど、ありがとうございます。失礼しました、、、となると少し難しくなりますね。 trainFasterRCNNObjectDetector関数そのものの問題なんですかね。
学習サンプル自体になんらかのエラーがあるのか、何か思わぬ形で、trainFaster...の関数の内容が書き変わってしまったか、ですかね。ちなみに近くに他のMATLABの入っているPCなどありませんか?そのPCでも同じエラーが返っていたら少し原因も絞れ込めそうですが。
HY
HY on 1 Oct 2020
Edited: HY on 1 Oct 2020
今のところ一台のpcでしか操作できない状態です...
因みになのですが、2017verのfaster r-cnnでは学習データを検証用(validationData)にもテスト用(testData)にも分けずに全てのデータを学習させていたのですが、それでも過学習せずかなりの精度で検出できていました。(学習で使用していないデータで検証した場合)
今の2020verでは、データを学習用と検証用とテスト用の3つに分けていると思うのですが、テスト用は別に自分で用意しておくとして、例えば検証用データを学習データの2割使用した場合、自動で各エポックで2割の検証データが配分せれ、検証され過学習されないようになっているのでしょうか。
説明が下手くそで申し訳ありません。。。
HY
HY on 1 Oct 2020
今いろいろとオプション設定を変更して学習をしてみたところ、途中まではエラーが起きなくなりました。
変更した点として、学習率を10^-3から10^-5へと変更したところエラーが発生しなくなりました。
しかし、ミニバッチ損失が(学習率をかなり小さくしたにもかかわらず)NaNのままになってしまい、1エポックを5,6回過ぎると同じようなエラーが発生して止まってしまいます。原因がわかりません...
Kenta
Kenta on 1 Oct 2020
なるほど、詳しく教えていただきありがとうございます。なかなか難しそうですね。
ドキュメントのコード自体は正しいと思うのであとはデータそのものの問題かもしれません。もちろんデータ自体をここで共有することは難しいと思うので、ひとまず今回はtrain...関数に問題がありそうで、あとは他のアルゴリズムを試したりしてはどうか?くらいしか現状私にはわからなさそうです。データによっては種々のチューニングが非常に難しいので、多方面に勉強しながら色々と試すしかなさそうですね。根本的な解決にならずすいません。
HY
HY on 1 Oct 2020
いいえ、色々と質問してしまい申し訳ありませんでした。
丁寧に検討していただき誠にありがとうございます。頑張ってみたいと思います。
Kenta
Kenta on 1 Oct 2020
はい、がんばってください!

Sign in to comment.

More Answers (0)

Asked:

HY
on 1 Oct 2020

Commented:

on 1 Oct 2020

Community Treasure Hunt

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

Start Hunting!