YOLOv9
1回の処理で密なボックスグリッドにスコアを付け、NMSで重複を除く1段畳み込み検出器です。LibreYOLOには3つのバリアントがあり、そのうち1つはNMSステップを持ちません。
- タスク
- detection
- サイズ
- yolo9: t, s, m, c at 640 px; yolo9_p2: t, s at 640 px
- インストール
pip install libreyolo- サポートティア
- フラッグシップ、v1.0.0以降。機能はまずここで設計され、GPUで完全に検証されます。
- ライセンス
- コード:MIT、重み:MIT。商用利用
インストール
YOLOv9には基本パッケージ以外の追加パッケージは不要です。
pip install libreyolo推論
重みは初回使用時にHugging Faceからダウンロードされ、ローカルにキャッシュされます。
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9s.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreYOLO9s.pt save=True \ source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpgfrom libreyolo import LibreYOLO, SAMPLE_IMAGE # 同じ呼び出しで異なるチェックポイントを使用 エンドツーエンドヘッドが# 高スコアの予測を返すため NMS は実行されず iou は無視されるmodel = LibreYOLO("LibreYOLO9E2Es.pt")result = model(SAMPLE_IMAGE, conf=0.25, max_det=300) print(len(result.boxes))返されるResultsオブジェクトはすべてのファミリーに共通するため、別の検出器への切り替えは1行の変更で済みます。基本モデルとstride 4モデルでは、confが信頼度のしきい値、iouがNMSのしきい値を設定します。エンドツーエンドモデルはNMSを実行せずiouを無視するため、confとmax_detで出力が決まります。ソース、ストリーミング、結果の処理については推論を参照してください。
バリアント
3つのバリアントがバックボーンを共有します。3つすべてが検出専用で、同じ引数を受け取ります。
基本モデルは3つの特徴スケールで予測し、NMSで重複するボックスを除去します。
エンドツーエンドモデルはそのヘッドを維持し、隣に1対1マッチングの分岐を追加します。推論では1対1の分岐だけを読み取り、高スコアの予測を取得するため、NMSは実行されません。デプロイ先のランタイムにNMS演算子がない場合に選択してください。
stride 4モデルはバックボーンのさらに上位の1レベルを表に出し、そこまでネックを拡張し、3つではなく4つのスケールで予測します。追加のスケールは少数のピクセルしか占めない物体向けです。公開されている唯一のチェックポイントは航空画像で学習されています。基本検出チェックポイントを転移できます。バックボーンとネックは変更せずに読み込まれ、3つの学習済みヘッドタワーは1スロット上にずれ、stride 4タワーはランダム初期化から開始します。
| チェックポイント | 入力(px) | mAP 50-95 | パラメータ(M) |
|---|---|---|---|
| LibreYOLO9c | 640 | 56.4 | 25.5 |
| LibreYOLO9m | 640 | 55.3 | 20.12 |
| LibreYOLO9s | 640 | 55.9 | 7.2 |
| LibreYOLO9t | 640 | 54.0 | 2.02 |
COCO val2017, 500 images。LibreYOLOベンチマークハーネスで測定し、Vision Analysisで公開しています。そこではハードウェアおよびランタイム別のレイテンシを比較でき、完全な実行記録も確認できます。
学習
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt")model.train(data="my-dataset.yaml", epochs=100, imgsz=640, batch=16)libreyolo train model=LibreYOLO9s.pt data=my-dataset.yaml \ epochs=100 imgsz=640 batch=16from libreyolo import LibreYOLO9P2 # stride 4 バリアントには固有の COCO チェックポイントがないため# 基本検出モデルを指定 バックボーンとネックはそのまま読み込み# stride 4 ヘッドタワーはランダム初期化で開始model = LibreYOLO9P2(None, size="s")model.train(data="my-dataset.yaml", epochs=100, pretrained="LibreYOLO9s.pt")pretrainedによって実行の開始点が決まります。同じモデルとサイズの公開済みチェックポイントを読み込むにはTrueを渡し、それ以外の場合は名前またはパスを渡してください。形状が一致しないテンソルは拒否されずにスキップされ、読み込んだ数が実行ログに記録されます。そのため、異なるクラス数で学習したチェックポイントも開始点として使えます。
stride 4モデルには固有の公開済みCOCOチェックポイントがないため、そこでTrueを指定すると存在しないファイルに解決され、ダウンロードに失敗します。代わりに基本検出チェックポイントを指定してください。
データセット、データ拡張、マルチGPU、ロガーについては学習を参照してください。
検証
val()は、学習に使用した形式の任意のデータセットで測定した適合率、再現率、mAP 50、mAP 50-95を含むmetrics/キーの辞書を返します。
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreYOLO9s.pt data=my-dataset.yaml# 同梱の COCO yaml はダウンロードスクリプトを内包するため# データセットがローカルにない場合は明示的な許可が必要libreyolo val model=LibreYOLO9c.pt data=coco.yaml imgsz=640 \ allow_download_scripts=Trueエクスポート
| タスク | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX:対応 | Detection to TorchScript:対応 | Detection to ExecuTorch:対応 | Detection to TensorRT:対応 | Detection to OpenVINO:対応 | Detection to Paddle:対応 | Detection to MNN:対応 | Detection to RKNN:非対応 | Detection to ncnn:対応 | Detection to TFLite:非対応 | Detection to CoreML:非対応 | Detection to Core AI:対応 |
チェックマークは3つすべてのバリアントに適用されます。差がある場合、マトリクスには3つのうち最も弱いものが示されます。
エクスポートした成果物は、ファイルサフィックスに基づいてLibreYOLO()から再度読み込めます。そのため、.onnxまたは.engineファイルはチェックポイントと同様に動作し、同じResultsを返します。LibreYOLOをインストールせず、単独のランタイムでグラフを実行することもサポートされますが、その場合は前処理と後処理を自分で実装する必要があります。
基本検出モデルでは、その後処理部分をグラフ内に移動できます。ONNXエクスポートでnms=Trueを指定すると抑制がモデル内部に組み込まれ、最初の出力は固定された(1, max_det, 6)テンソルになります。各行はx1, y1, x2, y2, score, classで、検出数を超える部分はゼロでパディングされます。このグラフはバッチ1で、動的軸を持ちません。エンドツーエンドモデルとstride 4モデルはこのフラグを受け付けません。
各形式では異なる追加パッケージをインストールし、それぞれ固有の引数をいくつか受け取ります。どちらも該当する形式のページに記載されています。
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt")model.export(format="onnx", imgsz=640)libreyolo export model=LibreYOLO9s.pt format=onnx imgsz=640libreyolo export model=LibreYOLO9s.pt format=onnx nms=True \ conf=0.25 iou=0.45 max_det=300from libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリーはファイルサフィックスで振り分けるためエクスポート成果物も# 任意のチェックポイントと同様に読み込まれ同じ Results オブジェクトを返すmodel = LibreYOLO("LibreYOLO9s.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)チェックポイント
このファミリーで公開されているすべての重みファイルです。
| ファイル | 入力(px) | 重みのライセンス |
|---|---|---|
| Detection | ||
| LibreYOLO9t.pt | 640 | mit |
| LibreYOLO9s.pt | 640 | mit |
| LibreYOLO9m.pt | 640 | mit |
| LibreYOLO9c.pt | 640 | mit |
| LibreYOLO9E2Et.pt | 640 | mit |
| LibreYOLO9E2Es.pt | 640 | mit |
| LibreYOLO9E2Em.pt | 640 | mit |
| LibreYOLO9E2Ec.pt | 640 | mit |
| LibreYOLO9P2s-visdrone.pt | cc-by-nc-sa-3.0 | |
上記のすべてのファイルは現在LibreYOLO orgにあり、初回使用時にダウンロードされます。
ライセンス
ダウンロードする特定の重みについて、Hugging Faceリポジトリのライセンスを確認してください。LibreYOLO orgの各チェックポイントにはライセンスが付与されており、同じファミリー内でも常に同一とは限りません。そのリポジトリが正式な情報源です。以下の概要は、このページを最後に検証した時点で適用されていた内容を示します。
これは関連するライセンスの説明であり、法的助言ではありません。商用上重要な場合は、自分でライセンスを読み、専門家の助言を受けてください。
- 原著作物
- YOLOv9, MultimediaTechLab
- アップストリームのライセンス
- MIT
- アップストリームのソース
- github.com/MultimediaTechLab/YOLO
- LibreYOLOのコード
- MIT
- 重み
- MIT、huggingface.co/LibreYOLOで再公開
- 解釈
- MIT is a permissive license, so these weights can be used in commercial and closed-source products. The one standing obligation is to keep the license text and the copyright notice, Kin-Yiu Wong and Hao-Tang Tsui, with any copy you redistribute. It places no condition on your own application code, and a model you train yourself on your own data is yours. Two things are worth knowing beyond that. The port follows the authors' MIT re-release of YOLOv9, not the GPL-3.0 repository that carries the same model, so the permissive terms come from the source LibreYOLO actually derives from. And one checkpoint in this family is not MIT: the stride-4 model trained on VisDrone2019-DET inherits that dataset's CC BY-NC-SA 3.0 terms, which rule out commercial use and require share-alike on anything derived from it.
ここにある1つのチェックポイントはMITではありません。VisDrone2019-DETで学習したstride 4モデルは、そのデータセットのCC BY-NC-SA 3.0条件を継承します。非商用利用に限定され、派生物には継承条件が適用され、このファミリーの残りが提供される寛容なライセンスの範囲外です。COCOクラスではなくVisDroneの航空クラスを予測します。ライブラリはファイルをダウンロードする前にこれらすべてを表示します。
引用
@inproceedings{wang2024yolov9,
title={{YOLOv9}: Learning What You Want to Learn Using Programmable Gradient Information},
author={Wang, Chien-Yao and Yeh, I-Hau and Liao, Hong-Yuan Mark},
year={2024},
booktitle={Proceedings of the European Conference on Computer Vision (ECCV)},
}著者によるgithub.com/MultimediaTechLab/YOLO#citationsの引用ブロックからコピーしています。