(models-rfdetr)= # RF-DETR This page describes how to use the [RF-DETR models](https://github.com/roboflow/rf-detr) with LightlyTrain. ```{important} We have observed difficulties with the installation of RF-DETR in Python>=3.12, since it requires manual builds of some dependencies with `cmake`. We therefore strongly recommend using Python 3.9, 3.10 or 3.11. ``` You can install the required packages by running: ```bash pip install "lightly-train[rfdetr]" ``` ## Pretrain and Fine-tune an RF-DETR Model Pretraining RF-DETR models with LightlyTrain is straightforward. Below we will provide the minimum scripts for pretraining and fine-tuning using `rfdetr/rf-detr-base` as an example: ### Pretrain ````{tab} Python ```python import lightly_train if __name__ == "__main__": lightly_train.train( out="out/my_experiment", # Output directory. data="my_data_dir", # Directory with images. model="rfdetr/rf-detr-base", # Pass the RF-DETR model. ) ``` ```` ````{tab} Command Line ```bash lightly-train train out="out/my_experiment" data="my_data_dir" model="rfdetr/rf-detr-base" ```` ### Fine-tune You can fine-tune the exported model with `rfdetr` directly. For now, `rfdetr` only supports datasets in COCO JSON format. Below we will provide the minimum scripts for fine-tuning using the [Coconuts dataset from Roboflow](https://universe.roboflow.com/traindataset/coconuts-plj8h/dataset/1/download/coco) in COCO JSON format: ```python # fine_tune.py from rfdetr import RFDETRBase from roboflow import Roboflow if __name__ == "__main__": model = RFDETRBase(pretrain_weights="out/my_experiment/exported_models/exported_last.pt") rf = Roboflow(api_key="your_roboflow_api_key") project = rf.workspace("traindataset").project("coconuts-plj8h") version = project.version(1) dataset = version.download("coco") model.train(dataset_dir=dataset.location) ``` which can be run with `rfdetr`'s DDP training: ```bash python -m torch.distributed.launch --nproc_per_node=8 --use_env fine_tune.py ``` ## Supported Models The following RF-DETR models are supported: - `rfdetr/rf-detr-base` - `rfdetr/rf-detr-base-2` (a less converged model that may be better for finetuning but worse for inference) - `rfdetr/rf-detr-large`