YOLOv5を使った独自データの学習と推論|ultralytics YOLOリポジトリ
ultralytics社のリポジトリでは、YOLOv3/YOLOv5/YOLOv6/YOLOv8/YOLOv9と多くのモデルをサポートしています。この記事では、YOLOv5モデルを使ってカスタムデータ(オリジナルデータ)でトレーニングさせる方法を解説します。
ultralytics社のYOLOモデル
YOLOv5はultralytics社の作成したYOLOモデルです。2023年にYOLOv8が登場しましたが、そちらのリポジトリでもYOLOv5はサポートされています。
ultralytics社のYOLOモデルでは、モデルを簡単にモデルを切り替えられるように設計されています。
モデルの切り替えを確認するために、今回はYOLOv8で作成した学習コードをYOLOv5に置き換えて学習させてみました。
事情があってYOLOv5モデルが使いたい(YOLOv5の学習済みパラメータを持っている)理由がある場合、YOLOv5の独自学習パラメータを(おそらくそのまま)使うことが可能そうです。
ベースとするYOLOv8の学習コードについて
ベースとするコードは、以下の記事のものになります。この記事では、car object detectionのデータセットを使ってカスタムデータへの学習を行っています。
ここでは、このコードをYOLOv5向けに修正します。
コードは上の記事を参考にしてください。
また、今回のコードはkaggle notebookで公開していますのでそちらも合わせて確認ください。
YOLOv8→YOLOv5へモデルを変更する
ここでは、YOLOv8からYOLOv5へモデルを変更するのに、ultralytics社の公式のリポジトリを利用します。公式リポジトリは以下のURLです。
公式Githubリポジトリ:https://github.com/ultralytics/ultralytics/
書き換えは1行だけ
書き換えるのはたったの1行です。
具体的な書き換えはYOLO('yolov8n.pt')
をYOLO('yolov5n.pt')
に変更するだけです。
これでモデルがYOLOv8からYOLOv5になります。
学習済みモデルとしては、yolov5n
, yolov5s
, yolov5m
, yolov5l
, yolov5x
, yolov5n6
, yolov5s6
, yolov5m6
, yolov5l6
, yolov5x6
を選択することができます。
model = YOLO('yolov5n.pt')
model.train(data="dataset.yaml", epochs=100, batch=8)
事前学習モデルを利用しない場合は、YOLO('yolov5n.yaml')
のようにyamlファイルを指定して生成します。独自モデルの場合は、YOLO(独自モデルファイルへのパス)
という形式で呼び出します。
実行結果
YOLOv8
Model summary (fused): 168 layers, 3005843 parameters, 0 gradients
Class Images Instances Box(P R mAP50 mAP50-95):
all 71 100 0.98 0.979 0.99 0.711
Speed: 2.2ms preprocess, 2.9ms inference, 0.0ms loss, 1.9ms postprocess per image
YOLOv5
YOLOv5n summary (fused): 193 layers, 2503139 parameters, 0 gradients, 7.1 GFLOPs
Class Images Instances Box(P R mAP50 mAP50-95):
all 71 117 0.966 0.969 0.99 0.704
Speed: 0.8ms preprocess, 1.2ms inference, 0.0ms loss, 1.4ms postprocess per image
比較
mAP50-95で比較すると、YOLOv8が0.711, YOLOv5が0.704と、精度面では新しいモデルのYOLOv8の方が上のようです。
ただ、速度面(Speed)で見ると、YOLOv5の方が軽そうです。YOLOv5もそれなりの性能があるので、速度面からYOLOv5を選択することもあるかもしれません。
少し気になるのは、上のグラフのmetrics/precision(B)とval/dfl_lossの動きで、YOLOv8に比べて安定していない感じがします。
特別な理由がなければ、YOLOv8を使った方がよいと思います
YOLOv5以外への変更について
公式のGithubのultralytics/cfg/models
に、利用できるモデルの設定ファイルが格納されています。これを見るとYOLOv3/YOLOv5/YOLOv6/YOLOv8のモデルが利用できるようです。
まとめ
以上、ultralyticsのモデルをつかってYOLOv8からYOLOv5に切り替える方法について説明しました。