RTMDet

RTMDetは、グリッド位置ごとにアンカーなしの点ベース事前分布を1つ使い、特徴レベル間で畳み込みを共有するヘッドから予測する1段検出器です。LibreYOLOは物体検出とRTMDet-InsのインスタンスセグメンテーションでRTMDetをサポートします。

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

インストール

RTMDetには基本パッケージ以外の追加パッケージは不要です。

bash
pip install libreyolo

推論

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

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreRTMDets.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreRTMDets.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
インスタンスセグメンテーション
from libreyolo import LibreYOLO, SAMPLE_IMAGE # ファイル名の -seg サフィックスで RTMDet-Ins マスクヘッドを選択するため# task 引数は不要model = LibreYOLO("LibreRTMDets-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)

返されるResultsオブジェクトはすべてのファミリーに共通するため、別の検出器への切り替えは1行の変更で済みます。ファイル名に-segがあるとRTMDet-Insタスクとして自動的に解決され、result.masksにはボックスとともにインスタンスマスクが格納されます。confは信頼度のしきい値、iouはNMSのしきい値を設定します。ソース、ストリーミング、結果の処理については推論を参照してください。

バリアント

tからxまでの5つのサイズが、共通の入力解像度で1つのアーキテクチャを共有します。このファミリーにはベンチマーク表がありません。下の表にあるチェックポイントのファイルサイズで各サイズを比較してください。

学習

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

検出はtrain()で学習します。QualityFocalLoss、GIoU、DynamicSoftLabelAssignerの各コンポーネントはアップストリームのmmdetectionから移植されています。順伝播とONNXエクスポートはビット単位で同等で、後処理はval2017のサブセット上でmmdetの出力と0.001 mAP以内で一致します。

train()自体のdocstringによると、小規模データセットでのファインチューニング収束、ゼロからの学習による論文との一致、マルチGPUの動作、キャッシュされたMosaicとMixUpのスループット、アップストリームの厳密な2段パイプライン切り替え、正規化パラメータとバイアスパラメータの減衰をゼロにするパラメータ別weight decay上書きは未検証です。

RTMDet-Insには学習経路がありません。-segチェックポイントで、またはtask="segment"を指定してtrain()を呼び出すとNotImplementedErrorが発生します。インスタンスセグメンテーションは推論と検証だけをサポートします。

train()pretrained引数も受け付けますが、その値がメソッド内で読み取られることはありません。学習は常にモデルの構築時に使った重みから続行されるため、pretrained=Falseを指定してもネットワークは再初期化されません。

そのほかを変更しなければ、トレーナーはAdamW、lr0=0.004weight_decay=0.05で300エポック実行します。コサインスケジュール上で1エポックのウォームアップを行い、最後の20エポックではMosaicとMixUpを無効にします。

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

検証

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

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreRTMDets.pt data=my-dataset.yaml
インスタンスセグメンテーション
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # マスクprint(metrics["metrics/mAP50-95(B)"])   # ボックス

-segチェックポイントを対象にすると、通常のmetrics/mAP50-95キーにはマスクのスコアが格納されます。同じ実行で(B)のボックスと(M)のマスクも報告されるため、1回の処理で両方を取得できます。

エクスポート

タスク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:対応
Instance segmentationInstance segmentation to ONNX:非対応Instance segmentation to TorchScript:非対応Instance segmentation to ExecuTorch:非対応Instance segmentation to TensorRT:非対応Instance segmentation to OpenVINO:非対応Instance segmentation to Paddle:非対応Instance segmentation to MNN:非対応Instance segmentation to RKNN:非対応Instance segmentation to ncnn:非対応Instance segmentation to TFLite:非対応Instance segmentation to CoreML:非対応Instance segmentation to Core AI:非対応

検出はほとんどの形式にエクスポートできますが、インスタンスセグメンテーションは現在どの形式にもエクスポートできません。上のマトリクスはこの違いを反映しています。エクスポートした検出成果物は、ファイルサフィックスに基づいてLibreYOLO()から再度読み込めます。そのため、.onnxまたは.engineファイルはチェックポイントと同様に動作し、同じResultsを返します。LibreYOLOをインストールせず、単独のランタイムでグラフを実行することもサポートされますが、その場合は前処理と後処理を自分で実装する必要があります。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreRTMDets.pt format=onnx imgsz=640libreyolo export model=LibreRTMDets.pt format=tensorrt imgsz=640 half=True
エクスポートしたファイルを使う
from libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリーはファイルサフィックスで振り分けるためエクスポート成果物も# 任意のチェックポイントと同様に読み込まれ同じ Results オブジェクトを返すmodel = LibreYOLO("LibreRTMDets.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

チェックポイント

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

ファイル入力(px)重みのライセンス
Detection
LibreRTMDett.pt640apache-2.0
LibreRTMDets.pt640apache-2.0
LibreRTMDetm.pt640apache-2.0
LibreRTMDetl.pt640apache-2.0
LibreRTMDetx.pt640apache-2.0
Instance segmentation
LibreRTMDett-seg.pt640apache-2.0
LibreRTMDets-seg.pt640apache-2.0
LibreRTMDetm-seg.pt640apache-2.0
LibreRTMDetl-seg.pt640apache-2.0
LibreRTMDetx-seg.pt640apache-2.0

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

ライセンス

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

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

原著作物
RTMDet, OpenMMLab
アップストリームのライセンス
Apache-2.0
アップストリームのソース
github.com/open-mmlab/mmdetection
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. The published RTMDet and RTMDet-Ins checkpoints are converted from mmdetection's own COCO weights, trained by OpenMMLab under the same license.

引用

@misc{lyu2022rtmdet,
      title={RTMDet: An Empirical Study of Designing Real-Time Object Detectors},
      author={Chengqi Lyu and Wenwei Zhang and Haian Huang and Yue Zhou and Yudong Wang and Yanyi Liu and Shilong Zhang and Kai Chen},
      year={2022},
      eprint={2212.07784},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

著者によるgithub.com/open-mmlab/mmdetection/tree/main/configs/rtmdet#citationの引用ブロックからコピーしています。

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