Professional, modular implementation of RT-DETR (Real-Time Detection Transformer) v2 for object detection using Hugging Face Transformers library. This provides an easy-to-use, production-ready solution for training and deploying object detection models on custom datasets.
transformers library for RT-DETRTrainer APIrt-detr-huggingface/
βββ config.py # Configuration module (CONFIGURE THIS!)
βββ dataset.py # COCO dataset loading and validation
βββ trainer.py # Training with HF Trainer
βββ inference.py # Prediction and visualization
βββ utils.py # Utility functions
βββ train.py # Main training script
βββ predict.py # Main inference script
βββ requirements.txt # Dependencies
βββ README.md # This file
# Install dependencies
pip install -r requirements.txt
Your dataset must follow the COCO JSON annotation format:
dataset/
βββ train/
β βββ images/
β β βββ img1.jpg
β β βββ img2.jpg
β β βββ ...
β βββ annotations.json
βββ val/
βββ images/
β βββ ...
βββ annotations.json
{
"images": [
{
"id": 1,
"file_name": "image1.jpg",
"width": 640,
"height": 480
}
],
"annotations": [
{
"id": 1,
"image_id": 1,
"category_id": 1,
"bbox": [x, y, width, height],
"area": 12345,
"iscrowd": 0
}
],
"categories": [
{
"id": 1,
"name": "car"
}
]
}
Important Notes:
bbox format: [x_min, y_min, width, height] (COCO standard)category_id starts from 1 (not 0)python train.py \
--train-images data/train/images \
--train-ann data/train/annotations.json \
--val-images data/val/images \
--val-ann data/val/annotations.json \
--num-classes 3 \
--class-names car truck bus \
--epochs 50 \
--batch-size 8 \
--lr 1e-5
# Save your configuration
python -c "
from config import create_custom_config
config = create_custom_config(
num_classes=3,
class_names=['car', 'truck', 'bus'],
train_images_dir='data/train/images',
train_annotations='data/train/annotations.json',
val_images_dir='data/val/images',
val_annotations='data/val/annotations.json'
)
config.save('my_config.json')
"
# Train with config
python train.py --config my_config.json
python train.py \
--train-images data/train/images \
--train-ann data/train/annotations.json \
--val-images data/val/images \
--val-ann data/val/annotations.json \
--num-classes 5 \
--class-names person car dog cat bird \
--epochs 100 \
--batch-size 16 \
--lr 2e-5 \
--fp16 \
--gradient-accumulation 2 \
--output-dir my_detector \
--verify-dataset
python predict.py \
--model outputs \
--image test.jpg \
--conf-thresh 0.5
# Directory of images
python predict.py \
--model outputs \
--image-dir test_images/ \
--conf-thresh 0.6 \
--output-dir predictions
# Image list file
python predict.py \
--model outputs \
--image-list images.txt \
--save-summary
These parameters must be configured for each new dataset:
from config import create_custom_config
config = create_custom_config(
num_classes=3, # Number of your classes
class_names=['car', 'truck', 'bus'], # Your class names
train_images_dir='data/train/images',
train_annotations='data/train/annotations.json',
val_images_dir='data/val/images',
val_annotations='data/val/annotations.json'
)
Parameters you'll frequently adjust:
# Training duration
config.training.num_epochs = 50 # 50-100 typical
config.training.batch_size = 8 # Adjust based on GPU memory
# Learning
config.training.learning_rate = 1e-5 # 1e-5 to 5e-5 typical
config.training.weight_decay = 1e-4
# Performance
config.training.fp16 = True # Enable mixed precision
config.training.gradient_accumulation_steps = 2 # Effective larger batch
Choose the right RT-DETR model:
# Faster, less accurate
config.model.model_name = "PekingU/rtdetr_r50vd"
# More accurate, slower
config.model.model_name = "PekingU/rtdetr_r101vd"
# Pre-trained on COCO + Objects365 (better transfer learning)
config.model.model_name = "PekingU/rtdetr_r50vd_coco_o365"
config.inference.confidence_threshold = 0.5 # Detection confidence
config.inference.iou_threshold = 0.5 # NMS threshold
config.inference.max_detections = 100 # Max objects per image
Check if your annotations are correctly formatted:
python -c "from dataset import verify_coco_format; verify_coco_format('data/train/annotations.json')"
Generate a template for your images:
from dataset import create_coco_template
create_coco_template(
images_dir='data/images',
output_file='annotations_template.json',
class_names=['car', 'truck', 'bus']
)
Then annotate using tools like:
RT-DETR models available on Hugging Face:
| Model | Backbone | Speed | Accuracy | Use Case |
|---|---|---|---|---|
PekingU/rtdetr_r50vd | ResNet-50 | Fast | Good | Real-time applications |
PekingU/rtdetr_r101vd | ResNet-101 | Medium | Better | Balanced |
PekingU/rtdetr_r50vd_coco_o365 | ResNet-50 | Fast | Best (transfer) | Custom datasets |
# Train vehicle detector
python train.py \
--train-images datasets/vehicles/train/images \
--train-ann datasets/vehicles/train/annotations.json \
--val-images datasets/vehicles/val/images \
--val-ann datasets/vehicles/val/annotations.json \
--num-classes 3 \
--class-names car truck bus \
--epochs 50 \
--batch-size 8 \
--output-dir vehicle_detector
# Run inference
python predict.py \
--model vehicle_detector \
--image-dir test_images/ \
--conf-thresh 0.6
python train.py \
--train-images data/train/images \
--train-ann data/train/annotations.json \
--val-images data/val/images \
--val-ann data/val/annotations.json \
--num-classes 10 \
--class-names person bicycle car motorcycle airplane bus train truck boat "traffic light" \
--epochs 100 \
--batch-size 16 \
--lr 2e-5 \
--fp16 \
--model-name PekingU/rtdetr_r50vd_coco_o365
python train.py \
--config outputs/config.json \
--resume outputs/checkpoint-1000
If you encounter out-of-memory errors:
--batch-size 4--gradient-accumulation 2--fp16--model-name PekingU/rtdetr_r50vd# Low memory configuration
python train.py \
--batch-size 4 \
--gradient-accumulation 4 \
--fp16 \
... # other args
1e-52e-5 to 5e-55e-5 to 1e-4outputs/
βββ checkpoint-100/ # Periodic checkpoints
βββ checkpoint-200/
βββ checkpoint-best/ # Best model
βββ config.json # Saved configuration
βββ trainer_state.json # Training state
βββ training_args.bin # Training arguments
βββ runs/ # TensorBoard logs
predictions/
βββ image1_prediction.jpg # Visualization
βββ image1_predictions.json # Predictions data
βββ image2_prediction.jpg
βββ image2_predictions.json
βββ results_summary.json # Overall summary
{
"image": "test.jpg",
"num_detections": 3,
"boxes": [[x1, y1, x2, y2], ...],
"scores": [0.95, 0.87, 0.76],
"labels": [0, 1, 2],
"class_names": ["car", "truck", "bus"]
}
from config import RTDETRConfig, create_custom_config
from dataset import create_dataloaders
from trainer import load_model_and_processor, train_model
from utils import set_seed
# Create config
config = create_custom_config(
num_classes=3,
class_names=['car', 'truck', 'bus'],
train_images_dir='data/train/images',
train_annotations='data/train/annotations.json',
val_images_dir='data/val/images',
val_annotations='data/val/annotations.json'
)
# Customize
config.training.num_epochs = 100
config.training.batch_size = 16
config.training.fp16 = True
# Set seed
set_seed(config.seed)
# Load model
model, image_processor = load_model_and_processor(config)
# Create datasets
train_dataset, val_dataset = create_dataloaders(config, image_processor)
# Train
trainer = train_model(model, train_dataset, val_dataset, config)
from config import RTDETRConfig
from inference import load_predictor
# Load config
config = RTDETRConfig.load('outputs/config.json')
config.inference.confidence_threshold = 0.7
# Load predictor
predictor = load_predictor('outputs', config)
# Predict
predictions = predictor.predict('test.jpg')
# Visualize
image = predictor.visualize('test.jpg', predictions, 'output.jpg')
# Print results
predictor.print_predictions(predictions)
1. CUDA Out of Memory
# Solution: Reduce batch size and use gradient accumulation
python train.py ... --batch-size 4 --gradient-accumulation 4 --fp16
2. Dataset Not Found
# Solution: Verify paths
python -c "from utils import verify_dataset_paths; from config import RTDETRConfig; config = RTDETRConfig(); verify_dataset_paths(config)"
3. Invalid COCO Format
# Solution: Verify annotations
python -c "from dataset import verify_coco_format; verify_coco_format('annotations.json')"
4. Model Not Loading
# Solution: Check internet connection for downloading pre-trained weights
# Or specify cache directory
python train.py ... --model-name PekingU/rtdetr_r50vd
See requirements.txt for complete list.
RT-DETR (Real-Time Detection Transformer) is a state-of-the-art object detector that:
This is a professional template for RT-DETR training and inference. Feel free to customize for your specific needs.
This project uses Hugging Face Transformers and follows their licensing terms.
Need Help?
config.py for all available parameterspython train.py --help or python predict.py --help for command-line optionsHappy Training! π
2 commits
1 commits
Python
100.0%
Professional, modular implementation of RT-DETR (Real-Time Detection Transformer) v2 for object detection using Hugging Face Transformers library. This provides an easy-to-use, production-ready solution for training and deploying object detection models on custom datasets.
transformers library for RT-DETRTrainer APIrt-detr-huggingface/
βββ config.py # Configuration module (CONFIGURE THIS!)
βββ dataset.py # COCO dataset loading and validation
βββ trainer.py # Training with HF Trainer
βββ inference.py # Prediction and visualization
βββ utils.py # Utility functions
βββ train.py # Main training script
βββ predict.py # Main inference script
βββ requirements.txt # Dependencies
βββ README.md # This file
# Install dependencies
pip install -r requirements.txt
Your dataset must follow the COCO JSON annotation format:
dataset/
βββ train/
β βββ images/
β β βββ img1.jpg
β β βββ img2.jpg
β β βββ ...
β βββ annotations.json
βββ val/
βββ images/
β βββ ...
βββ annotations.json
{
"images": [
{
"id": 1,
"file_name": "image1.jpg",
"width": 640,
"height": 480
}
],
"annotations": [
{
"id": 1,
"image_id": 1,
"category_id": 1,
"bbox": [x, y, width, height],
"area": 12345,
"iscrowd": 0
}
],
"categories": [
{
"id": 1,
"name": "car"
}
]
}
Important Notes:
bbox format: [x_min, y_min, width, height] (COCO standard)category_id starts from 1 (not 0)python train.py \
--train-images data/train/images \
--train-ann data/train/annotations.json \
--val-images data/val/images \
--val-ann data/val/annotations.json \
--num-classes 3 \
--class-names car truck bus \
--epochs 50 \
--batch-size 8 \
--lr 1e-5
# Save your configuration
python -c "
from config import create_custom_config
config = create_custom_config(
num_classes=3,
class_names=['car', 'truck', 'bus'],
train_images_dir='data/train/images',
train_annotations='data/train/annotations.json',
val_images_dir='data/val/images',
val_annotations='data/val/annotations.json'
)
config.save('my_config.json')
"
# Train with config
python train.py --config my_config.json
python train.py \
--train-images data/train/images \
--train-ann data/train/annotations.json \
--val-images data/val/images \
--val-ann data/val/annotations.json \
--num-classes 5 \
--class-names person car dog cat bird \
--epochs 100 \
--batch-size 16 \
--lr 2e-5 \
--fp16 \
--gradient-accumulation 2 \
--output-dir my_detector \
--verify-dataset
python predict.py \
--model outputs \
--image test.jpg \
--conf-thresh 0.5
# Directory of images
python predict.py \
--model outputs \
--image-dir test_images/ \
--conf-thresh 0.6 \
--output-dir predictions
# Image list file
python predict.py \
--model outputs \
--image-list images.txt \
--save-summary
These parameters must be configured for each new dataset:
from config import create_custom_config
config = create_custom_config(
num_classes=3, # Number of your classes
class_names=['car', 'truck', 'bus'], # Your class names
train_images_dir='data/train/images',
train_annotations='data/train/annotations.json',
val_images_dir='data/val/images',
val_annotations='data/val/annotations.json'
)
Parameters you'll frequently adjust:
# Training duration
config.training.num_epochs = 50 # 50-100 typical
config.training.batch_size = 8 # Adjust based on GPU memory
# Learning
config.training.learning_rate = 1e-5 # 1e-5 to 5e-5 typical
config.training.weight_decay = 1e-4
# Performance
config.training.fp16 = True # Enable mixed precision
config.training.gradient_accumulation_steps = 2 # Effective larger batch
Choose the right RT-DETR model:
# Faster, less accurate
config.model.model_name = "PekingU/rtdetr_r50vd"
# More accurate, slower
config.model.model_name = "PekingU/rtdetr_r101vd"
# Pre-trained on COCO + Objects365 (better transfer learning)
config.model.model_name = "PekingU/rtdetr_r50vd_coco_o365"
config.inference.confidence_threshold = 0.5 # Detection confidence
config.inference.iou_threshold = 0.5 # NMS threshold
config.inference.max_detections = 100 # Max objects per image
Check if your annotations are correctly formatted:
python -c "from dataset import verify_coco_format; verify_coco_format('data/train/annotations.json')"
Generate a template for your images:
from dataset import create_coco_template
create_coco_template(
images_dir='data/images',
output_file='annotations_template.json',
class_names=['car', 'truck', 'bus']
)
Then annotate using tools like:
RT-DETR models available on Hugging Face:
| Model | Backbone | Speed | Accuracy | Use Case |
|---|---|---|---|---|
PekingU/rtdetr_r50vd | ResNet-50 | Fast | Good | Real-time applications |
PekingU/rtdetr_r101vd | ResNet-101 | Medium | Better | Balanced |
PekingU/rtdetr_r50vd_coco_o365 | ResNet-50 | Fast | Best (transfer) | Custom datasets |
# Train vehicle detector
python train.py \
--train-images datasets/vehicles/train/images \
--train-ann datasets/vehicles/train/annotations.json \
--val-images datasets/vehicles/val/images \
--val-ann datasets/vehicles/val/annotations.json \
--num-classes 3 \
--class-names car truck bus \
--epochs 50 \
--batch-size 8 \
--output-dir vehicle_detector
# Run inference
python predict.py \
--model vehicle_detector \
--image-dir test_images/ \
--conf-thresh 0.6
python train.py \
--train-images data/train/images \
--train-ann data/train/annotations.json \
--val-images data/val/images \
--val-ann data/val/annotations.json \
--num-classes 10 \
--class-names person bicycle car motorcycle airplane bus train truck boat "traffic light" \
--epochs 100 \
--batch-size 16 \
--lr 2e-5 \
--fp16 \
--model-name PekingU/rtdetr_r50vd_coco_o365
python train.py \
--config outputs/config.json \
--resume outputs/checkpoint-1000
If you encounter out-of-memory errors:
--batch-size 4--gradient-accumulation 2--fp16--model-name PekingU/rtdetr_r50vd# Low memory configuration
python train.py \
--batch-size 4 \
--gradient-accumulation 4 \
--fp16 \
... # other args
1e-52e-5 to 5e-55e-5 to 1e-4outputs/
βββ checkpoint-100/ # Periodic checkpoints
βββ checkpoint-200/
βββ checkpoint-best/ # Best model
βββ config.json # Saved configuration
βββ trainer_state.json # Training state
βββ training_args.bin # Training arguments
βββ runs/ # TensorBoard logs
predictions/
βββ image1_prediction.jpg # Visualization
βββ image1_predictions.json # Predictions data
βββ image2_prediction.jpg
βββ image2_predictions.json
βββ results_summary.json # Overall summary
{
"image": "test.jpg",
"num_detections": 3,
"boxes": [[x1, y1, x2, y2], ...],
"scores": [0.95, 0.87, 0.76],
"labels": [0, 1, 2],
"class_names": ["car", "truck", "bus"]
}
from config import RTDETRConfig, create_custom_config
from dataset import create_dataloaders
from trainer import load_model_and_processor, train_model
from utils import set_seed
# Create config
config = create_custom_config(
num_classes=3,
class_names=['car', 'truck', 'bus'],
train_images_dir='data/train/images',
train_annotations='data/train/annotations.json',
val_images_dir='data/val/images',
val_annotations='data/val/annotations.json'
)
# Customize
config.training.num_epochs = 100
config.training.batch_size = 16
config.training.fp16 = True
# Set seed
set_seed(config.seed)
# Load model
model, image_processor = load_model_and_processor(config)
# Create datasets
train_dataset, val_dataset = create_dataloaders(config, image_processor)
# Train
trainer = train_model(model, train_dataset, val_dataset, config)
from config import RTDETRConfig
from inference import load_predictor
# Load config
config = RTDETRConfig.load('outputs/config.json')
config.inference.confidence_threshold = 0.7
# Load predictor
predictor = load_predictor('outputs', config)
# Predict
predictions = predictor.predict('test.jpg')
# Visualize
image = predictor.visualize('test.jpg', predictions, 'output.jpg')
# Print results
predictor.print_predictions(predictions)
1. CUDA Out of Memory
# Solution: Reduce batch size and use gradient accumulation
python train.py ... --batch-size 4 --gradient-accumulation 4 --fp16
2. Dataset Not Found
# Solution: Verify paths
python -c "from utils import verify_dataset_paths; from config import RTDETRConfig; config = RTDETRConfig(); verify_dataset_paths(config)"
3. Invalid COCO Format
# Solution: Verify annotations
python -c "from dataset import verify_coco_format; verify_coco_format('annotations.json')"
4. Model Not Loading
# Solution: Check internet connection for downloading pre-trained weights
# Or specify cache directory
python train.py ... --model-name PekingU/rtdetr_r50vd
See requirements.txt for complete list.
RT-DETR (Real-Time Detection Transformer) is a state-of-the-art object detector that:
This is a professional template for RT-DETR training and inference. Feel free to customize for your specific needs.
This project uses Hugging Face Transformers and follows their licensing terms.
Need Help?
config.py for all available parameterspython train.py --help or python predict.py --help for command-line optionsHappy Training! π
2 commits
1 commits
Python
100.0%