RF-DETR
密なグリッドではなく固定された物体集合を予測するため、推論時にNMSを必要としない検出Transformerです。LibreYOLOは4つのタスクでRF-DETRをサポートします。
- タスク
- detection, instance segmentation, pose, oriented boxes
- サイズ
- n, s, m, l for detection, pose and oriented boxes; n through xx for segmentation
- インストール
pip install "libreyolo[rfdetr]"- サポートティア
- フラッグシップ、v1.0.0以降。機能はまずここで設計され、GPUで完全に検証されます。
- ライセンス
- コード:MIT、重み:Apache-2.0。商用利用
インストール
RF-DETRには専用の追加パッケージが必要で、バックボーン用のtransformersがインストールされます。
pip install "libreyolo[rfdetr]"推論
重みは初回使用時にHugging Faceからダウンロードされ、ローカルにキャッシュされます。
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreRFDETRs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreRFDETRs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom libreyolo import LibreYOLO model = LibreYOLO("LibreRFDETRs.pt") # ライブラリが受け付ける任意のソース: ファイル フォルダー URL Webカメラ番号# RTSP ストリーム または .streams リストfor result in model.predict("clip.mp4", stream=True, save=True): print(len(result.boxes))返されるResultsオブジェクトはすべてのファミリーに共通するため、別の検出器への切り替えは1行の変更で済みます。confとmax_detはクエリ選択をフィルタリングします。調整するNMSステップはありません。ソース、ストリーミング、結果の処理については推論を参照してください。
バリアント
4つのサイズと、1つのアーキテクチャを共有する4つのタスクがあります。セグメンテーション、姿勢推定、回転バウンディングボックスは異なるヘッドで検出デコーダーを再利用するため、同じ引数を受け取ります。各サイズのパラメータ数は近く、主に入力解像度が異なります。
| チェックポイント | 入力(px) | mAP 50-95 | パラメータ(M) |
|---|---|---|---|
| LibreRFDETRn | 384 | 51.4 | 30.47 |
| LibreRFDETRs | 512 | 55.1 | 32.11 |
| LibreRFDETRm | 576 | 57.4 | 33.69 |
| LibreRFDETRl | 704 | 58.6 | 33.93 |
COCO val2017, 500 images。LibreYOLOベンチマークハーネスで測定し、Vision Analysisで公開しています。そこではハードウェアおよびランタイム別のレイテンシを比較でき、完全な実行記録も確認できます。
学習
4つすべてのタスクで、学習は公開済みチェックポイントから開始します。RF-DETRのネイティブトレーナーが無視する引数の一覧にpretrainedが含まれるため、ここでpretrained=Falseを渡してもランダムに初期化されたモデルにはなりません。
from libreyolo import LibreYOLO model = LibreYOLO("LibreRFDETRs.pt")model.train(data="my-dataset.yaml", epochs=50, imgsz=512, batch=8, lr0=1e-4)libreyolo train model=LibreRFDETRs.pt data=my-dataset.yaml \ epochs=50 imgsz=512 batch=8 lr0=1e-4from libreyolo import LibreYOLO model = LibreYOLO("LibreRFDETRs.pt")model.train(data="my-dataset.yaml", epochs=50, lora=True)libreyolo train model=LibreRFDETRs.pt data=my-dataset.yaml \ epochs=50 device=0,1 batch=-1ここでは、CNN検出器の場合より2つの引数が重要です。Transformer検出器はYOLOモデルが許容する学習率では発散するため、lr0を1e-4以下に保ってください。変更する理由がない限り、imgszはチェックポイントのネイティブ解像度のままにしてください。入力はバックボーンのパッチサイズとウィンドウ数の積で割り切れる必要があります。LibreYOLOは実行開始前にこれを確認し、最も近い有効なサイズを示します。
データセット、データ拡張、マルチGPU、ロガーについては学習を参照してください。
検証
val()は、学習に使用した形式の任意のデータセットで測定した適合率、再現率、mAP 50、mAP 50-95を含むmetrics/キーの辞書を返します。
from libreyolo import LibreYOLO model = LibreYOLO("LibreRFDETRs.pt") # val() はオブジェクトではなく通常の辞書を返すmetrics = model.val(data="my-dataset.yaml", imgsz=512) print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])print(metrics["metrics/precision"], metrics["metrics/recall"])libreyolo val model=LibreRFDETRs.pt data=my-dataset.yaml imgsz=512# 同梱の COCO yaml はダウンロードスクリプトを内包するため# データセットがローカルにない場合は明示的な許可が必要libreyolo val model=LibreRFDETRn.pt data=coco.yaml imgsz=384 \ 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:対応。Runtime parity coverage lives in tests/e2e/test_tensorrt.py. | Detection to OpenVINO:対応。Runtime parity coverage lives in tests/e2e/test_openvino.py. | Detection to Paddle:非対応 | Detection to MNN:対応 | Detection to RKNN:非対応 | Detection to ncnn:非対応 | Detection to TFLite:非対応 | Detection to CoreML:対応。Conversion is available, but runtime parity requires a macOS runner. | Detection to Core AI:対応 |
| Instance segmentation | Instance segmentation to ONNX:対応 | Instance segmentation to TorchScript:対応 | Instance segmentation to ExecuTorch:対応 | Instance segmentation to TensorRT:対応。A published Apache-2.0 trained segmentation checkpoint exports and reloads, but public top-k class membership changes. | Instance segmentation to OpenVINO:対応。After Hungarian query alignment, the converted-runtime element match rate is 69.0%, below the validation bar. | 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:非対応 |
| Pose | Pose to ONNX:対応 | Pose to TorchScript:対応 | Pose to ExecuTorch:対応 | Pose to TensorRT:対応。A published Apache-2.0 trained pose checkpoint exports and reloads, but matched public boxes fall to 0.704 IoU with 41.4-pixel coordinate drift. | Pose to OpenVINO:対応。After Hungarian query alignment, the converted-runtime element match rate is 72.75%, below the validation bar. | Pose to Paddle:非対応 | Pose to MNN:非対応 | Pose to RKNN:非対応 | Pose to ncnn:非対応 | Pose to TFLite:非対応 | Pose to CoreML:非対応 | Pose to Core AI:非対応 |
| Oriented boxes | Oriented boxes to ONNX:対応 | Oriented boxes to TorchScript:対応 | Oriented boxes to ExecuTorch:対応 | Oriented boxes to TensorRT:対応。A deterministic synthetic OBB fixture exports and reloads, but public top-k class membership changes. | Oriented boxes to OpenVINO:対応。After Hungarian query alignment, the converted-runtime element match rate is 91.25%, below the validation bar. | Oriented boxes to Paddle:非対応 | Oriented boxes to MNN:非対応 | Oriented boxes to RKNN:非対応 | Oriented boxes to ncnn:非対応 | Oriented boxes to TFLite:非対応 | Oriented boxes to CoreML:非対応 | Oriented boxes to Core AI:非対応 |
エクスポートした成果物は、ファイルサフィックスに基づいてLibreYOLO()から再度読み込めます。そのため、.onnxまたは.engineファイルはチェックポイントと同様に動作し、同じResultsを返します。LibreYOLOをインストールせず、単独のランタイムでグラフを実行することもサポートされますが、その場合は前処理と後処理を自分で実装する必要があります。
from libreyolo import LibreYOLO model = LibreYOLO("LibreRFDETRs.pt")model.export(format="onnx", imgsz=512)model.export(format="tensorrt", imgsz=512, half=True) # すべての形式で受け付ける引数:## format "onnx" | "torchscript" | "executorch" | "tensorrt"# | "openvino" | "paddle" | "mnn" | "rknn" | "ncnn"# | "tflite" | "coreml" | "coreai".# "engine" は tensorrt の別名で "litert" は tflite の別名# imgsz int または (height, width) デフォルトはチェックポイントの# ネイティブ解像度# batch int デフォルト 1# half bool FP16 でエクスポート デフォルト False# int8 bool INT8 でエクスポート デフォルト False `data` が必要# data int8 の較正に使うデータセット YAML のパス# fraction float 使用する較正セットの割合 デフォルト 1.0# dynamic bool 動的軸 デフォルト True# simplify bool ONNX グラフ簡略化を実行 デフォルト True# opset int ONNX opset 未指定時はファミリーごとに選択# device str トレースに使うデバイス デフォルトはモデルのデバイス# output_path str デフォルトはチェックポイント由来の名前# verbose bool デフォルト False# allow_download_scripts bool デフォルト False ダウンロードが必要な# データセット YAML 内の Python 実行を許可## 一部の形式には RKNN ターゲットプラットフォームなど固有の追加引数がある# それらは各形式のページに記載libreyolo export model=LibreRFDETRs.pt format=onnx imgsz=512libreyolo export model=LibreRFDETRs.pt format=tensorrt imgsz=512 half=Truefrom libreyolo import LibreYOLO # ファクトリーはファイルサフィックスで振り分けるためエクスポート成果物も# 任意のチェックポイントと同様に読み込まれ同じ Results オブジェクトを返すmodel = LibreYOLO("LibreRFDETRs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)import numpy as npimport onnxruntime as ort # グラフを直接実行する場合は前処理と後処理を自分で実装# 接続前にシグネチャを確認session = ort.InferenceSession("LibreRFDETRs.onnx")name = session.get_inputs()[0].nameoutputs = session.run(None, {name: np.zeros((1, 3, 512, 512), dtype=np.float32)}) for meta, array in zip(session.get_outputs(), outputs): print(meta.name, array.shape)チェックポイント
このファミリーで公開されているすべての重みファイルです。
| ファイル | 入力(px) | 重みのライセンス |
|---|---|---|
| Detection | ||
| LibreRFDETRl.pt | 704 | apache-2.0 |
| LibreRFDETRm.pt | 576 | apache-2.0 |
| LibreRFDETRn.pt | 384 | apache-2.0 |
| LibreRFDETRs.pt | 512 | apache-2.0 |
| Instance segmentation | ||
| LibreRFDETRn-seg.pt | 312 | apache-2.0 |
| LibreRFDETRs-seg.pt | 384 | apache-2.0 |
| LibreRFDETRm-seg.pt | 432 | apache-2.0 |
| LibreRFDETRl-seg.pt | 504 | apache-2.0 |
| LibreRFDETRx-seg.pt | 624 | apache-2.0 |
| LibreRFDETRxx-seg.pt | 768 | apache-2.0 |
| Pose | ||
| LibreRFDETRn-pose.pt | apache-2.0 | |
| LibreRFDETRs-pose.pt | apache-2.0 | |
| LibreRFDETRm-pose.pt | apache-2.0 | |
| LibreRFDETRl-pose.pt | apache-2.0 | |
| LibreRFDETRx-pose.pt | 576 | apache-2.0 |
| Oriented boxes | ||
| LibreRFDETRn-obb.pt | 384 | cc-by-4.0 |
| LibreRFDETRs-obb.pt | 512 | cc-by-4.0 |
| LibreRFDETRm-obb.pt | 576 | cc-by-4.0 |
| LibreRFDETRl-obb.pt | 704 | cc-by-4.0 |
上記のすべてのファイルは現在LibreYOLO orgにあり、初回使用時にダウンロードされます。
ライセンス
ダウンロードする特定の重みについて、Hugging Faceリポジトリのライセンスを確認してください。LibreYOLO orgの各チェックポイントにはライセンスが付与されており、同じファミリー内でも常に同一とは限りません。そのリポジトリが正式な情報源です。以下の概要は、このページを最後に検証した時点で適用されていた内容を示します。
これは関連するライセンスの説明であり、法的助言ではありません。商用上重要な場合は、自分でライセンスを読み、専門家の助言を受けてください。
- 原著作物
- RF-DETR, Roboflow
- アップストリームのライセンス
- Apache-2.0
- アップストリームのソース
- github.com/roboflow/rf-detr
- 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.
引用
@inproceedings{robinson2026rfdetr,
title = {RF-DETR: Real-Time Detection Transformer},
author = {Robinson, Isaac and Robicheaux, Peter and Popov, Matvei and Ramanan, Deva and Peri, Neehar},
booktitle = {International Conference on Learning Representations (ICLR)},
year = {2026},
url = {https://arxiv.org/abs/2511.09554}
}著者によるgithub.com/roboflow/rf-detr#citationの引用ブロックからコピーしています。