YOLOv2における学習前のエラーについて

今回、YOLOを使用して学習を行うことになりました。
自分の現状理解では、転移学習させたCNNを最後の特徴層?以後を切り離し、YOLOのサブネットワークをつなげ学習させる手順だと認識しています。
今回は、事前学習のネットワークとしてResNet18を転移学習させました。その後、YOLO仕様に変換さて学習を行ったところ、以下のようなエラーが起きてしまいました。エラー内容からして、変換後と変換前で特徴層のチャンネル数?が一致していないのではないかと考えていますが、どこに手をつければ良いか思いつきません。
よろしければ、ご指摘とアドバイスしていただければ幸いです。
よろしくお願いいたします。
inputSize = [224 224 3];
numClasses = width(vehicleDataset)-1;
trainingDataForEstimation = transform(trainingData,@(data)preprocessData(data,inputSize));
numAnchors = 7;
load('Resnet18v1');%転移学習したCNN
featureExtractionNetwork = Resnet18v1;
featureLayer = 'res5b_relu';
lgraph = yolov2Layers(inputSize,numClasses,anchorBoxes,featureExtractionNetwork,featureLayer);
options = trainingOptions('sgdm', ...
'MiniBatchSize', 16, ....
'InitialLearnRate',1e-3, ...
'MaxEpochs',20,...
'CheckpointPath', tempdir, ...
'Shuffle','never');
[detector,info] = trainYOLOv2ObjectDetector(preprocessedTrainingData,lgraph,options);
これを実行すると以下のエラーが発生します。
エラー: trainYOLOv2ObjectDetector (line 166)
[trainingData, lgraph, params] = iParseInputsYolov2(...
エラー: trainYOLOv2_2 (line 75)
[detector,info] = trainYOLOv2ObjectDetector(preprocessedTrainingData,lgraph,options);
原因:
ネットワーク: YOLO v2 変換層への入力は、7 個のアンカー ボックスと 21 個のクラスをサポートするために 182 個のチャネルをもたなければなりません。チャネ
ル数は numAnchors * (5 + numClasses) と等しくなければなりません。学習データ、yolov2Transform 層で指定されたアンカー ボックス数、または変換層の
前の層を更新します。

 Risposta accettata

Kenta
Kenta il 8 Lug 2020

0 voti

こんにちは、そちらのネットワーク構成が質問文からのみではわからないので確認させてください。
res5b_reluの直後にyolov2Conv1が来ている形で正しいですか?
anchorBoxesという変数は7行2列の変数になっていますか?
また、analyzeNetwork(lgraph)というコマンドで、ネットワークを確認したとき、最後の出力はどうなってますか(例:7×7×182など)

8 Commenti

HY
HY il 8 Lug 2020
度の回答ありがとうございます。
res5b_reluの直後はyolov2Conv1になっております。
アンカーボックスは[17,11;10,6;7,5;13,9;32,23;23,15;3,2]となっています。
最後の層のYOLO v2 Output のアクティベーションを見たところ何も書いてありませんでした。
ひとつ前のYOLO v2 Transform Layerは7×7×189 になってます。ここがおかしいのでしょうか。
よろしくお願いいたします。
Kenta
Kenta il 8 Lug 2020
なるほど、教えていただきありがとうございます。
numClassesという変数はいくつになってますか?21でしょうか?
失礼いたしました、一つ前のほうです。189なんですね。理由は今は置いておいて、ここが182になれば動く気がします。
HY
HY il 8 Lug 2020
すみません、帰宅してしまい確認できませんが、確か21にはなっていたと思います…。 明日確認いたします。 なるほど、そこが182に揃えばいいのですね。
Kenta
Kenta il 8 Lug 2020
はい、また教えて下さい。クラス数も本来は21を想定されてる、ということでしょうか?
HY
HY il 8 Lug 2020
はい、クラス数は21になっております。
HY
HY il 9 Lug 2020
すみません、認識させたいクラス数は22でした。
numClassesは22になっています。
HY
HY il 9 Lug 2020
指摘していただいた部分を確認したところ、学習させるラベルの数の設定が間違っていたようで、確認したら何とか学習に入りました!!
お騒がせしてすみません。Kenta様のアドバイスのおかげです。
誠にありがとうございました。
Kenta
Kenta il 9 Lug 2020
はい、解決し、よかったです!

Accedi per commentare.

Più risposte (0)

Tag

Richiesto:

HY
il 8 Lug 2020

Commentato:

il 9 Lug 2020

Community Treasure Hunt

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

Start Hunting!