YOLOv2ネットワ​ークの損失関数での、​各項に対する重みの変​更について

8 views (last 30 days)
Kenta
Kenta on 27 Sep 2019
Commented: Kenta on 28 Sep 2019
ただいま、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]

Accepted Answer

Kazuya Machida
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
  1 Comment
Kenta
Kenta on 28 Sep 2019
Kazuya Machida 様
ありがとうございます。うまくロスの係数を変更することができました。
yolov2OutputLayerでこの層を定義できることを不勉強で存じ上げませんでした。
また、いろいろとYOLOについて試してみたいと思います。この度は誠にありがとうございました。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!