RT-DETR¶
This page describes how to use the official RT-DETR implementation with LightlyTrain.
Note
RT-DETR is not a pip-installable Python package. For this reason, RT-DETR is not fully integrated with LightlyTrain and has to be installed manually.
Supported Models¶
The following RT-DETR model variants are supported:
rtdetr_r18vd
rtdetr_r34vd
rtdetr_r50vd
rtdetr_r50vd_m
rtdetr_r101vd
RT-DETR Installation¶
To install RT-DETR for use with LightlyTrain, first clone the repository:
git clone https://github.com/lyuwenyu/RT-DETR.git
We assume that all commands are executed from the RT-DETR/rtdetr_pytorch
directory
unless otherwise stated:
cd RT-DETR/rtdetr_pytorch
Next, create a Python environment using your preferred tool and install the required dependencies. Some dependencies are fixed to specific versions to ensure compatibility with RT-DETR:
pip install lightly-train -r requirements.txt "numpy==1.26" "pytorch-lightning==2.1.0" pycocotools
Pretrain an RT-DETR Model¶
Run the following script to pretrain an RT-DETR model. The script must either
be executed from inside the RT-DETR/rtdetr_pytorch
directory or the
RT-DETR/rtdetr_pytorch
directory must be added to the Python path.
# pretrain_rtdetr.py
from typing import Dict
import torch
from torch import Tensor
from torch.nn import AdaptiveAvgPool2d, Module
import lightly_train
from src.core import YAMLConfig
class RTDETRModelWrapper(Module):
def __init__(self, model: Module):
super().__init__()
self._model = model
self._pool = AdaptiveAvgPool2d((1, 1))
def forward_features(self, x: Tensor) -> Dict[str, Tensor]:
features = self._model.backbone(x)[-1]
return {"features": features}
def forward_pool(self, x: Dict[str, Tensor]) -> Dict[str, Tensor]:
return {"pooled_features": self._pool(x["features"])}
def feature_dim(self) -> int:
return self._model.backbone.out_channels[-1]
if __name__ == "__main__":
# Load the RT-DETR model
# Change the config file to the desired RT-DETR model
config = YAMLConfig("configs/rtdetr/rtdetr_r50vd_6x_coco.yml")
model = config.model
# Pretrain the model
wrapped_model = RTDETRModelWrapper(model)
lightly_train.train(
out="out/my_experiment",
model=wrapped_model,
data="./dataset/coco/train2017", # Replace with your dataset path.
)
# Save the pretrained model for fine-tuning
torch.save(model.state_dict(), "out/my_experiment/pretrained_model.pt")
Fine-Tune an RT-DETR Model¶
After the pretraining completes, the model can be fine-tuned using the default RT-DETR training script by providing the path to the pretrained model:
# Training on single-gpu
export CUDA_VISIBLE_DEVICES=0
python tools/train.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml --resume out/my_experiment/pretrained_model.pt
See the RT-DETR repository for more information on how to fine-tune a model.