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で完全に検証されます。
アップストリーム
RoboflowのRF-DETR、Apache-2.0。論文ソース
ライセンス
コード:MIT、重み:Apache-2.0。商用利用
LibreRFDETRs、512 pxでの動画検出。

インストール

RF-DETRには専用の追加パッケージが必要で、バックボーン用のtransformersがインストールされます。

bash
pip install "libreyolo[rfdetr]"

推論

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

Python
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)
CLI
libreyolo predict model=LibreRFDETRs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
動画
from 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行の変更で済みます。confmax_detはクエリ選択をフィルタリングします。調整するNMSステップはありません。ソース、ストリーミング、結果の処理については推論を参照してください。

バリアント

4つのサイズと、1つのアーキテクチャを共有する4つのタスクがあります。セグメンテーション、姿勢推定、回転バウンディングボックスは異なるヘッドで検出デコーダーを再利用するため、同じ引数を受け取ります。各サイズのパラメータ数は近く、主に入力解像度が異なります。

チェックポイント入力(px)mAP 50-95パラメータ(M)
LibreRFDETRn38451.430.47
LibreRFDETRs51255.132.11
LibreRFDETRm57657.433.69
LibreRFDETRl70458.633.93

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

学習

4つすべてのタスクで、学習は公開済みチェックポイントから開始します。RF-DETRのネイティブトレーナーが無視する引数の一覧にpretrainedが含まれるため、ここでpretrained=Falseを渡してもランダムに初期化されたモデルにはなりません。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRFDETRs.pt")model.train(data="my-dataset.yaml", epochs=50, imgsz=512, batch=8, lr0=1e-4)
CLI
libreyolo train model=LibreRFDETRs.pt data=my-dataset.yaml \  epochs=50 imgsz=512 batch=8 lr0=1e-4
LoRA
from libreyolo import LibreYOLO model = LibreYOLO("LibreRFDETRs.pt")model.train(data="my-dataset.yaml", epochs=50, lora=True)
マルチGPU
libreyolo train model=LibreRFDETRs.pt data=my-dataset.yaml \  epochs=50 device=0,1 batch=-1

ここでは、CNN検出器の場合より2つの引数が重要です。Transformer検出器はYOLOモデルが許容する学習率では発散するため、lr01e-4以下に保ってください。変更する理由がない限り、imgszはチェックポイントのネイティブ解像度のままにしてください。入力はバックボーンのパッチサイズとウィンドウ数の積で割り切れる必要があります。LibreYOLOは実行開始前にこれを確認し、最も近い有効なサイズを示します。

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

検証

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

Python
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"])
CLI
libreyolo val model=LibreRFDETRs.pt data=my-dataset.yaml imgsz=512
COCOで検証
# 同梱の COCO yaml はダウンロードスクリプトを内包するため# データセットがローカルにない場合は明示的な許可が必要libreyolo val model=LibreRFDETRn.pt data=coco.yaml imgsz=384 \  allow_download_scripts=True

エクスポート

タスクONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection 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 segmentationInstance 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:非対応
PosePose 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 boxesOriented 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をインストールせず、単独のランタイムでグラフを実行することもサポートされますが、その場合は前処理と後処理を自分で実装する必要があります。

Python
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 ターゲットプラットフォームなど固有の追加引数がある# それらは各形式のページに記載
CLI
libreyolo export model=LibreRFDETRs.pt format=onnx imgsz=512libreyolo export model=LibreRFDETRs.pt format=tensorrt imgsz=512 half=True
エクスポートしたファイルを使う
from libreyolo import LibreYOLO # ファクトリーはファイルサフィックスで振り分けるためエクスポート成果物も# 任意のチェックポイントと同様に読み込まれ同じ Results オブジェクトを返すmodel = LibreYOLO("LibreRFDETRs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)
LibreYOLOを使わない場合
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.pt704apache-2.0
LibreRFDETRm.pt576apache-2.0
LibreRFDETRn.pt384apache-2.0
LibreRFDETRs.pt512apache-2.0
Instance segmentation
LibreRFDETRn-seg.pt312apache-2.0
LibreRFDETRs-seg.pt384apache-2.0
LibreRFDETRm-seg.pt432apache-2.0
LibreRFDETRl-seg.pt504apache-2.0
LibreRFDETRx-seg.pt624apache-2.0
LibreRFDETRxx-seg.pt768apache-2.0
Pose
LibreRFDETRn-pose.ptapache-2.0
LibreRFDETRs-pose.ptapache-2.0
LibreRFDETRm-pose.ptapache-2.0
LibreRFDETRl-pose.ptapache-2.0
LibreRFDETRx-pose.pt576apache-2.0
Oriented boxes
LibreRFDETRn-obb.pt384cc-by-4.0
LibreRFDETRs-obb.pt512cc-by-4.0
LibreRFDETRm-obb.pt576cc-by-4.0
LibreRFDETRl-obb.pt704cc-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の引用ブロックからコピーしています。

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