1.5.0

roboflow/rf-detr1.5.0Feb 23, 2026by Borda

AI Summary

Introduces custom augmentations, training loggers (ClearML/MLflow), and synthetic data support.

Key Highlights

  • Custom augmentations via `aug_config` parameter using Albumentations presets.
  • Save augmented training image samples to grids via `save_dataset_grids`.
  • ClearML and MLflow training logger integration.
  • Live progress bar for training and validation phases.
  • New TensorRT export guide documentation.

New Features

  • `aug_config` parameter for custom Albumentations transforms.
  • `save_dataset_grids` option to visualize augmentation pipeline.
  • ClearML logger support.
  • MLflow logger support.
  • Progress bar for training and validation.
  • `device` field added to `TrainConfig`.
  • TensorRT export guide documentation.

Full Release Notes

## 🚀 Added

- **Custom augmentations via Albumentations.** You can now control training augmentations through the `aug_config` parameter in `train()`. Pass a dictionary of Albumentations transforms, choose a built-in named preset, or disable augmentations entirely. Bounding boxes and segmentation masks are automatically transformed alongside images. (#263, #702)

    ```python
    from rfdetr import RFDETRSmall
    from rfdetr.datasets.aug_config import AUG_CONSERVATIVE, AUG_AGGRESSIVE, AUG_AERIAL, AUG_INDUSTRIAL

    model = RFDETRSmall()

    # Use a built-in preset
    model.train(dataset_dir="...", aug_config=AUG_AGGRESSIVE, progress_bar=True)

    # Or define transforms explicitly
    model.train(
        dataset_dir="...",
        aug_config={
            "HorizontalFlip": {"p": 0.5},
            "RandomBrightnessContrast": {"brightness_limit": 0.2, "p": 0.4},
            "GaussianBlur": {"blur_limit": 3, "p": 0.2},
        },
        progress_bar=True,
    )

    # Disable all augmentations
    model.train(dataset_dir="...", aug_config={})
    ```

    | Preset             | Best for                          |
    | ------------------ | --------------------------------- |
    | `AUG_CONSERVATIVE` | Small datasets (under 500 images) |
    | `AUG_AGGRESSIVE`   | Large datasets (2000+ images)     |
    | `AUG_AERIAL`       | Satellite / overhead imagery      |
    | `AUG_INDUSTRIAL`   | Manufacturing / inspection data   |

- **Save augmented training image samples.** Enable `save_dataset_grids=True` in `TrainConfig` to write 3×3 JPEG grids of augmented training and validation images to your output directory before training begins, making it easy to verify your augmentation pipeline without running a full epoch. (#153)

    ```python
    from rfdetr import RFDETRSmall

    model = RFDETRSmall()
    model.train(dataset_dir="...", save_dataset_grids=True, output_dir="output/")
    # Grids are saved to output/:
    #   train_batch0_grid.jpg, train_batch1_grid.jpg, train_batch2_grid.jpg
    #   val_batch0_grid.jpg,   val_batch1_grid.jpg,   val_batch2_grid.jpg
    ```

- **ClearML training logger.** Set `clearml=True` in `TrainConfig` to stream per-epoch metrics directly to your ClearML project. (#520)

    ```python
    from rfdetr import RFDETRSmall

    model = RFDETRSmall()
    model.train(dataset_dir="...", clearml=True)
    ```

- **MLflow training logger.** Set `mlflow=True` in `TrainConfig` to log runs and metrics to MLflow, with support for custom tracking URIs and system metrics. (#109)

    ```python
    from rfdetr import RFDETRSmall

    model = RFDETRSmall()
    model.train(dataset_dir="...", mlflow=True)
    ```

- **Progress bar for training and validation.** A live progress bar now shows batch-level progress during training and validation, and on-screen logs are structured for easier reading. (#204)

- `device` field added to `TrainConfig`, allowing explicit device selection when configuring training programmatically. (#687)

- `ModelConfig` now raises an error on unknown parameters, preventing silent misconfiguration from typos or stale config keys. (#196)

- **TensorRT export guide.** New documentation section covering how to convert an exported ONNX model to a TensorRT engine for maximum inference throughput. (#175)

## 🌱 Changed

- `OPEN_SOURCE_MODELS` constant deprecated in favour of the `ModelWeights` enum for cleaner model weight references. (#696)
- Added MD5 checksum validation for pretrained weight downloads, preventing silent use of corrupted files. (#679)

## 🔧 Fixed

- Fixed Albumentations bool-mask crash that occurred during segmentation training. (#706)
- Fixed `UnboundLocalError` when resuming training from a completed checkpoint. (#707)
- Prevented corruption of `checkpoint_best_total.pth` via atomic checkpoint stripping. (#708)
- Fixed PyTorch 2.9+ compatibility issue with CUDA capability detection. (#686)
- Fixed dtype mismatch error when `use_position_supervised_loss=True`. (#447)
- Fixed inconsistent return values from `build_model`. (#519)
- Fixed `positional_encoding_size` type annotation from `bool` to `int`. (#524)
- Fixed ONNX export `output_names` to include masks when exporting segmentation models. (#402)
- Fixed `num_select` not being correctly updated during segmentation model fine-tuning. (#399)
- Fixed `np.argwhere` → `np.argmax` misuse. (#536)
- Fixed COCO sparse category ID remapping logic for non-contiguous or offset category IDs are correctly handled. (#712)
- Fixed segmentation mask filtering when using aggressive augmentations. (#717)

### 🏆 Contributors

A special welcome to our new contributors and a big thank you to everyone who helped with this release:

* **Panagiotis Moraitis** (@panagiotamoraiti) ([LinkedIn](https://www.linkedin.com/in/p-moraiti/)) – *Custom Albumentations augmentation wrapper*
* **Shubham Rajvanshi** (@shubsraj) ([LinkedIn](https://www.linkedin.com/in/shubham-rajvanshi-36430511b/)) – *Progress bar and structured training logs*
* **Clement** (@CorporalCleg) – *ClearML logger integration*
* **Lakshman** (@lab176344) – *MLflow logger integration*
* **Mattia Di Giusto** (@picjul) ([LinkedIn](https://www.linkedin.com/in/mattia-di-giusto-b17558177)) – *Save augmented training image samples*
* **Juan Cobos** (@juan-cobos) – *`device` field in `TrainConfig`*
* **Ahmed Samir** (@Ahmed-Samir11) – *Error on unknown `ModelConfig` parameters*
* **Dominik Baran** (@Yozer) ([LinkedIn](https://www.linkedin.com/in/dominik-baran/)) – *Fix segmentation mask filtering with aggressive augmentations*
* **Sungchul Kim** (@sungchul2) ([LinkedIn](https://www.linkedin.com/in/sungchul-kim)) – *Fix `num_select` during segmentation fine-tuning*
* **Abdul Mukit** (@Abdul-Mukit) ([LinkedIn](https://www.linkedin.com/in/abdul-mukit-in)) – *Fix ONNX export output names for segmentation*
* **Alarmod** (@Alarmod) – *PyTorch 2.9+ compatibility fix*
* **lixiaolei1982** (@lixiaolei1982) – *Fix `build_model` return values & `positional_encoding_size` type*
* **kawabe-jiw** (@kawabe-jiw) – *Fix dtype mismatch with `use_position_supervised_loss=True`*
* **Andrei Moraru** (@AndreiMoraru123) ([LinkedIn](https://www.linkedin.com/in/andrei-moraru-879593345/)) – *`np.argwhere` → `np.argmax` fix*
* **Niels Teunissen** (@DatSplit) – *TensorRT export documentation*
* **stop1one** (@stop1one) ([LinkedIn](https://www.linkedin.com/in/stop1one/)) – *Stabilize distributed training & test reliability*
* **Jirka Borovec** (@Borda) ([LinkedIn](https://www.linkedin.com/in/jirka-borovec/)) – *Augmentation presets, MD5 weight validation, `ModelWeights` enum, CI/testing infrastructure, docs*