Faster R-CNNのエラーについて
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Faster R-CNNを学習させる際に以下のようなエラーが発生してしまいました。
optionsStage1 = trainingOptions('sgdm', ...
'MaxEpochs', 30, ...
'InitialLearnRate', 1e-5, ...
'MiniBatchSize',32,...
'VerboseFrequency',200,...
'CheckpointPath',tempdir);
・・・省略
options = [
optionsStage1
optionsStage2
optionsStage3
optionsStage4
];
%物体検出の転移学習を行う
rcnn = trainFasterRCNNObjectDetector(H3, SignNet, options, ...
'NegativeOverlapRange', [0 0.4], 'PositiveOverlapRange',[0.7 1],...
'SmallestImageDimension',700,'NumRegionsToSample',128,...
'trainingMethod','four-step');
このコードを実行後以下のエラーが発生します。
エラー: fasterRCNNObjectDetector.trainRPN (line 216)
MiniBatchSize が 1 より大きい場合、学習イメージは同じサイズでなければなりません。可変サイズのイメージで検出器を学習させるには、関数 trainingOptions を使用して'MiniBatchSize' を 1 に設定します。
エラー: trainFasterRCNNObjectDetector>iTrainFourStep (line 481)
[stage1Detector, rpn, info] = fasterRCNNObjectDetector.trainRPN(...
エラー: trainFasterRCNNObjectDetector (line 424)
[detector, info] = iTrainFourStep(trainingData, fastRCNN, rpn, options, params, executionSettings, imageInfo);
エラー: trainFasterRCNNSignDetector2 (line 54)
rcnn = trainFasterRCNNObjectDetector(H3, SignNet, options, ...
このエラーですとミニバッチサイズについて述べられていると思うのですが、学習画像サイズにばらつきがあるためミニバッチを1にしてばらばらなサイズの画像が読み込めるよう(になる?)にする必要があると思うのですが、それでは学習に時間がかかってしまいます。この場合、ミニバッチを32のまま実行する場合はどのようにするればよろしいでしょうか。
勉強不足で拙い質問となってしまい申し訳ありませんが、何かご指摘アドバイス等いただければ幸いです。
よろしくお願いいたします。
0 Kommentare
Akzeptierte Antwort
Kenta
am 15 Sep. 2020
trainingDataResized = transform(trainingData,@(data)preprocessData(data,networkInputSize));
こんにちは、確かに、学習の画像のサイズにばらつきがあると大変ですね。そういう場合はtransform関数を使って、画像のサイズとバウンディングボックスの位置や大きさを自動的に変換するのがよさそうです。
例えば、上のように、trainingDataをtransformで変換します。ここで、下のようにpreprocessDataという補助関数を定義して、下のように書いて、コードの末尾や、おなじパスに保存しておいておきます。例えばこのページが参考になりました
function data = preprocessData(data, targetSize)
for ii = 1:size(data,1)
I = data{ii,1};
imgSize = size(I);
bboxes = data{ii,2};
I = im2single(imresize(I,targetSize(1:2)));
scale = targetSize(1:2)./imgSize(1:2);
bboxes = bboxresize(round(bboxes),scale);
data(count,1:2) = {I, bboxes};
end
end
1 Kommentar
Weitere Antworten (0)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!