본문 바로가기
ai

DETR 모델? (feat. 초보자용 설명)

by 거대웅 TitanBear 2025. 11. 8.

1. 프롤로그: "틀린 그림 찾기"와 AI

"사진 속에 고양이, 자동차, 사람이 어디 있나요?"

우리에게 이 질문은 매우 간단한 '틀린 그림 찾기' 놀이처럼 들릴 수 있습니다. 하지만 컴퓨터에게 이 질문은 수십 년간 이어진 거대한 난제였습니다. 컴퓨터가 이미지 속 특정 객체의 위치와 종류를 알아맞히는 이 기술을 '객체 탐지(Object Detection)'라고 부릅니다.

이 기술은 자율주행 자동차가 보행자를 인식하고, CCTV가 이상 행동을 감지하며, 의료 AI가 엑스레이 사진에서 병변을 찾아내는 모든 현대 AI 서비스의 시작점입니다.

하지만 오랫동안 컴퓨터는 이 문제를 매우 '무식하고' 복잡한 방식으로 풀어왔습니다. 바로 '앵커 박스(Anchor Box)'라는 수천 개의 '추측'에 의존하는 방식이었죠. 오늘 소개할 DETR은 이 낡은 방식을 완전히 뒤엎은 혁신적인 모델입니다.

2. DETR 이전의 시대: 수천 개의 '추측' 상자 (앵커 박스의 한계)

DETR의 혁신성을 이해하려면, 먼저 기존 방식(YOLO, Faster R-CNN 등 유명한 모델들)이 가졌던 근본적인 한계를 알아야 합니다.

앵커 박스란?

(비유) AI에게 이미지 속 고양이를 찾으라고 시키면, 기존 모델들은 일단 이미지 위에 수천, 수만 개의 '미리 만들어진 추측 상자(앵커 박스)'를 격자무늬로 빽빽하게 겹쳐 놓습니다. 그리고 이 수만 개의 상자 하나하나에 대해 "이 안에 물체가 있나? 있다면 얼마나 수정해야 하나?"를 판단합니다.

문제점: 너무 많은 '중복'과 '후처리'

이 방식의 가장 큰 문제는, 하나의 객체(예: 고양이 한 마리)에 수십 개의 긍정적인 '추측' 상자가 동시에 겹치게 된다는 것입니다. AI가 "이것도 고양이 같고, 저것도 고양이 같다"며 수십 개의 상자를 쏟아내는 것이죠.

이 지저분한 중복 상자들을 정리하기 위해 **NMS (Non-Maximum Suppression, 비최대 억제)**라는 '후처리' 과정이 필수적이었습니다. "가장 점수가 높은 상자만 남기고 나머지는 지워!"라는 별도의 정리 단계가 필요했던 것입니다.

결국, AI 모델 하나로 탐지가 끝나는 것이 아니라, 복잡한 사전/사후 처리 과정이 덕지덕지 붙어있는 복잡한 파이프라인이었습니다.

3. DETR의 등장: "탐지"를 "번역" 문제로 바꾸다

2020년, Facebook AI(현 Meta AI) 연구팀은 이 문제를 완전히 다른 시각으로 접근했습니다.

"왜 굳이 수만 개를 추측하고 지워야 하지? 그냥 필요한 만큼만 '질문'하고 '답변'을 얻으면 안 될까?"

여기서 **DETR (DEtection TRansformer)**이 탄생합니다. DETR은 이 기발한 아이디어를 구현하기 위해 '트랜스포머(Transformer)' 모델을 도입했습니다.

객체 탐지를 '번역' 문제로!

트랜스포머는 원래 "I love you"라는 영어 문장을 "사랑해"라는 한국어 문장으로 번역하는 기계 번역 모델이었습니다. DETR은 이 원리를 차용해, '이미지'를 '객체 목록(List of objects)'으로 번역하는 모델을 만들었습니다.

  • (입력) [이미지 한 장]
  • (번역/출력) [고양이, (x: 50, y: 30, w: 20, h: 40)], [자동차, (x: 120, y: 80, w: 50, h: 30)], [사람,...],...

핵심 용어: 'End-to-End'

이 방식의 가장 큰 혁신은 '앵커 박스'도, 'NMS 후처리'도 전혀 필요 없다는 것입니다. 모델에 이미지를 넣으면, 마치 번역 결과처럼 깔끔하게 정제된 객체 목록이 '한 번에' 나옵니다.

이처럼 중간의 복잡한 과정 없이 입력에서 출력까지 한 번에 이어진다고 해서 'End-to-End' 모델이라고 부릅니다. DETR은 객체 탐지 분야를 최초로 'End-to-End'로 풀어낸 모델입니다.

4. DETR, 어떻게 작동하나요?

DETR (DEtection TRansformer): ① 이분 매칭 손실 함수 + ② Transformer

detr 전체 모델 개요도

1. DETR에서는 먼저 CNN통해 이미지 features을 추출

2. 해당 features을 transformer encoder에 입력으로 사용하여 global 정보 추출
3. (그림에는 없지만) Query와 global 정보를 tansformer decoder의 입력으로 사용, hidden feature 추출
4. 추출된 query들 중 이분 매칭을 사용하여 GT와 예측들을 유니크하게 매칭, 남은 예측은 객체 없음(no object, ∅)로 할당하여 일대일 매칭 진행.

'100개의 지정 좌석'과 '3명의 정답 손님' 비유

  • 예측 (파티 주최자의 100개 추측)
    • 모델(파티 주최자)은 이미지를 보고, 파티장에 **100개의 빈 좌석(Object Queries)**을 미리 배치합니다.
    • 주최자는 100개의 각 좌석에 대해 "이 자리는 '고양이' 자리일 거야", "이 자리는 '강아지' 자리일 거야",..., "이 자리는 '자동차' 자리일 거야"라고 미리 예측을 해둡니다.
  • 정답 (실제 손님 3명)
    • 하지만 실제 이미지에는 단 3명의 진짜 손님(Ground Truth), 즉 [고양이, 강아지, 자동차]만 존재합니다.
  • 이분 매칭 (최적의 1:1 좌석 배정)
    • 이제 주최자(모델)는 3명의 진짜 손님을 100개의 예측 좌석 중 가장 알맞은 자리에 1:1로 앉혀야 합니다.
    • '최적의 짝' 찾기:
      • 주최자는 모든 가능한 조합(3명 손님 x 100개 좌석)을 두고 "매칭 비용(Cost)"을 계산합니다.
      • 비용 기준 1 (클래스): "1번 좌석은 '고양이'라고 예측했는데, 마침 '고양이' 손님이 왔네! (비용 낮음)" / "2번 좌석은 '사람'이라고 예측했는데, '강아지' 손님이 왔네? (비용 높음)".
      • 비용 기준 2 (위치): "1번 좌석이 예측한 위치가 실제 고양이 손님의 위치와 정확히 일치하네! (비용 낮음)".
    • 헝가리안 알고리즘: 이 수많은 조합 중, 전체 비용이 가장 낮은(가장 완벽한) 1:1 짝짓기를 찾아내는 방법이 바로 '헝가리안 알고리즘'입니다.
  • '객체 없음(no object)' 할당 (남은 97개 좌석 처리)
    • 자, 3명의 진짜 손님(고양이, 강아지, 자동차)이 100개의 좌석 중 자신과 가장 잘 맞는 3개의 좌석(예: 1번, 5번, 20번 좌석)에 앉았습니다.
    • 그럼 남은 97개의 빈 좌석은 어떻게 될까요?
    • 이것이 바로 DETR의 핵심입니다. 모델은 이 남은 97개의 좌석 모두에 **'객체 없음(no object, ∅)'**이라는 특별한 정답을 강제로 할당합니다.

5. DETR, 어떻게 작동하나요? (비유로 이해하는 3단계)

그렇다면 DETR은 어떻게 이미지를 객체 목록으로 '번역'할까요? 그 구조는 크게 3단계로 나눌 수 있습니다.1

1단계: 백본 (Backbone) - 이미지 '읽기'

  • (비유) AI가 돋보기를 들고 이미지의 모든 픽셀을 훑어보며 중요한 시각적 특징(선, 모서리, 질감, 색상 등)을 추출합니다.
  • (기술) 이 단계는 전통적인 CNN(예: ResNet)을 사용해 이미지의 핵심 특징을 뽑아내는 '특징 맵(Feature Map)'을 생성합니다.1

2단계: 트랜스포머 인코더 (Encoder) - 맥락 '이해하기'

  • (비유) 1단계에서 찾은 특징 조각들을 서로 연결해 봅니다. "여기 '바퀴' 특징이 있고, 저기 '손잡이' 특징이 있네. 둘은 멀리 떨어져 있지만 '자동차'라는 하나의 맥락으로 연결되겠구나." 이처럼 이미지 전체의 '관계'와 '맥락'을 이해합니다.
  • (기술) 트랜스포머의 핵심인 '셀프 어텐션(Self-Attention)'을 통해 이미지 전역의 특징들 간의 관계를 학습합니다.

3단계: 트랜스포머 디코더 (Decoder) & 객체 쿼리 (Object Queries) - '질문하고 답하기'

이 부분이 DETR의 가장 빛나는 아이디어입니다.

  • 객체 쿼리(Object Queries)란?
    • (비유) DETR은 $N$개(보통 100개)의 '질문 카드'를 미리 들고 있습니다.1
    • 이 카드들은 "이 이미지에 있는 1번 객체는 뭐고 어디 있니?", "2번 객체는 뭐고 어디 있니?",..., "100번 객체는 뭐고 어디 있니?"라고 묻는 '빈칸'과 같습니다.
  • 디코더의 역할:
    • 이 100개의 질문 카드(쿼리)가 2단계에서 이해한 '이미지 맥락(인코더 출력)'을 참조하여 스스로 '답변'을 채워 넣습니다.
    • "1번 객체는 '고양이', 위치는 (x, y, w, h)".
    • "2번 객체는 '자동차', 위치는 (x, y, w, h)".
    • ...
    • "99번 객체는 '없음(No Object)'".
    • "100번 객체는 '없음(No Object)'".
  • (기술) 디코더는 $N$개의 학습 가능한 '객체 쿼리'를 입력받아, 인코더-디코더 어텐션을 통해 각 쿼리에 해당하는 객체의 클래스(분류)와 바운딩 박스(좌표)를 6개의 레이어를 거치며 정교하게 예측합니다.

결국 DETR은 이미지에 100개의 질문을 동시에 던지고, 이미지의 맥락을 바탕으로 100개의 답변을 얻어내는 시스템입니다.

5. DETR은 어떻게 '정답'을 배우나요? (손실 함수의 비밀)

AI는 '정답'과 '자신의 예측'을 비교하며 '틀린 정도(Loss, 손실)'를 계산하고, 이 손실을 줄이는 방향으로 스스로를 업데이트(학습)합니다.

DETR은 100개의 예측과 실제 정답(예: 5개)을 비교할 때, '헝가리안 알고리즘'이라는 기법을 사용해 "어떤 예측이 어떤 정답과 짝을 이뤄야 하는지" 1:1로 매칭시켜줍니다.

짝을 찾은 후에는, 3가지 '채점 기준(손실 함수)'을 동시에 만족시키도록 학습합니다. 이 3가지 기준은 실제 연구실에서도 모델의 성능을 좌우하는 핵심 요소로 논의됩니다.

  1. 분류 손실 (Classification Loss): "이름을 맞혔나?"
    • (비유) "정답은 '고양이'인데, '개'라고 예측하면 큰 감점!"
    • (연구 자료) 연구팀은 이 손실을 CLS (Classification Loss)라고 부르며, 모델이 객체의 종류를 정확히 분류했는지 평가합니다.1
  2. L1 손실 (L1 Loss): "좌표를 정확히 찍었나?"
    • (비유) "정답 박스 좌표 (x, y)와 예측 박스 좌표 (x', y') 사이의 '절대 거리'를 계산합니다. 1픽셀이라도 틀리면 감점."
    • (연구 자료) $L1$ Loss는 박스의 중심점과 크기(너비, 높이) 좌표값 자체의 차이를 직접적으로 줄이는 데 중점을 둡니다.
  3. GIoU 손실 (GIoU Loss): "박스를 예쁘게 '포옹'했나?"
    • (비유) $L1$ 손실만으로는 한계가 있습니다. 박스의 중심 좌표는 같더라도($L1$ 손실 = 0), 박스 크기가 정답과 다르면 객체를 제대로 감싸지 못할 수 있습니다. GIoU는 "정답 박스와 예측 박스가 얼마나 잘 겹쳤는지(IoU)" 그 자체를 측정합니다.
    • (연구 자료) 연구팀은 이 GIoU 손실을 매우 중요하게 다루며, 이는 박스의 '모양'과 '겹침'을 직접적으로 최적화합니다.

결국 DETR은 '이름표(분류)', '절대 위치(L1)', '겹치는 모양(GIoU)'이라는 3가지 기준을 동시에 만족시키도록 학습합니다.

RT-DETR이란?

RT-DETR의 풀네임은 Real-Time Detection Transformer이고, DETR의 성능과 단순한 파이프라인은 유지하면서 "실시간 속도"까지 확보한 최신 트랜스포머 기반 객체 탐지 모델이다.

주요 개선점:

  • 멀티스케일 특징(Multi-scale Feature) 효율적으로 처리: 백본과 하이브리드 인코더 구조로 다양한 크기의 객체를 더 빠르고 정확하게 탐지
  • 디코더 구조 단순화 및 최적화: 디코더 계층 수를 조정해 속도/정확도를 유연하게 조절 가능.
  • 속도와 정확도를 모두 잡은 구조: GPU 기준 SOTA급 실시간 처리 및 영향 없는 정확도 달성.

YOLOv10과 차이

YOLOv10과 RT-DETR 둘 다 최신 객체 탐지 인공지능 모델이지만, 내부 동작 방식과 쓰임새에는 뚜렷한 차이가 있습니다. 특히, 둘 다 옛날 방식에서 자주 쓰던 NMS(Non-Maximum Suppression)와 앵커박스(anchor box) 없이 동작하는 "End-to-End" 구조라는 점이 공통점입니다.

YOLOv10

기존의 방식(CNN)을 극한까지 최적화하고 불필요한 부품(NMS)을 제거하여 엄청나게 빠른 속도를 달성한 것이 특징입니다.

  1. YOLOv10: "수천 개의 '관할 구역' 담당자" 🗺️
    시작: YOLO는 근본적으로 이미지를 바둑판처럼 잘게 쪼갠 그리드(Grid)에서 시작합니다.

'탐정'의 정체: YOLO의 '탐정'은 RT-DETR처럼 추상적인 요원이 아니라, 이 바둑판의 각 칸(및 앵커 박스)에서 대기하는 '수천 명의 지역 담당자'입니다. 이들은 '정적'입니다.

일하는 방식 (할당):

  • 예전 YOLO (v3~v8): 모든 '담당자'가 자기 구역에 물체가 보이면 일단 소리쳤습니다. ("내 구역에 고양이 중심!") -> 그래서 중복된 박스가 수십 개씩 생겼고, '청소(NMS)'가 꼭 필요했습니다.

  • YOLOv10 (Smart Manager): 훈련(Training) 과정에서 '일대일 할당'이라는 규칙을 도입했습니다.

"저기 고양이 1마리 보이지? 3행 5열 담당자! 너만 저 고양이에 대해 보고해. 나머지 담당자는 저 고양이에 대해선 조용히 해."

즉, '관리자(이중 헤드)'가 배정한다기보다, 훈련 시스템 자체가 '하나의 물체 = 오직 하나의 담당자'라고 짝을 지어(Matching) 강제로 훈련시킵니다.

핵심: 탐정(Grid Cell)들이 서로 협상하는 것이 아니라, 훈련을 통해 각자의 '책임 구역'이 명확하게 '할당'됩니다. 애초에 한 물체에 대해 한 명만 대답하도록 '설계'된 것입니다.

RT-DETR

GPT나 BERT 같은 최신 AI 언어 모델에 사용되는 '트랜스포머' 기술을 객체 탐지에 적용한 모델입니다.

  1. RT-DETR: "100명의 엘리트 특수요원 (Query)" 🤖
    시작: RT-DETR은 100명(혹은 300명)의 '빈 슬롯' 혹은 '특수요원'으로 시작합니다. 이들은 처음에는 아무것도 모릅니다.

일하는 방식 (협상):

  • 이 100명의 요원들이 이미지 전체를 함께 훑어봅니다. (Cross-Attention)

  • 그다음, 요원들끼리 서로 '회의'(Self-Attention)를 시작합니다.

  • "내가 저기 큰 고양이를 맡을게."

  • "알았어, 그럼 난 그 옆의 작은 강아지를 맡을게."

  • "5번 요원, 넌 1번(고양이)이랑 겹치는 것 같으니 다른 걸 찾아봐."

핵심: 탐정(Query)들이 '서로 소통하고 협상'하여 '동적으로' 역할을 분배합니다. 100개의 슬롯이 100개의 물체를 알아서 나눠 맡습니다.

💡 결론

DETR은 '앵커 박스'와 'NMS'라는 낡은 관행을 깨고, 트랜스포머를 통해 객체 탐지를 'End-to-End' 문제로 재정의했습니다.

RT-DETR: 100명의 추상적인 탐정이 실시간 협상을 통해 역할을 나눕니다.

YOLOv10: 수천 개의 고정된 위치의 탐정이 훈련 규칙에 따라 1:1로 역할을 할당받습니다.

RT-DETR은 '동적인 엘리트 요원'이고, YOLOv10은 '정적인 지역 담당자'라는 근본적인 차이가 있습니다.

RT-DETR이 YOLOv8을 상대로 '정확도'의 기준을 높였고, YOLOv10이 그 RT-DETR을 '속도'와 '정확도' 모든 면에서 다시 뛰어넘었습니다.

반응형