RF-DETR

Трансформер для детекции, который предсказывает фиксированный набор объектов вместо плотной сетки, поэтому на инференсе ему не нужен NMS. LibreYOLO поддерживает его для четырёх задач.

Задачи
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.
Исходный проект
RF-DETR от Roboflow, Apache-2.0. Статья, исходный код
Лицензии
Код: MIT, веса: Apache-2.0. Коммерческое использование
LibreRFDETRs, детекция на видео при 512 px.

Установка

RF-DETR требует собственного extra, который подтягивает 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,# индекс веб-камеры, RTSP-поток или список .streamsfor result in model.predict("clip.mp4", stream=True, save=True):    print(len(result.boxes))

Возвращаемый объект Results — тот же, что возвращает любое семейство, поэтому замена на другой детектор занимает одну строку. conf и max_det фильтруют отбор запросов; шага NMS, который надо было бы настраивать, здесь нет. Про источники, стриминг и обработку результатов см. предсказание.

Варианты

Четыре размера и четыре задачи на одной архитектуре: сегментация, оценка позы и повёрнутые рамки переиспользуют декодер детекции с другой головой, поэтому принимают те же аргументы. По числу параметров размеры близки и различаются в основном входным разрешением.

ЧекпойнтВход (пикс.)mAP 50-95Параметры (млн)
LibreRFDETRn38451.430.47
LibreRFDETRs51255.132.11
LibreRFDETRm57657.433.69
LibreRFDETRl70458.633.93

COCO val2017, 500 images. Измерено системой бенчмарков LibreYOLO и опубликовано на Vision Analysis, где сравниваются задержки на разном оборудовании и в разных средах выполнения и хранятся полные записи запусков.

Обучение

Обучение начинается с опубликованного чекпойнта — для всех четырёх задач. 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)
Multi-GPU
libreyolo train model=LibreRFDETRs.pt data=my-dataset.yaml \  epochs=50 device=0,1 batch=-1

Здесь два аргумента важнее, чем в CNN-детекторе. Держите lr0 на 1e-4 или ниже: трансформерные детекторы расходятся при той скорости обучения, которую модель YOLO переносит спокойно. Оставьте imgsz на родном разрешении чекпойнта, если нет причины его менять. Вход должен нацело делиться на размер патча бэкбона, умноженный на число окон; LibreYOLO проверяет это до старта запуска и называет ближайшие допустимые размеры.

Про датасеты, аугментацию, multi-GPU и логгеры см. обучение.

Валидация

val() возвращает словарь с ключами metrics/, покрывающими точность, полноту, mAP 50 и mAP 50-95, измеренные на любом датасете в том формате, на котором вы обучались.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRFDETRs.pt") # val() возвращает обычный dict, а не объект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
# Во встроенный yaml для COCO зашит скрипт скачивания, поэтому нужно# явное разрешение, если датасет ещё не лежит локально.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 или (высота, ширина). По умолчанию — родное#             разрешение чекпойнта.#   batch     int, по умолчанию 1.#   half      bool, экспорт в FP16. По умолчанию False.#   int8      bool, экспорт в INT8. По умолчанию False. Нужен `data`.#   data      путь к YAML датасета, по нему калибруется int8.#   fraction  float, доля этого калибровочного набора. По умолчанию 1.0.#   dynamic   bool, динамические оси. По умолчанию True.#   simplify  bool, упрощение графа ONNX. По умолчанию True.#   opset     int, opset ONNX. Если не задан, выбирается по семейству.#   device    str, устройство для трассировки. По умолчанию — устройство#             модели.#   output_path  str, по умолчанию имя, производное от чекпойнта.#   verbose   bool, по умолчанию False.#   allow_download_scripts  bool, по умолчанию False. Разрешает#             встроенный Python в YAML датасета, который нужно скачать.## Некоторые форматы принимают собственные дополнительные аргументы,# например целевую платформу 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)

Чекпойнты

Все опубликованные файлы весов этого семейства.

ФайлВход (пикс.)Лицензия весов
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 и скачиваются при первом использовании.

Лицензирование

Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.

Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.

Оригинальная работа
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. Таблицы поддержки, чекпойнты и результаты бенчмарков на этой странице сгенерированы из выпущенной библиотеки и опубликованных весов, а не написаны вручную.