YOLOv2ネットワークの損失関数での、各項に対する重みの変更について
3 views (last 30 days)
Show older comments
ただいま、YOLOv2を用いて、物体検出を試みています。そこで、YOLOv2での損失関数の係数の設定について質問があります。
こちらのドキュメント(Training Loss)のように、損失関数には、複数の係数があると存じます。
これらは、クラス確率やバウンディングボックスの情報および信頼度の損失に対応していると思いますが、それらの値を変更することは可能でしょうか。
デフォルト設定では、[5 1 1 1]となっています。関数yolov2Layersで作成したlgraphから直接変更することはできませんでした。
また、その係数が入っている最終層(下の例では150層目)のみを取り出し、変更し、replacelayerなどを行うのではないかと考えましたが、
取り出した層でも変更はできないようです。その[5 1 1 1]の値を他の値にする場合にはどのようにすれば良いでしょうか。現在、2019aを使用しています。
下は、YOLOv2ネットワークを作成するコードの例となっています。
last_layer.LossFactors=[1 1 1 1]
と、コードを打っても変更不可の項目である、とエラーが検出されます。
以上の件、アドバイス等いただけると幸いです。どうぞよろしくお願いいたします。
close all;clear;clc
% 画像入力後の特徴抽出に使う学習済みモデル
network = resnet50();
% 特徴抽出の最終レイヤーを指定
featureLayer = 'activation_40_relu';
% 入力画像サイズ
imageSize = network.Layers(1).InputSize
% クラス数
numClasses = 3;
anchorBoxes=[ 145 122;
81 76;
160 132;
41 34];
% YOLO v2物体検出ネットワークを定義
lgraph = yolov2Layers(imageSize, numClasses, round(anchorBoxes), ...
network, featureLayer);
% ネットワーク可視化
analyzeNetwork(lgraph)
% Loss factorsの表示
lgraph.Layers(150, 1).LossFactors
% lgraphの最終層のみ取り出す
last_layer=lgraph.Layers(150);
last_layer.LossFactors=[1 1 1 1]
0 Comments
Accepted Answer
Kazuya Machida
on 27 Sep 2019
Kenta Itakuraさん、
以下のように、YOLOv2の出力層レイヤー(yolov2OutputLayer)を新たに作成して、置き換える方法でうまく行きますでしょうか?
%% lgraphの最終層のみ取り出す
newlayer = yolov2OutputLayer(anchorBoxes,'LossFactors',[1 1 1 1],'Name','yolov2OutputLayer_new')
lgraphNew = replaceLayer(lgraph,'yolov2OutputLayer',newlayer);
lgraphNew.Layers(end).LossFactors
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!