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.
- Ліцензії
- Код: 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-адреса,# індекс вебкамери, потік 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 перевіряє це до початку запуску й називає найближчі дійсні розміри.
Датасети, аугментацію, кілька GPU та системи журналювання описано на сторінці навчання.
Валідація
Метод val() повертає словник ключів metrics/ із точністю, повнотою, mAP 50
і mAP 50-95, виміряними для будь-якого датасету у форматі, на якому виконувалося
навчання.
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# Вбудований 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 ціле число або (висота, ширина). Типовим є нативний# розмір контрольної точки.# batch ціле число, типово 1.# half логічне значення, експорт у FP16. Типово False.# int8 логічне значення, експорт у INT8. Типово False. Потрібен `data`.# data шлях до YAML-файлу датасету для калібрування int8.# fraction число з рухомою комою, частка калібрувальної вибірки. Типово 1.0.# dynamic логічне значення, динамічні осі. Типово True.# simplify логічне значення, спрощення графа ONNX. Типово True.# opset ціле число, opset ONNX. Якщо не задано, вибирається за сімейством.# device рядок, пристрій трасування. Типовим є пристрій моделі.# output_path рядок, типовою є назва, утворена з контрольної точки.# verbose логічне значення, типово False.# allow_download_scripts логічне значення, типово 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.