OpenSource-Hub

rf-detr

라이브러리

roboflow/rf-detr

실시간 객체 탐지, 세그멘테이션 및 키포인트 탐지를 위한 Transformer 모델.

개요

RF-DETR은 DINOv2 비전 Transformer 백본을 기반으로 하는 실시간 객체 탐지 및 인스턴스 분할 모델로, 효율적인 미세 조정을 위해 설계되었으며, COCO에서 최고 수준의 정확도를 달성하고 키포인트 검출 미리보기 기능을 제공합니다. 이 저장소는 훈련 및 배포를 위한 rfdetr Python 패키지를 제공합니다.

README 미리보기

# RF-DETR: Real-Time SOTA Object Detection, Instance Segmentation, and Keypoint Detection\n\n\n\n[](https://badge.fury.io/py/rfdetr) [](https://pypistats.org/packages/rfdetr) [](https://codecov.io/gh/roboflow/rf-detr) [](https://badge.fury.io/py/rfdetr) [](https://github.com/roboflow/rf-detr/blob/main/LICENSE)\n\n[](https://arxiv.org/abs/2511.09554) [](https://huggingface.co/spaces/SkalskiP/RF-DETR) [](https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/how-to-finetune-rf-detr-on-detection-dataset.ipynb) [](https://blog.roboflow.com/rf-detr) [](https://discord.gg/GbfgXGJ8Bk)\n\n\n\n\n\n\n\n---\n\nRF-DETR is a real-time transformer architecture for object detection, instance segmentation, and keypoint detection (preview) developed by Roboflow. Built on a DINOv2 vision transformer backbone, RF-DETR delivers state-of-the-art accuracy and latency trade-offs on [Microsoft COCO](https://cocodataset.org/#home) and [RF100-VL](https://github.com/roboflow/rf100-vl).\n\nRF-DETR uses a DINOv2 vision transformer backbone and supports object detection, instance segmentation, and keypoint detection (preview) in a single, consistent API. The open-source `rfdetr` package and Apache-designated models are released under Apache 2.0, while Plus components (`rfdetr_plus`, including RF-DETR-XL/2XL detection models) are licensed under PML 1.0.\n\nThe published RF-DETR sizes were created with neural architecture search (NAS) — and the same NAS method is now available on the [Roboflow platform](https://app.roboflow.com/), so you can discover the best architecture for your own dataset. Learn more in the [NAS docs](https://docs.roboflow.com/train/neural-architecture-search).\n\nhttps://github.com/user-attachments/assets/add23fd1-266f-4538-8809-d7dd5767e8e6\n\n## Install\n\nTo install RF-DETR, install the `rfdetr` package in a [**Python>=3.10**](https://www.python.org/) environment with `pip`.\n\n```bash\npip install rfdetr\n```\n\n\nInstall from source\n\n\n\nBy 

FAQ (5)

문제 해결
왜 amp_dtype="auto"로 설정하면 Tesla T4 또는 V100에서 RF-DETR 학습이 약 2배 더 느려지나요?

RF-DETR의 기본 amp_dtype="auto" 설정은 bfloat16이 에뮬레이션으로만 지원되는 경우에도 torch.cuda.is_bf16_supported()가 T4/V100 GPU에서 True를 반환하기 때문에 bf16-mixed를 선택합니다. T4(compute capability 7.5)와 V100(7.0)에는 네이티브 bf16 텐서 코어가 없으므로, 에뮬레이션된 bf16은 fp16보다 느립니다.

즉각적인 임시 해결 방법: TrainConfig에서 fp16 mixed precision을 강제로 사용합니다:

config = TrainConfig(
    dataset_dir=dataset_dir,
    amp_dtype="fp16",
)

트레이너가 bf16-mixed가 아닌 16-mixed를 보고하는지 확인하세요. T4에서는 이를 통해 학습 스텝 시간을 대략 443 ms에서 226 ms로 줄이고 메모리 사용량도 낮출 수 있습니다.

올바른 코드 수정 방법은 에뮬레이션 지원 여부 대신 네이티브 bf16 지원 여부를 확인하는 것입니다:

native_bf16 = torch.cuda.is_bf16_supported(including_emulation=False)
precision = "bf16-mixed" if native_bf16 else "16-mixed"

including_emulation 인자가 없는 구형 PyTorch 버전의 경우 compute capability 검사로 대체하고, Ampere 이상의 GPU, 즉 compute capability가 >= (8, 0)인 경우에만 bf16을 사용하세요. T4/V100에서 amp_dtype="bf16"을 명시적으로 설정하는 것은 계속 허용하되, "fp16"을 권장하는 경고를 출력해야 합니다.

원본 Issue #1535
문제 해결
RF-DETR에서 Python을 -O로 실행할 때 BestMetricSingle이 유효하지 않은 'better' 값을 허용하는 이유는 무엇인가요?

Python의 -O/-OO 모드는 assert 문을 제거하므로 BestMetricSingle.__init__()의 유효성 검사가 건너뛰어집니다. src/rfdetr/training/model_ema.py의 assertion을 최적화 모드에서도 실행되는 명시적 검사로 교체하세요:

if better not in {"large", "small"}:
    raise ValueError(
        f"'better' must be either 'large' or 'small', got {better!r}"
    )
self.better = better

임시 해결 방법으로 -O 없이 실행하거나, better가 항상 "large" 또는 "small" 중 하나인지 확인하세요. 수정을 적용하지 않으면 잘못된 값이 나중에 isbetter()가 ValueError: Unexpected value for 'better'를 발생시킬 때까지 실패하지 않을 수 있습니다.

원본 Issue #1575
문제 해결
fp16 혼합 정밀도에서 그래디언트가 clip_max_norm / 65536으로 클리핑될 때 RF-DETR 키포인트 학습이 정체되는 이유는 무엇인가요?

이는 키포인트 모델이 수동 최적화를 사용하기 때문에 키포인트 모델에 영향을 미칩니다. 16-mixed/fp16에서 PyTorch Lightning은 optimizer.step() 시점까지 그래디언트를 GradScaler 계수가 곱해진 상태로 유지하지만, RF-DETR은 언스케일링 전에 이를 클리핑하고 있었습니다. 스케일이 65536인 경우 의도한 클립 값 0.1이 약 1.5e-6이 되어 AdamW 업데이트가 거의 사라지게 됩니다.

해결 방법: PR #1549 / 커밋 8f8d2d77이 포함된 릴리스로 RF-DETR을 업그레이드하세요. 해당 커밋을 직접 설치하려면:

pip install "rfdetr @ git+https://github.com/roboflow/rf-detr.git@8f8d2d77"

코드 수준의 수정은 _step_optimizer에서 수동 그래디언트 클리핑 전에 옵티마이저를 언스케일링하는 것으로, 이는 clip_grad_norm_/clip_grad_value_ 전에 Lightning의 옵티마이저 언스케일링 메서드를 호출하는 것과 동일합니다.

임시 해결 방법:
- Ampere 이상 GPU와 같이 bf16을 네이티브로 지원하는 하드웨어에서 bf16-mixed를 사용하세요.
- 키포인트를 fp32로 학습하세요.
- 업그레이드하기 전까지 MPS, CUDA fp16, T4, V100에서 명시적인 precision="16-mixed" / amp_dtype="fp16" 사용을 피하세요.

디텍션과 세그멘테이션은 자동 최적화를 사용하며, 이 경우 Lightning이 언스케일링 후에 클리핑하므로 영향을 받지 않습니다.

원본 Issue #1536
문제 해결
RF-DETR이 기본 해상도로 checkpoint_best_total.pth를 로드하여 잘못된 바운딩 박스를 생성하는 문제를 해결하는 방법은?

이 문제는 RF-DETR 1.8.0–1.11.0에 영향을 미칩니다. strip_checkpoint()가 checkpoint_best_total.pth에서 model_config를 제거하기 때문에, RFDETR.from_checkpoint()가 resolution=384, num_select=300 또는 dec_layers=2와 같은 클래스 기본값으로 모델을 다시 빌드합니다. 학습된 가중치는 로드되지만 아키텍처가 이와 일치하지 않습니다.

영구적인 해결 방법: checkpoint_best_total.pth에 model_config를 보존하는 수정 사항이 포함된 RF-DETR 릴리스로 업그레이드하거나, 패치된 브랜치를 설치하세요:
pip install -U git+https://github.com/roboflow/rf-detr.git@develop

즉각적인 해결 방법:
1. 제거되지 않은 원본 체크포인트(일반적으로 EMA)를 대신 로드하세요:
RFDETR.from_checkpoint("output/checkpoint_best_ema.pth")
원본 이름은 제거된 체크포인트에 best_total_source로 저장되어 있습니다.
2. 또는 제거된 가중치를 로드하기 전에 기본값이 아닌 모든 아키텍처 인수를 지정하여 모델을 재구성하세요:
RFDETRNano(pretrain_weights="checkpoint_best_total.pth", resolution=224, num_select=50, dec_layers=3, device="cpu")
resolution뿐만 아니라 변경된 모든 아키텍처 값을 전달해야 합니다. num_queries, mask_downsample_ratio, dec_layers 같은 값도 학습 시와 일치해야 하며, 그렇지 않으면 로드가 실패하거나 예측/내보내기 결과가 잘못될 수 있습니다.

원본 Issue #1533
문제 해결
체크포인트가 안티앨리어싱된 이미지로 학습된 경우 업그레이드 후 RF-DETR 예측 정확도 또는 바운딩 박스 드리프트 문제를 어떻게 해결하나요?

이는 predict()가 antialias=False를 하드코딩하기 때문에 RF-DETR 1.9.0–1.10.1에 영향을 미칩니다. 기본 torchvision 백엔드, RF-DETR ≤1.4, 또는 Roboflow 플랫폼의 Resize 전처리로 학습된 모델도 예외가 아니며, 이들은 모두 안티에일리어싱이 적용된 리사이징을 사용합니다.

해결 방법: PR #1525가 포함된 RF-DETR 릴리스로 업그레이드하거나(또는 최신 develop 브랜치를 설치하고) 명시적으로 옵트인하세요:

pip install -U rfdetr
# 또는, 릴리스된 버전에 아직 수정 사항이 포함되지 않은 경우:
pip install "rfdetr @ git+https://github.com/roboflow/rf-detr.git@develop"

result = model.predict(image, antialias=True)

기본값은 호환성을 위해 antialias=False로 유지되므로, 안티에일리어싱이 적용된 체크포인트에는 antialias=True를 전달해야 합니다. 이러한 체크포인트에 대한 테스트에서, 이 방법은 탐지 차이가 전혀 없이 RF-DETR 1.8.3 출력을 재현했습니다.

1.9.0–1.10.1에 대한 우회 방법: predict()를 호출하기 전에 이미지를 직접 미리 리사이즈하세요. PIL bilinear 리샘플링 또는 torchvision.transforms.functional.resize(..., antialias=True)를 사용하여 model.model.resolution으로 리사이즈한 다음, 반환된 박스를 리사이즈된 해상도에서 원본 이미지 크기로 다시 스케일링하세요. 이 방법은 내부 속성에 의존하므로, 업그레이드 후에는 antialias=True로 대체해야 합니다.

원본 Issue #1516