안녕하세요!
이미지 속 물체의 위치는 어떻게 찾을까요?
Faster R-CNN의 데이터 흐름을 따라가 보겠습니다.
이 모델을 이해하려면 이전 방식부터 살펴봐야 합니다.
R-CNN과 Fast R-CNN의 병목이 출발점입니다.
물체 탐지는 무엇을 해결할까?
이미지 분류는 사진 전체에 하나의 이름을 붙입니다.
예를 들어 사진을 보고 고양이라고 판단합니다.
물체 탐지는 이름과 위치를 함께 찾아야 합니다.
위치는 보통 사각형인 바운딩 박스로 표현합니다.
사진에 고양이와 강아지가 함께 있을 수도 있습니다.
따라서 여러 위치와 종류를 동시에 예측해야 합니다.
한 가지 방법은 물체가 있을 만한 곳부터 찾는 것입니다.
그다음 각 영역의 종류와 정확한 위치를 판단합니다.
Faster R-CNN은 이 두 단계를 학습으로 연결한 모델입니다.
그래서 보통 2단계 물체 탐지기로 분류합니다.
R-CNN은 왜 느렸을까?
R-CNN은 먼저 물체가 있을 법한 영역을 많이 고릅니다.
이때 주로 선택적 탐색이라는 외부 알고리즘을 썼습니다.
선택적 탐색은 색과 질감이 비슷한 영역을 합칩니다.
그 결과 수많은 후보 사각형을 만들어 냅니다.
문제는 각 사각형을 따로 잘라 CNN에 넣는다는 점입니다.
겹치는 영역도 매번 다시 계산해야 했습니다.
큰 사진에서 비슷한 합성곱 계산이 반복된 셈입니다.
후보가 많을수록 계산량과 처리 시간이 크게 늘었습니다.
특징 추출과 분류 학습도 여러 단계로 나뉘었습니다.
중간 특징을 저장하느라 저장 공간도 많이 필요했습니다.
Fast R-CNN이 해결한 것과 남긴 병목
Fast R-CNN은 전체 이미지를 CNN에 한 번만 넣습니다.
그리고 이미지 전체의 특징 맵을 먼저 만듭니다.
특징 맵은 사진의 시각 정보를 압축한 숫자 배열입니다.
가장자리와 모양 같은 단서가 공간별로 담겨 있습니다.
여러 후보는 같은 특징 맵에서 필요한 부분만 꺼냅니다.
덕분에 겹치는 영역의 합성곱을 반복하지 않습니다.
크기가 다른 영역은 RoI Pooling으로 정리합니다.
출력 크기를 고정해 뒤쪽 분류기에 전달하는 방식입니다.
하지만 후보를 만드는 일은 여전히 선택적 탐색의 몫입니다.
이 과정은 신경망 밖에서 실행되는 별도 단계였습니다.
GPU가 특징을 빠르게 계산해도 여기서 기다릴 수 있습니다.
학습으로 후보 생성 방식을 개선하기도 어렵습니다.

Faster R-CNN의 핵심 변화
Faster R-CNN은 후보 생성도 신경망에 맡깁니다.
그 역할을 하는 작은 네트워크가 RPN입니다.
RPN은 Region Proposal Network의 약자입니다.
물체가 있을 만한 후보 영역을 제안하는 신경망입니다.
더 중요한 점은 특징을 새로 계산하지 않는다는 것입니다.
RPN과 탐지기가 backbone 출력을 함께 사용합니다.
backbone은 이미지에서 특징을 뽑는 기본 신경망입니다.
쉽게 말해 탐지 모델의 공용 시각 분석기입니다.
이 공용 구조가 불필요한 중복 계산을 줄여 줍니다.
다만 RPN과 최종 탐지기의 출력층은 서로 다릅니다.
전체 데이터 흐름 한눈에 보기
첫째, 입력 이미지를 backbone에 전달합니다.
backbone은 공간 정보가 남은 특징 맵을 출력합니다.
둘째, RPN이 공용 특징 맵을 훑습니다.
각 위치에서 물체 가능성과 상자 보정값을 예측합니다.
셋째, 가능성이 낮은 상자를 제거합니다.
서로 지나치게 겹치는 상자도 정리합니다.
넷째, 남은 후보 영역을 특징 맵 좌표로 옮깁니다.
각 후보에 대응하는 특징을 일정한 크기로 뽑습니다.
다섯째, 탐지 헤드가 물체 종류를 분류합니다.
동시에 바운딩 박스 위치를 한 번 더 다듬습니다.
마지막으로 겹치는 최종 탐지 결과를 정리합니다.
남은 클래스와 점수, 바운딩 박스가 출력됩니다.
RPN은 후보 영역을 어떻게 만들까?
1. 특징 맵 위에 앵커 배치하기
RPN은 특징 맵의 각 위치에서 작은 창을 움직입니다.
그리고 미리 정한 여러 기준 상자를 참고합니다.
이 기준 상자를 앵커라고 부릅니다.
물체 상자의 출발점으로 놓는 틀이라고 보면 됩니다.
사람은 세로로 길고 자동차는 가로로 긴 편입니다.
그래서 다양한 크기와 가로세로 비율을 준비합니다.
원 논문 구성에서는 여러 비율과 크기를 조합했습니다.
실제 개수와 설정은 구현에 따라 달라질 수 있습니다.
2. 물체 가능성 예측하기
RPN은 각 앵커에 물체가 있을 가능성을 매깁니다.
이를 objectness 점수라고 합니다.
이 단계에서는 고양이와 강아지를 구분하지 않습니다.
배경인지 물체인지에 우선 집중합니다.
따라서 RPN의 목적은 최종 분류와 다릅니다.
놓치지 않을 만한 위치를 빠르게 고르는 역할입니다.
3. 앵커 위치 보정하기
미리 만든 앵커가 실제 물체와 정확히 맞지는 않습니다.
RPN은 상자를 옮기고 늘릴 보정값도 예측합니다.
보정값은 중심 위치와 너비, 높이에 적용됩니다.
거친 앵커가 물체 모양에 가까운 상자로 바뀝니다.
이 과정을 바운딩 박스 회귀라고 합니다.
여기서 회귀는 연속적인 숫자를 맞힌다는 뜻입니다.
4. 겹치는 후보 정리하기
한 물체 주변에는 비슷한 상자가 많이 생깁니다.
그대로 넘기면 다음 단계의 계산이 불필요하게 늘어납니다.
먼저 점수가 높은 상자를 우선 선택합니다.
이후 많이 겹치는 낮은 점수 상자를 제거합니다.
이 방법을 비최대 억제, 즉 NMS라고 부릅니다.
최종적으로 선별된 상자가 후보 영역이 됩니다.
특징 맵 공유가 중요한 이유
식탁 사진에서 접시와 컵을 찾는다고 생각해 보겠습니다.
테두리와 질감 정보는 두 물체에 모두 필요합니다.
영역마다 사진을 다시 분석하면 같은 계산이 반복됩니다.
대신 전체 장면을 한 번 분석해 결과를 공유할 수 있습니다.
RPN은 공용 특징에서 물체가 있을 곳을 찾습니다.
탐지 헤드도 같은 특징에서 종류를 판단합니다.
즉 backbone 계산이 두 단계의 공통 기반이 됩니다.
이 점이 Fast R-CNN과 비교되는 핵심 변화입니다.
다만 모든 계산을 완전히 공유하는 것은 아닙니다.
후보 생성용 헤드와 최종 분류 헤드는 별도로 존재합니다.
RoI는 어디에서 사용될까?
RoI는 Region of Interest의 약자입니다.
모델이 자세히 살펴볼 관심 영역을 뜻합니다.
RPN이 만든 후보 상자는 원본 이미지 기준입니다.
이를 축소된 특징 맵의 좌표에 맞게 대응시킵니다.
하지만 후보마다 너비와 높이가 서로 다릅니다.
분류 헤드는 보통 일정한 크기의 입력을 원합니다.
원래 Faster R-CNN은 RoI Pooling을 사용했습니다.
영역을 여러 칸으로 나눠 대표 특징을 뽑습니다.
그 결과 다양한 크기의 RoI가 같은 크기로 변환됩니다.
이후 완전연결층과 예측층이 처리할 수 있습니다.
후속 구현에서는 RoIAlign도 자주 사용합니다.
좌표 반올림 오차를 줄이기 위한 방식입니다.
다만 RoIAlign이 원 논문의 기본 구성은 아닙니다.
현대적인 변형과 원래 구조를 구분할 필요가 있습니다.
RPN의 후보와 최종 탐지는 다르다
RPN의 결과를 완성된 탐지로 오해하기 쉽습니다.
하지만 RPN은 물체 종류를 세밀하게 구분하지 않습니다.
RPN은 물체일 가능성이 있는 위치를 좁혀 줍니다.
최종 탐지 헤드가 실제 클래스 이름을 예측합니다.
탐지 헤드는 상자 위치도 다시 조정합니다.
후보 상자를 정답에 더 가깝게 다듬는 과정입니다.
따라서 위치 보정이 두 번 등장할 수 있습니다.
RPN의 보정과 최종 탐지기의 보정은 목적이 다릅니다.
학습할 때 모델은 무엇을 배울까?
학습 데이터에는 클래스와 정답 상자가 필요합니다.
모델 예측과 정답의 차이를 손실로 계산합니다.
RPN에는 물체 여부를 위한 분류 손실이 있습니다.
앵커 위치를 다듬는 회귀 손실도 함께 사용합니다.
최종 탐지 헤드도 클래스와 위치를 학습합니다.
전체 손실은 이 여러 목표를 묶어 구성됩니다.
앵커와 정답이 얼마나 겹치는지도 비교합니다.
겹침 정도는 주로 IoU라는 값으로 측정합니다.
IoU는 두 상자의 교집합을 합집합으로 나눈 값입니다.
완전히 겹칠수록 큰 값이 됩니다.
IoU를 기준으로 양성 앵커와 배경을 구분합니다.
세부 임계값은 논문과 구현 설정에 따라 달라집니다.
간단한 예로 흐름 확인하기
거리 사진에서 사람과 자전거를 찾는다고 가정합니다.
먼저 backbone이 사진을 특징 맵으로 바꿉니다.
RPN은 특징 맵의 여러 위치에서 앵커를 검사합니다.
사람과 자전거 주변 앵커에 높은 점수를 줄 수 있습니다.
상자 보정과 NMS를 거쳐 후보가 줄어듭니다.
이때 후보는 아직 사람이나 자전거로 확정되지 않습니다.
각 RoI의 특징이 일정한 크기로 추출됩니다.
탐지 헤드는 사람, 자전거, 배경을 구분합니다.
마지막 상자 보정과 중복 제거를 적용합니다.
그러면 클래스별 위치와 신뢰 점수가 남습니다.
직접 풀어보는 짧은 연습
연습 1
Fast R-CNN에서 남아 있던 병목은 무엇일까요?
후보 생성이 외부 알고리즘에 의존했다는 점입니다.
연습 2
RPN이 바로 고양이 클래스를 결정할까요?
아닙니다.
먼저 물체인지 배경인지 판단합니다.
연습 3
backbone 계산은 RPN만 사용할까요?
탐지 헤드도 같은 공용 특징 맵을 활용합니다.
연습 4
RoI 단계가 필요한 이유를 떠올려 보세요.
크기가 다른 후보 특징을 일정한 크기로 만들기 위해서입니다.
장점과 알아둘 한계
가장 큰 장점은 후보 생성까지 학습한다는 점입니다.
외부 선택적 탐색에 의존하는 병목을 줄였습니다.
공용 특징을 활용하면서 정확도와 효율을 함께 노립니다.
정밀한 위치 예측이 필요한 작업에도 널리 응용됩니다.
하지만 2단계 구조라 처리 과정이 단순하지 않습니다.
실시간 성능은 장비와 설정에 따라 달라집니다.
작은 물체는 축소된 특징에서 정보가 약해질 수 있습니다.
앵커 크기와 비율도 데이터에 맞춰 검토해야 합니다.
현대 구현은 FPN 같은 다중 크기 특징을 자주 더합니다.
이는 여러 크기의 물체를 다루기 위한 확장입니다.
따라서 Faster라는 이름만 보고 판단하면 안 됩니다.
이전 R-CNN 계열과 비교해 빨라졌다는 의미입니다.
핵심 정리
R-CNN은 후보마다 CNN을 실행해 계산이 반복됐습니다.
Fast R-CNN은 전체 특징을 한 번만 계산했습니다.
그러나 Fast R-CNN도 외부 후보 생성이 필요했습니다.
Faster R-CNN은 이 일을 RPN으로 대체했습니다.
RPN은 앵커마다 물체 가능성과 보정값을 예측합니다.
정리된 후보 영역은 다음 탐지 단계로 전달됩니다.
RPN과 탐지 헤드는 backbone 특징 맵을 공유합니다.
이 공유 구조가 중복된 특징 계산을 줄여 줍니다.
RoI 특징은 일정한 크기로 바뀐 뒤 분류됩니다.
최종적으로 클래스와 정교한 상자 위치가 출력됩니다.
이미지, 특징, 후보, RoI, 최종 탐지의 순서를 기억하세요.
이 흐름을 잡으면 전체 구조가 훨씬 선명해집니다.
일부 이미지는 Pexels에서 제공되었습니다.
'공부' 카테고리의 다른 글
| YOLO란? 핵심 아이디어와 객체 탐지 데이터 흐름 쉽게 이해하기 (0) | 2026.09.23 |
|---|---|
| SSD(Single Shot Detector)란? 구조와 탐지 원리 쉽게 이해하기 (0) | 2026.09.22 |
| 배치 노멀라이제이션(Batch Normalization)이란? 학습과 추론의 차이까지 쉽게 이해하기 (0) | 2026.09.22 |
| R-CNN이란? 후보 영역부터 객체 분류까지 쉽게 이해하기 (0) | 2026.09.21 |
| AI 논문을 잘 읽는 방법: 연구 질문부터 Figure·Method까지 실전 순서 (0) | 2026.09.17 |