0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

yolov8とyolo11のモデルは、コード変更無しにモデルの差し替えが可能!

Posted at

タイトルで全てなのですが

Ultralyticsのyolov8のモデルと、yolo11のモデルの入出力は同じなので、コードの変更をすることなくモデルの差し替えが可能です!

PythonでUltralyticsを利用しているのであれば、Ultralyticsが全てをいい感じに処理してくれてるんだろう、くらいの話なのですが、エクスポートしたONNXモデルをC++ ONNXRUNTIMEなどで利用している場合でも、コードの変更なしに、モデルの差し替えだけでyolov8からyolo11に変更できます。

きっかけは自作物体検出アプリの処理速度改善アイデア

yolov8とyolo11の入出力が同じなのかな?と調べたきっかけは、自作物体検出アプリの処理速度改善のアイデアとしてでした。
物体検出モデルにはpython Ultralytics yolov8をカスタムデータセットで学習し、ONNXエクスポートしてC++ ONNXRUNTIME DirectMLやTensorRT-RTXなどで利用しています。

yolov8の代わりに、Ultralyticsの最新の安定版の物体検出モデルyolo11を利用したら処理速度が更に改善できるのではないか?
そんな風に考えて検索してみると"yolo11の方が速いよ"アピールをUltralytics公式でしているではありませんか!
chart-1767614737369.png

yolov8とyolo11のonnxモデルの入れ替えでコードの変更は必要か?

UltralyticsのウェブページにはCHAT AIがあるので、そのまま質問してみました。

You: C++ ONNXで、yolov8のカスタムモデルを利用して物体検出アプリを作成しています。yolo11のonnxモデルを準備した時、c++ onnxruntimeのコードを変更せずにonnxモデルだけ入れ替えるだけで、yolo11の物体検出アプリとして機能するでしょうか


Ultralytics AI: 結論から申し上げますと、多くの場合ONNXモデルを入れ替えるだけでそのまま動作します

YOLO11はYOLOv8と同じUltralytics 統合APIを採用しており、出力テンソルの構造(Shapeや次元順序)が共通化されています。そのため、後処理(NMSや座標変換)のロジックがYOLOv8に準拠していれば、コードの変更は不要です。

注意点と確認事項

  • 入出力サイズ: yolo export 時に imgsz を変更した場合は、C++側の入力リサイズ処理を合わせる必要があります。
  • タスクの一致: YOLOv8で「物体検出(Detect)」を使用していたなら、YOLO11も「Detect」モデルを使用してください。
  • 効率の向上: YOLO11はYOLOv8と比較して、同等以上の精度を維持しつつパラメータ数が大幅に削減されているため、モデルを入れ替えるだけで推論の高速化が期待できます。

変換コマンド例

yolo export model=yolo11n.pt format=onnx simplify=true

詳細はONNX Exportガイドもあわせてご確認ください。✅

image.png


yolo11を学習して早速アプリに載せてみた!

コード変更不要らしいので、早速学習を回して、アプリに載せてみました!
コード変更せずにONNXファイルを入れ替えるだけで、これまでと似たような物体検出処理結果を得ることができました!
そしてモデル入れ替えによる改善結果は!

yolov8m.onnx yolo11m.onnx
パラメータ数 25936904 20127378
ファイルサイズ 50.8MB 39.5MB
処理速度(DirectML) 50FPS 48FPS
処理速度(TensorRT-RTX) 74FPS 72FPS

速くなっていないどころか、やや遅くなっている、だと!?

yolo11のyolov8に対する真価

実はまだ自作アプリでは評価中なのですが、いくつかyolo11とyolov8について評価した結果を検索してみたところ、

  • バッチ処理での処理速度(FPS)はyolo11はyolov8にやや劣る
  • yolo11はyolov8に比べて誤検出が少ない
  • yolo11はyolov8に比べ、他の物体に部分的に隠れた状態での検出精度が高い

わたし的yolo11、yolov8モデルまとめ

  • yolo11モデルはyolov8モデルと入出力が同じのため、コードの変更なく、モデルの入れ替えが可能です
  • yolo11モデルでは、yolov8より少ないパラメータ、小さいファイルサイズで同等以上の検出精度が得られます
  • バッチ処理のFPSではyolo11はyolov8よりやや劣ります
  • yolo11はyolov8に比べ誤検出が少ない
    (らしい。評価中。確かに荒れてないような・・?)
  • CPU推論などエッジ環境での推論ではyolov8よりyolo11が良い
    (らしい。当方ではあまり関係ないので眼中になし)

私の方では、少しFPSが劣るのは残念ですが、検出結果がより良いのであればyolo11も十分検討に値するかな?と考えています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?