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. Коммерческое использование
Установка
RF-DETR требует собственного extra, который подтягивает 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,# индекс веб-камеры, RTSP-поток или список .streamsfor result in model.predict("clip.mp4", stream=True, save=True): print(len(result.boxes))Возвращаемый объект Results — тот же, что возвращает любое семейство, поэтому
замена на другой детектор занимает одну строку. conf и max_det фильтруют
отбор запросов; шага NMS, который надо было бы настраивать, здесь нет. Про
источники, стриминг и обработку результатов см. предсказание.
Варианты
Четыре размера и четыре задачи на одной архитектуре: сегментация, оценка позы и повёрнутые рамки переиспользуют декодер детекции с другой головой, поэтому принимают те же аргументы. По числу параметров размеры близки и различаются в основном входным разрешением.
| Чекпойнт | Вход (пикс.) | mAP 50-95 | Параметры (млн) |
|---|---|---|---|
| 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, где сравниваются задержки на разном оборудовании и в разных средах выполнения и хранятся полные записи запусков.
Обучение
Обучение начинается с опубликованного чекпойнта — для всех четырёх задач.
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-детекторе. Держите lr0 на 1e-4 или
ниже: трансформерные детекторы расходятся при той скорости обучения, которую
модель YOLO переносит спокойно. Оставьте imgsz на родном разрешении
чекпойнта, если нет причины его менять. Вход должен нацело делиться на размер
патча бэкбона, умноженный на число окон; LibreYOLO проверяет это до старта
запуска и называет ближайшие допустимые размеры.
Про датасеты, аугментацию, multi-GPU и логгеры см. обучение.
Валидация
val() возвращает словарь с ключами metrics/, покрывающими точность, полноту,
mAP 50 и mAP 50-95, измеренные на любом датасете в том формате, на котором вы
обучались.
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"])libreyolo val model=LibreRFDETRs.pt data=my-dataset.yaml imgsz=512# Во встроенный yaml для COCO зашит скрипт скачивания, поэтому нужно# явное разрешение, если датасет ещё не лежит локально.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 или (высота, ширина). По умолчанию — родное# разрешение чекпойнта.# 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. Они описаны на странице каждого# формата.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)Чекпойнты
Все опубликованные файлы весов этого семейства.
| Файл | Вход (пикс.) | Лицензия весов |
|---|---|---|
| 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 и скачиваются при первом использовании.
Лицензирование
Проверяйте лицензию в репозитории конкретных весов на 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.