YOLO 버리고 RT-DETR 깔아봤더니 이렇게 됨
객체 탐지 모델을 YOLO에서 RT-DETR로 갈아탔다. Transformer 기반이라 NMS가 없고 추론도 안정적인 편. Python 3.12 환경에서 설치부터 이미지/영상 추론까지 직접 돌려본 후기와 솔직한 단점, 그리고 실제 코드까지 정리했다.
한 일주일 전쯤 사이드 프로젝트에서 YOLO 쓰던 거 RT-DETR로 갈아타볼까 하는 말이 나왔다. 솔직히 처음엔 "YOLO도 충분히 빠른데 굳이?" 싶었음. 근데 며칠 만져보니 생각이 좀 바뀌었어요.
이 글은 RT-DETR(Real-Time DEtection TRansformer) 처음 깔아보는 사람을 위한 실전 노트입니다. CNN 기반 탐지 모델만 써오던 분이라면 한 번 읽어볼 만함.

RT-DETR이 뭐길래?
간단히 말하면 Transformer 기반 객체 탐지 모델이다. YOLO 같은 CNN이 이미지를 작은 패치로 쪼개서 보는 반면, RT-DETR은 전체 이미지를 한 번에 본다. 그래서 멀리 떨어진 픽셀끼리의 관계도 잘 잡아낸다고 함.
근데 진짜 핵심은 NMS(Non-Maximum Suppression)가 없다는 것. 기존 모델은 객체 하나에 박스 여러 개 그어놓고 NMS로 중복 제거했는데, RT-DETR은 처음부터 깔끔한 박스 하나만 뱉어낸다. 객체가 많아져도 추론 시간이 거의 안 늘어나는 게 이게 영상에서 진짜 체감됨.
환경 세팅 (이거 한 번에 안 되면 진짜 짜증남)
저는 conda로 격리된 환경 만들었어요. 기존 환경에 PyTorch 새 버전 깔다가 다른 프로젝트 다 터진 적이 있어서, 이젠 무조건 분리합니다.
# Python 3.12 환경 새로 만들기
conda create -n rtdetr-312 python=3.12
conda activate rtdetr-312
# CUDA 버전 확인 (이거 안 하고 깔다가 30분 날림)
nvcc --version
# CUDA 12.8 기준 PyTorch 설치
pip install torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1 --index-url https://download.pytorch.org/whl/cu128
# Ultralytics 깔면 RT-DETR 바로 쓸 수 있음
pip install ultralytics==8.4.21

여기서 nvcc --version 확인 안 하고 그냥 cu128로 깔았다가 import 단계에서 CUDA 미스매치 떠서 한참 헤맸음. 본인 GPU 드라이버 버전부터 확인하는 게 진짜 정신건강에 좋습니다.
이미지에 한번 돌려보기
테스트는 평범한 차 사진으로. 코드는 어이없을 정도로 짧다.
from ultralytics import RTDETR
import cv2
# Large 모델 - 정확도/속도 밸런스 괜찮음
model = RTDETR("rtdetr-l.pt")
image_path = "car2.jpg"
results = model(image_path, show=True, save=True,
project="d:/temp", name="car2")
cv2.imshow("Original", cv2.imread(image_path))
cv2.waitKey(0)
cv2.destroyAllWindows()
처음 실행하면 모델 가중치 자동으로 다운받음. 32MB 정도. 결과는 기본적으로 runs/detect/predict 아래 저장되는데, 위 코드처럼 project랑 name으로 경로 지정하는 게 나중에 정리하기 편하더라고요.
근데 박스가 진짜 깔끔하게 뽑힘. YOLOv8로 같은 이미지 돌렸을 때보다 박스 잘림이 확실히 적음. 같은 차 한 대에 박스 두 개 겹쳐 그리는 일이 거의 없었어요.

영상 추론은 한 줄로 끝
이건 좀 신기했음. 영상 처리하는데 코드가 진짜 한 줄이다.
video_path = "Birds.mp4"
results = model(video_path, show=True, save=True)
새 떼 영상 돌려봤는데 빠르게 움직이는 객체도 박스가 안 튐. 프레임마다 안정적으로 추적합니다. 객체 수 늘어도 FPS 거의 안 떨어지는 게 NMS 없는 효과 확실히 나오는 부분.
아 참고로 비둘기 영상으로 테스트하다가 우리 집 베란다에 진짜 비둘기가 와서 같이 모니터 쳐다보고 있는 거 좀 웃겼어요. 얘들도 자기 종족 인식하는 건가 싶고. 약간 무서움.

솔직히 단점도 있음
장점만 쓰면 광고 같으니까 직접 겪은 것들 정리.
1. CPU에서는 거의 못 씀
GPU 없는 노트북에서도 한번 돌려봤는데 영상 1초 분량 추론하는 데 5초 넘게 걸림. 실시간은 절대 무리. CPU만 있으면 차라리 YOLO nano가 나아요.
2. Fine-tuning 한국어 자료가 너무 없음
기본 COCO 클래스 외에 커스텀 데이터로 학습시키려면 자료가 진짜 없습니다. YOLO는 한국어 튜토리얼이 넘쳐나는데, RT-DETR은 영어 자료도 정리 잘 안 돼있더라고요. 검색해도 깔끔한 예제가 안 나옴. 어쩔 수 없이 GitHub 이슈 뒤지면서 짜맞춰야 함.
3. Large 모델은 메모리 잡아먹음
VRAM 8GB GPU에서 Large 모델 돌리면서 브라우저 같이 띄우면 OOM 뜸. 가벼운 작업이면 medium 이하 쓰는 게 나을 수도 있어요.
4. 작은 객체는 의외로 YOLO가 나은 경우도 있음
이건 좀 의외였는데, 멀리 있는 진짜 작은 점 같은 객체 잡을 때는 YOLOv8x가 더 정확하게 잡는 케이스도 봤음. 데이터셋이나 클래스에 따라 갈리는 듯. 무조건 RT-DETR이 다 이긴다는 건 아님.
결론: 새 프로젝트면 그냥 RT-DETR 쓰세요
개인적으로는 이미 YOLO로 잘 굴러가는 프로젝트라면 굳이 안 바꿔도 될 듯. 근데 새로 시작하는 거라면 RT-DETR 추천합니다. NMS 없는 게 진짜 편하고, 추론 파이프라인 코드도 더 깔끔해짐. Transformer가 비전 쪽도 먹는 흐름은 어쩔 수 없을 듯.

다음에는 커스텀 데이터셋으로 fine-tuning 하는 글 써보려고 함. 한국어 자료 없어서 답답했던 거 본인이 정리하는 게 빠르겠다 싶어서요. 그리고 ONNX로 export해서 가볍게 배포하는 부분도 한 번 다뤄볼 예정.
댓글
NEXT_PUBLIC_GISCUS_*환경변수 구성 필요)