YOLO v3 tinyをオリジナルの学習データを使って学習させ、物体検出をしてみたところ、バウンディングボックスの精度が悪かったので、それを改善するためにcfgファイルの設定を見直してみました。
YOLO 動作環境
OS:Windows 10
CPU: core i7
GPU: GeForce GTX 1660 SUPER
YOLOを動かすために、AlexryAB氏が公開している手順を参考にしました。
https://github.com/AlexeyAB/darknet
学習時にGPUを使えるようにするために、makeファイルに
“GPU=1″と記入するのを忘れないように。
CUDA, cuDNNのインストールとGPUがTensorflowで使われているかどうか確認するための方法は下記を参考にしてください。
YOLO cfgファイルの設定
YOLOの物体検出の精度を上げるために、cfgファイルの次の箇所の設定を変更しました。
・ニューラルネットワークの分解能を上げるために、”height=416, width=416″から、”height=608, width=608″へとネットワークのサイズを大きくした。
ネットワークのサイズを大きくすることで、検出したい物体のサイズが小さい場合でも検出することができるようになり、精度が上がります。
もちろん、608よりも大きな数字に設定することもできます。そのときには32の倍数で設定します。
・バウンディングボックスの精度を上げるために、次の3つのコマンドを各[yolo]レイヤーに追加した。
“ignore_thresh = .9 iou_normalizer=0.5 iou_loss=giou”
これによってバウンディングボックスの精度は向上し、mAP@0.9の値は増加します。ただし、mAP@0.5の値は減少します。
ignore_threshについて
ignore_threshについて、補足します。
学習の時にlossを計算する際、ignore_threshで設定した値以下のIOUのバウンディングボックスは計算から除外されます。
したがって、ignore_threshの値を大きくしすぎる(1に近づける)と、推論に使われるボックスの数が減少することになり、オーバーフィッティングしやすくなります。一方で、値が小さすぎるとアンダーフィッティングになってしまいます。0.5 – 0.7がよくつかわれるようですが、バウンディングボックスの精度を上げたい場合には、それよりも高めに設定するほうが良いようです。
mAP, IoUの参考ページ:https://qiita.com/cv_carnavi/items/08e11426e2fac8433fed
最近のコメント