YOLOX

YOLOXは、分類と回帰を分離したヘッドを備え、SimOTAラベル割り当てで学習する、アンカーフリー(anchor-free)の1段階検出器です。LibreYOLOは物体検出でYOLOXに対応します。

タスク
detection
サイズ
n, t, s, m, l, x at 416 to 640 px
インストール
pip install libreyolo
サポートティア
サポート対象、v以降。補助的な学習可能モデル:CIで正常な状態を維持し、機能は機会に応じて追加されます。
アップストリーム
MegviiのYOLOX、Apache-2.0。論文ソース
ライセンス
コード:Apache-2.0、重み:Apache-2.0。商用利用

インストール

YOLOXに基本パッケージ以外の追加パッケージは必要ありません。

bash
pip install libreyolo

推論

重みは初回使用時にHugging Faceからダウンロードされ、ローカルにキャッシュされます。

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLOXs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreYOLOXs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

返される Results オブジェクトはすべてのファミリーが返すものと同じなので、別の検出器への切り替えは1行の変更で済みます。conf は信頼度のしきい値、iou は分離された3つの推論スケール全体に適用するNMSのしきい値を設定します。ソース、ストリーミング、結果の処理については推論を参照してください。

バリアント

6つのサイズが同じCSPバックボーンとPAFPNネックを共有します。もっとも小さい2つの nt は、ほかの4つより小さな固定入力解像度で動作します。以下のベンチマーク表にそれぞれの正確な値があります。

チェックポイント入力(px)mAP 50-95パラメータ(M)
LibreYOLOXnano41628.80.91
LibreYOLOXtiny41635.15.06
LibreYOLOXl64053.954.21
LibreYOLOXm64050.925.33
LibreYOLOXs64043.08.97
LibreYOLOXx64056.399.07

COCO val2017, 500 images。LibreYOLOベンチマークハーネスで測定し、Vision Analysisで公開しています。そこではハードウェアおよびランタイム別のレイテンシを比較でき、完全な実行記録も確認できます。

学習

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)
CLI
libreyolo train model=LibreYOLOXs.pt data=my-dataset.yaml \  epochs=300 imgsz=640 batch=16 lr0=0.01

設定を変更しなければ、trainerは lr0=0.01、SGD momentum 0.9、5エポックのウォームアップで300エポック実行し、最後の15エポックではmosaicおよびmixup拡張を無効にします。train()pretrained 引数も受け付けますが、メソッド内でその値が読み取られることはありません。学習は常にモデル構築時の重みから続行されるため、pretrained=False でもネットワークは再初期化されません。

imgsz は、読み込んだチェックポイントのネイティブ解像度ではなく、基本学習設定の固定値をデフォルトとします。これは特に nt のチェックポイントに影響します。imgsz を明示せずにいずれかの学習を続けると、公開時の小さなサイズではなく、大きい方のデフォルトへ切り替わります。

データセット、データ拡張、マルチGPU、loggerについては学習を参照してください。

検証

val() は、学習に使った形式の任意のデータセットに対して測定した適合率、再現率、mAP 50、mAP 50-95を含む metrics/ キーの辞書を返します。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLOXs.pt data=my-dataset.yaml
COCOに対する検証
# 同梱のCOCO yamlにはdownload scriptが埋め込まれているため# データセットがローカルにない場合は明示的な許可が必要libreyolo val model=LibreYOLOXn.pt data=coco.yaml imgsz=416 \  allow_download_scripts=True

エクスポート

タスクONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection 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:対応

エクスポート済み成果物はファイル接尾辞に基づいて LibreYOLO() から再度読み込めます。そのため、.onnx または .engine ファイルはチェックポイントと同様に動作し、同じ Results を返します。LibreYOLOをインストールしていない単独のランタイムでグラフを実行することもできますが、その場合は前処理と後処理を自身で記述する必要があります。CoreMLエクスポートでは、nms=True によりNMSをグラフへ埋め込めます。現在、このフラグを受け付けるファミリーはYOLOXとYOLOv9だけです。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreYOLOXs.pt format=onnx imgsz=640libreyolo export model=LibreYOLOXs.pt format=tensorrt imgsz=640 half=True
エクスポートしたファイルを使う
from libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリーはファイル接尾辞で経路を選ぶため、エクスポート済み成果物も# 通常のチェックポイントと同様に読み込まれ、同じResultsオブジェクトを返すmodel = LibreYOLO("LibreYOLOXs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

チェックポイント

このファミリーで公開されているすべての重みファイルです。

ファイル入力(px)重みのライセンス
Detection
LibreYOLOXn.pt416apache-2.0
LibreYOLOXt.pt416apache-2.0
LibreYOLOXs.pt640apache-2.0
LibreYOLOXm.pt640apache-2.0
LibreYOLOXl.pt640apache-2.0
LibreYOLOXx.pt640apache-2.0

上記のすべてのファイルは現在LibreYOLO orgにあり、初回使用時にダウンロードされます。

ライセンス

ダウンロードする特定の重みについて、Hugging Faceリポジトリのライセンスを確認してください。LibreYOLO orgの各チェックポイントにはライセンスが付与されており、同じファミリー内でも常に同一とは限りません。そのリポジトリが正式な情報源です。以下の概要は、このページを最後に検証した時点で適用されていた内容を示します。

これは関連するライセンスの説明であり、法的助言ではありません。商用上重要な場合は、自分でライセンスを読み、専門家の助言を受けてください。

原著作物
YOLOX, Megvii
アップストリームのライセンス
Apache-2.0
アップストリームのソース
github.com/Megvii-BaseDetection/YOLOX
LibreYOLOのコード
MIT
重み
Apache-2.0、huggingface.co/LibreYOLOで再公開
解釈
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours.

引用

@article{yolox2021,
  title={YOLOX: Exceeding YOLO Series in 2021},
  author={Ge, Zheng and Liu, Songtao and Wang, Feng and Li, Zeming and Sun, Jian},
  journal={arXiv preprint arXiv:2107.08430},
  year={2021}
}

著者によるgithub.com/Megvii-BaseDetection/YOLOX#cite-yoloxの引用ブロックからコピーしています。

LibreYOLO v1.5.0で検証済みです。このページのサポート表、チェックポイント、ベンチマーク値は手作業で記述したものではなく、リリース済みライブラリと公開済みの重みから生成されています。