1.8.2
roboflow/rf-detr1.8.2Jun 26, 2026by Borda
AI Summary
A feature release adding YOLO pose support and changing the default keypoint schema to active-first. It introduces `amp_dtype` control and unblocks TensorRT export.
Key Highlights
- YOLO pose keypoint dataset support (load directly without conversion)
- Active-first keypoint schema default (Person is now class_id=0)
- `amp_dtype` field on `TrainConfig` for explicit fp16/bf16 control
- TensorRT ONNX export now works for all model variants
Breaking Changes
- Keypoint class IDs shift to zero-based (Active-first schema default)
New Features
- YOLO pose keypoint datasets
- `amp_dtype` field on `TrainConfig`
- TensorRT ONNX export
- New cookbooks for segmentation and latency benchmarking
Full Release Notes
## 📋 Summary
RF-DETR 1.8.2 rounds out the keypoint detection feature set with **YOLO pose dataset support** (load Ultralytics YOLO pose datasets directly for training, no conversion needed), an **active-first keypoint schema default** that makes class IDs zero-based by default, and a new **`amp_dtype`** field for explicit fp16/bf16 mixed-precision control. Two new cookbooks land: instance segmentation fine-tuning and an inference latency benchmark. On the reliability side, a long-standing bug in `from_checkpoint()` that silently inflated `num_classes` by one is fixed, TensorRT ONNX export is unblocked for all model variants, and several inference correctness issues are resolved. **Keypoint users**: the default schema changed from background-first `[0, 17]` to active-first `[17]`. Checkpoint weights load unchanged; class IDs in inference output shift — see the migration guide below.
## ✨ Spotlights
### YOLO pose keypoint datasets
Train keypoint models directly from Ultralytics YOLO pose datasets. Point `dataset_dir` at any dataset folder with a `data.yaml` containing `kpt_shape` — schema, keypoint names, and OKS sigmas are inferred automatically.
```python
from rfdetr import RFDETRKeypointPreview
from rfdetr.config import KeypointTrainConfig
model = RFDETRKeypointPreview()
model.train(
KeypointTrainConfig(
dataset_dir="path/to/yolo-pose-dataset",
epochs=50,
)
)
```
### Active-first keypoint schema — cleaner class IDs
Person is now at `class_id=0` instead of `class_id=1`. Legacy checkpoints load without any changes — RF-DETR auto-detects the schema at load time. New schema utilities make conversion explicit when needed:
```python
from rfdetr.utilities.keypoints import _is_bg_first_schema, _to_active_first
if _is_bg_first_schema(schema):
schema = _to_active_first(schema) # [0, 17] → [17]
```
### `amp_dtype` on `TrainConfig` — pin fp16 or bf16
Stop relying on device auto-detection. Set the AMP dtype explicitly:
```python
from rfdetr.config import TrainConfig
config = TrainConfig(dataset_dir="...", amp_dtype="fp16") # force fp16
config = TrainConfig(dataset_dir="...", amp_dtype="bf16") # force bf16
config = TrainConfig(dataset_dir="...", amp_dtype="auto") # default, device heuristic
```
### TensorRT ONNX export — now works
`spatial_shapes` in `Transformer.forward()` is now built from symbolic Shape ops, removing the `ScatterND` node that TensorRT rejected with `"IScatterLayer cannot be used to compute a shape tensor"`. All RF-DETR variants can now export to TensorRT engines:
```bash
# After export(format="onnx"):
trtexec --onnx=model.onnx --saveEngine=model.engine
```
### New cookbooks
Two new end-to-end notebooks:
- **Instance segmentation fine-tuning** (`docs/cookbooks/fine-tune_segmentation.ipynb`) — `RFDETRSegSmall` across seven diverse segmentation datasets with training metrics and sample previews.
- **Inference latency benchmark** (`docs/cookbooks/inference-latency-benchmark.ipynb`) — reproducible CPU/GPU throughput measurements across model sizes.
## 🔄 Migration guide
### 🌱 Changed: keypoint class IDs shift to zero-based — checkpoint weights unaffected
Affects `RFDETRKeypointPreview` / `RFDETRKeypointPreviewConfig` users.
**Checkpoint weights load unchanged** — RF-DETR auto-detects the schema from the checkpoint and aligns it at load time. No re-training or weight migration needed.
**What breaks**: class IDs in inference output shift. Person moves from `class_id=1` to `class_id=0`. Post-processing code that hardcodes class IDs must update:
```python
# Before (background-first [0, 17]: person was at class_id=1)
class_name = "person" if detection.class_id == 1 else "other"
# After (active-first [17]: person is at class_id=0)
class_name = "person" if detection.class_id == 0 else "other"
```
**Schema-agnostic alternative** (works with either schema):
```python
class_name = detection.data["class_name"]
```
**To keep the legacy schema**, pass `num_keypoints_per_class` at construction time:
```python
config = RFDETRKeypointPreviewConfig(num_keypoints_per_class=[0, 17])
```
## 📝 Notable changes
### 🚀 Added
- **YOLO pose keypoint dataset support** — load Ultralytics YOLO pose datasets (`.yaml` with `kpt_shape`) directly for keypoint training. Schema inferred via `infer_yolo_keypoint_schema`. ([#1156](https://github.com/roboflow/rf-detr/pull/1156))
- **`amp_dtype` on `TrainConfig`** — pin mixed-precision dtype to `"auto"` / `"bf16"` / `"fp16"`. Invalid values degrade to `"auto"` with a `UserWarning`. ([#1143](https://github.com/roboflow/rf-detr/pull/1143))
- **Keypoint schema utilities** — `is_bg_first_schema`, `to_active_first`, `to_bg_first`, `schemas_semantically_equal` in `rfdetr.utilities.keypoints` (re-exported from `rfdetr.utilities`). ([#1160](https://github.com/roboflow/rf-detr/pull/1160))
- **Instance segmentation fine-tuning cookbook** (`docs/cookbooks/fine-tune_segmentation.ipynb`). ([#1159](https://github.com/roboflow/rf-detr/pull/1159))
- **Inference latency benchmark cookbook** (`docs/cookbooks/inference-latency-benchmark.ipynb`). ([#1152](https://github.com/roboflow/rf-detr/pull/1152))
### 🌱 Changed
- **Default `num_keypoints_per_class` changed from `[0, 17]` to `[17]`** in `RFDETRKeypointPreviewConfig`. Checkpoint weights load unchanged — RF-DETR auto-aligns the schema at load time. Class IDs in inference output shift (person moves from `class_id=1` to `class_id=0`); post-processing code that hardcodes class IDs must update. ([#1160](https://github.com/roboflow/rf-detr/pull/1160))
### 🔧 Fixed
- **`from_checkpoint()` now reads the correct `num_classes`** — was `class_embed.weight.shape[0]` (including background), now `shape[0] - 1`. Prevented shape mismatches and silently added an extra output class to every fine-tuned checkpoint load. `BestModelCallback._serialize_model_config` also fixed. ([#1158](https://github.com/roboflow/rf-detr/pull/1158))
- **TensorRT ONNX export unblocked** — `spatial_shapes` built from symbolic Shape ops, removing the `ScatterND` that blocked TensorRT compilation. ([#1155](https://github.com/roboflow/rf-detr/pull/1155))
- **`HungarianMatcher` now respects configured `focal_alpha`** — was hardcoded to `0.25`, misaligning bipartite matching cost with the actual focal loss. ([#1147](https://github.com/roboflow/rf-detr/pull/1147))
- **Keypoint inference `class_name` corrected** — predictions now carry the right class name for keypoint models. ([#1151](https://github.com/roboflow/rf-detr/pull/1151))
- **`predict()` re-asserts eval mode** — prevents silent train-mode inference for unoptimized models after the first call. ([#1146](https://github.com/roboflow/rf-detr/pull/1146))
- **TFLite inference** — preprocessing and mask decoder now match PyTorch `predict()`. ([#1131](https://github.com/roboflow/rf-detr/pull/1131))
- **Python version mismatch in dependency overrides** resolved. ([#1137](https://github.com/roboflow/rf-detr/pull/1137))
---
## 🏆 Contributors
Thanks to everyone who contributed to this release:
- **Jirka Borovec** ([@Borda](https://github.com/Borda), [LinkedIn](https://linkedin.com/in/jirka-borovec)) — active-first keypoint schema, YOLO pose support, checkpoint restore fix, segmentation + latency cookbooks
- **Anatoly Ryabchenko** ([@ryabchenko-a](https://github.com/ryabchenko-a)) — `amp_dtype` field for explicit AMP dtype control
- **Ruben** ([@RubenHaisma](https://github.com/RubenHaisma)) — `HungarianMatcher` focal_alpha fix and `predict()` eval-mode re-assertion
- **Isaac Robinson** ([@isaacrob](https://github.com/isaacrob), [LinkedIn](https://www.linkedin.com/in/robinsonish/)) — TensorRT-safe ONNX export via symbolic Shape ops
- **Stefan Schneider** ([@hinogi](https://github.com/hinogi)) — dataset type refactoring and Python dependency fix
- **Omkar Kabde** ([@omkar-334](https://github.com/omkar-334), [LinkedIn](https://www.linkedin.com/in/omkar-kabde/)) — TFLite inference preprocessing and mask decoder fix
---
**Full changelog**: https://github.com/roboflow/rf-detr/compare/1.8.1...v1.8.2