Ch.15
객체 탐지 (Object Detection): R-CNN 패밀리와 YOLO의 대결 (바운딩 박스 찾기)
객체 탐지 한눈에
R-CNN은 후보 상자를 일일이 열어보는 창고 검수, YOLO는 담당 구역마다 동시에 보고하는 현장 점검과 비슷합니다.
같은 사진에서 '강아지가 어디 있나?'를 찾을 때, R-CNN은 의심 영역(후보 박스)을 먼저 많이 뽑은 뒤 하나씩 확인합니다. YOLO는 사진을 격자로 나누고, 각 칸이 동시에 위치와 종류를 말합니다. 마지막에는 중복 박스를 지우는 NMS(Non-Maximum Suppression, 청소 단계)로 겹친 결과를 정리하고, 탐지 성적표 mAP(mean Average Precision, 종합 점수)로 잘 찾았는지 평가합니다.
R-CNN: 후보를 골라 확인 · YOLO: 격자마다 한 번에
먼저 '여기 뭔가 있을 것 같다'는 점선 후보를 여러 개 뽑고, 확인한 하나만 실선 박스로 남깁니다.
R-CNN · 2-stageR-CNN먼저 '여기 뭔가 있을 것 같다'는 점선 후보를 여러 개 뽑고, 확인한 하나만 실선 박스로 남깁니다.
YOLO사진을 격자로 나누면 각 칸 담당자가 한 번에 자기 구역의 위치와 종류를 함께 말합니다.
한 장의 사진이 어떻게 처리되나
- 먼저 RGB 사진을 넣습니다. 분류와 달리, 여러 물체가 어디에 있는지까지 찾는 것이 목표입니다.
- CNN 백본이 사진을 특징 맵으로 바꿉니다. 이후 단계는 이 특징을 읽어 박스를 그립니다.
- R-CNN은 객체가 있을 법한 후보 영역을 많이 제안합니다. YOLO는 이미지를 S×S 격자로 나눕니다.
- 각 후보나 격자 칸에서 무엇인지(클래스)와 어디인지(박스)를 함께 예측합니다.
- 중복 박스 정리(NMS)로 같은 물체에 겹친 박스를 하나만 남기고, 탐지 성적표(mAP)와 박스 겹침 점수(IoU)로 얼마나 정확히 찾았는지 평가합니다.
"이 사진에 고양이가 있나요?"라고 묻는 '이미지 분류' 기술이 한 단계 진화하면, "고양이가 정확히 사진의 어느 위치(X, Y)에, 얼만한 크기(W, H)로 있나요?"를 찾아내어 네모난 바운딩 박스(Bounding Box)를 그려주는 객체 탐지(Object Detection) 기술이 됩니다. 자율주행 자동차가 보행자를 피하고, 불량품 검사 로봇이 흠집의 위치를 정확히 찾아낼 수 있게 해주는 딥러닝 비전 기술의 핵심입니다.
이 장에서는 객체 탐지 분야를 양분하고 있는 두 가지 천재적인 아이디어를 만납니다. 의심스러운 구역을 먼저 찾고 나서 대상을 확인하는 신중한 2단계(2-Stage) 방식의 'R-CNN 패밀리'와, 이미지를 바둑판처럼 쪼개어 단 한 번만 쓱 훑어보고 대상을 찾아내는 번개같이 빠른 1단계(1-Stage) 방식의 'YOLO(You Only Look Once)'입니다. 이들의 설계 철학 차이와, 박스가 얼마나 잘 쳐졌는지 평가하는 다양한 수학적 기준들을 아주 쉽게 알아봅니다.
수식, 이렇게 읽으면 됩니다 (객체 탐지)
1. IoU (Intersection over Union) — 핵심 수식
- 교집합: 두 박스가 겹치는 영역
- 합집합: 두 박스를 합친 영역
- 0에 가까울수록 안 겹침, 1에 가까울수록 거의 일치
2. 바운딩 박스 좌표 — 사진 위 네모를 어떻게 적나?
객체 주위에 그리는 네모 박스 위치를 숫자로 적는 방법은 두 가지가 많습니다.
- 모서리 표기: 왼쪽 위·오른쪽 아래 (x_min, y_min, x_max, y_max) — 네모 두 꼭짓점을 찍는 방식
- 중심 표기: 가운데 (cx, cy) 와 가로·세로 (w, h) — 중심 + 크기로 그리는 방식
w, h는 박스 가로·세로입니다. 넓이는 대략 w×h로 생각하면 됩니다.
YOLO는 사진이나 격자 칸 크기에 맞춰 0~1로 줄여 쓰는 경우가 많습니다. (예: 가로가 사진의 절반이면 0.5)
3. NMS — 같은 물체에 박스가 여러 개? 하나만 남기기
탐지기가 한 사람 주위에 박스 5개를 그리면 보기 어렵습니다. NMS는 겹친 박스를 정리하는 청소 단계입니다.
1. 점수(신뢰도)가 높은 순으로 줄을 세웁니다.
2. 1등 박스를 먼저 남깁니다.
3. 1등과 너무 많이 겹치는 박스(IoU가 임계값보다 큼)는 버립니다. 남은 박스로 같은 일을 반복합니다.
한 줄로: 같은 물체에는 가장 확실한 박스 하나만 남깁니다.
4. mAP — 탐지기 성적표
mAP는 모델이 얼마나 잘 찾았는지 보는 종합 점수입니다.
- 객체 종류마다 정밀도·재현율 곡선 아래 면적(AP)을 구합니다.
- 모든 종류 AP의 평균이 mAP입니다.
- 예측 박스가 정답과 반 이상(IoU 0.5 이상) 겹쳐야 맞춘 것으로 칩니다.
점수가 높을수록 헛박스는 적고, 놓치는 물체도 적다는 뜻입니다.
객체 탐지: R-CNN vs YOLO
1. 분류 vs 객체 탐지: '무엇'에서 '어디에 있는 무엇'으로
이미지 분류가 "이 방에 고양이가 있나요?"라고 묻는 것이라면, 객체 탐지는 "고양이가 어느 위치에 있나요?"라고 묻는 것입니다. 사진 속 여러 객체에 네모난 바운딩 박스를 치고, 그게 무엇인지(클래스)를 동시에 알아맞히는 훨씬 고차원적인 작업입니다.
2. R-CNN 패밀리 (2-Stage): 신중하고 꼼꼼한 탐정
이 방식은 두 단계를 거칩니다. 먼저
① "여기에 뭔가 있을 것 같은데?" 하고 의심스러운 후보 영역(RoI)들을 수십 개 뽑아냅니다(Region Proposal). 그런 다음
② 각 영역을 자세히 들여다보며 "이건 고양이구나! 박스 크기는 이만큼!" 하고 최종 결정을 내립니다. 매우 꼼꼼해서 정확도는 높지만, 두 단계를 거치느라 처리 속도가 다소 느립니다.
3. YOLO (1-Stage): 한눈에 파악하는 훌륭한 경비원
YOLO(You Only Look Once)는 이름처럼 이미지를 '딱 한 번만' 봅니다. 이미지를 S×S 크기의 바둑판(격자)으로 쪼갠 뒤, 각 칸을 담당하는 경비원 셀(Cell)들이 동시에 "내 구역엔 강아지가 있어!"라고 외치며 박스를 그리는 방식입니다. 복잡한 후보 선정 과정이 없어 실시간 처리가 가능할 정도로 압도적으로 빠릅니다.
4. 품질 검사 도구: IoU, NMS, mAP
- IoU(교집합/합집합): 정답 박스와 예측 박스가 얼마나 겹치는지 0~1로 잰 값입니다. 핵심은 교집합 ÷ 합집합이며, 자세한 식은 아래 수식 가이드를 보세요.
- NMS: 똑같은 강아지 얼굴에 여러 개의 박스가 지저분하게 겹쳐서 쳐졌을 때, 가장 확신 점수가 높은 '진짜' 박스 하나만 남기고 나머지는 싹 지워주는 깔끔한 정리 기술입니다.
- mAP: 모델이 객체를 얼마나 잘 찾고 박스를 잘 쳤는지 종합적으로 평가하는 최종 성적표(평균 정확도)입니다.
왜 중요한지
현실 세계를 인식하는 진정한 인공지능의 '눈'
자율주행 자동차가 도로를 달리려면 보행자와 다른 차의 정확한 위치를 알아야 브레이크를 밟을 수 있습니다. 로봇 팔이 물건을 집어 올릴 때도 마찬가지입니다. 단순한 이미지 분류를 넘어, AI에게 완벽한 공간적 이해를 제공하는 필수 기술입니다.
속도냐, 정확도냐? 완벽한 맞춤형 설계
CCTV나 자율주행처럼 0.01초의 반응 속도가 생명인 곳에는 YOLO(1-Stage)를 쓰고, 의료 영상에서 미세한 암세포의 위치를 찾을 때는 속도보다 정확도가 중요하므로 R-CNN(2-Stage)을 씁니다. 두 기술의 장단점을 알면 상황에 맞는 최적의 무기를 고를 수 있습니다.
평가 지표 없이는 '좋다/나쁘다'를 말할 수 없다
아무리 객체를 잘 찾아도 박스가 엉뚱한 곳에 쳐져 있다면 무용지물입니다. IoU와 mAP 같은 평가 지표는 "우리 모델이 정말로 똑똑한가?"를 객관적인 수치로 증명하고, 모델의 성능을 끌어올리는 기준점이 됩니다.
더 정교한 세계(세그멘테이션)로 가는 징검다리
바운딩 박스는 대략적인 네모난 틀일 뿐 객체의 둥근 윤곽선까지 정교하게 알려주지는 않습니다. 이 객체 탐지의 원리를 마스터하면, 픽셀 단위로 정밀하게 색칠을 하는 '세그멘테이션(Segmentation)' 기술로 아주 자연스럽게 실력을 확장할 수 있습니다.
어떻게 쓰이는지
1단계: 데이터 준비와 박스 좌표 잡기
가장 먼저 사진 속에 객체가 어디 있는지 정답지(라벨)를 만듭니다. 보통 박스의 왼쪽 위·오른쪽 아래 좌표 (x_min, y_min, x_max, y_max) 또는 중심과 너비·높이 (cx, cy, w, h) 중 하나로 통일해서 사용합니다.
2단계: 상황에 맞는 네트워크(모델) 선택하기
실시간 스트리밍처럼 빠른 속도가 필요하다면 이미지를 격자로 나누는 YOLO 모델을 선택하고, 작고 빽빽한 물체들을 아주 정확하게 찾아야 한다면 RPN(영역 제안 네트워크)이 포함된 Faster R-CNN을 선택하여 모델의 뼈대를 세웁니다.
3단계: 정답 맞추기 훈련 (Loss 계산)
AI가 예측한 박스와 정답 박스의 IoU를 계산해서 일정 기준을 넘으면 '정답을 찾았다'고 칭찬해 줍니다. 이때 무슨 물체인지 맞추는 '분류 오차'와 박스 크기와 위치를 꼼꼼하게 조절하는 '회귀 오차'를 동시에 줄여가며 학습합니다.
4단계: 중복 제거(NMS)와 최종 성적표 확인
훈련이 끝나고 실전에 투입하면, AI가 뱉어낸 수많은 박스 중 점수가 너무 낮은 것은 버리고, NMS를 돌려 이리저리 겹친 박스들을 하나로 예쁘게 정리합니다. 마지막으로 검증용 데이터로 mAP 점수를 측정하여 우리 모델이 얼마나 훌륭한지 평가합니다.
요약
한 줄 요약: 객체 탐지는 이미지 속 객체의 '종류'와 네모난 '위치 박스'를 동시에 찾는 기술로, 꼼꼼하고 정확한 2-Stage(R-CNN)와 빠르고 직관적인 1-Stage(YOLO)로 나뉩니다.
핵심 포인트: 박스가 얼마나 잘 맞는지 평가하는 IoU, 겹치는 잉여 박스들을 싹 지워주는 깔끔한 NMS, 그리고 이 모든 것을 종합한 성적표인 mAP가 성능을 좌우합니다.
다음 단계: 바운딩 박스라는 네모난 틀을 넘어서, 객체의 둥근 픽셀 윤곽선까지 완벽하게 오려내는 '세그멘테이션' 기술로 이어집니다.
문제 풀이를 위한 설명
먼저 이렇게 읽고 시작하세요
- 이 문제가 묻는 축을 먼저 구분: 분류 vs 탐지 / R-CNN 2-stage vs YOLO 1-stage / IoU·NMS·mAP
- 계산 문제면 패턴 고정: YOLO 격자 S×S → 총 칸 수 S² (예: S=7 → 7×7=49)
- IoU·합집합이 나오면 합집합 = A + B − 교집합, 겹침 4×4 → 면적 16
예시 (개념형)
"객체 탐지의 목표에 가장 가까운 것은?"
① 이미지 전체에 클래스 하나만
② 각 객체의 박스와 클래스
③ 픽셀 분할만
④ 학습률만
정답 2
왜? 탐지는 무엇 + 어디를 함께 찾습니다. 분류는 전체 라벨 하나만 냅니다.
예시 (O/X형)
"YOLO는 항상 2-stage만 사용한다"
정답 0 (틀림)
왜? YOLO는 S×S 격자에서 1-stage로 박스·클래스를 한 번에 예측합니다.
예시 (계산형)
"YOLO 격자 S=7일 때 총 셀 수는?" → 7×7=49
문제 유형별 예시 + 정답 근거
예시 (시나리오형)
"추론 후 같은 사람 주위에 박스가 5개 겹친다. 우선?"
① NMS로 중복 제거
② 라벨 섞기
③ 백본 0층
④ mAP 제거
정답 1
왜? 겹친 중복 박스는 NMS로 정리합니다.
예시 (선다 계산형)
"박스 A·B 각 면적 32, 교집합 16일 때 합집합 면적은?"
정답 48 (32+32-16)
왜? 합집합 = A + B − 교집합 패턴입니다.
예시 (격자형)
"YOLO 격자 S=9일 때 총 셀 수는?"
정답 81 (9×9)
왜? S×S 격자는 한 변 셀 수를 제곱합니다.
예시 (종합 추론형)
"CCTV 실시간 추론이 필요하다. 구조 선택?"
① Selective Search만
② R-CNN 원본만
③ YOLO 같은 1-stage
④ 증강 중단
정답 3
왜? 속도가 중요하면 1-stage YOLO 계열을 먼저 고려합니다.