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 層で指定されたアンカー ボックス数、または変換層の
前の層を更新します。

 채택된 답변

Kenta
Kenta 2020년 7월 8일

0 개 추천

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

댓글 수: 8

HY
HY 2020년 7월 8일
度の回答ありがとうございます。
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 2020년 7월 8일
なるほど、教えていただきありがとうございます。
numClassesという変数はいくつになってますか?21でしょうか?
失礼いたしました、一つ前のほうです。189なんですね。理由は今は置いておいて、ここが182になれば動く気がします。
HY
HY 2020년 7월 8일
すみません、帰宅してしまい確認できませんが、確か21にはなっていたと思います…。 明日確認いたします。 なるほど、そこが182に揃えばいいのですね。
Kenta
Kenta 2020년 7월 8일
はい、また教えて下さい。クラス数も本来は21を想定されてる、ということでしょうか?
HY
HY 2020년 7월 8일
はい、クラス数は21になっております。
HY
HY 2020년 7월 9일
すみません、認識させたいクラス数は22でした。
numClassesは22になっています。
HY
HY 2020년 7월 9일
指摘していただいた部分を確認したところ、学習させるラベルの数の設定が間違っていたようで、確認したら何とか学習に入りました!!
お騒がせしてすみません。Kenta様のアドバイスのおかげです。
誠にありがとうございました。
Kenta
Kenta 2020년 7월 9일
はい、解決し、よかったです!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

태그

질문:

HY
2020년 7월 8일

댓글:

2020년 7월 9일

Community Treasure Hunt

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

Start Hunting!