아래 글에서 이 블로그에서 리뷰한 논문들의 흐름과 분야별 분류를 한 눈에 볼 수 있다.
읽은 논문들 정리
[목차]지속적으로 업데이트 중1. Computer Vision 분야 논문Classification 모델들의 발전Detection 모델들의 발전2. Natural Language Processing 분야 논문3. 유명한 딥러닝 논문들 1. Computer VisionAlexNet → VGGNet → Goo
april2901.tistory.com
현재 detection모델의 발전 순서대로 논문을 보고 있다.
R-CNN과 fast R-CNN을 살펴봤으니 이번에는 faster R-CNN을 알아보자.
1. 서론
먼저 흐름을 다시 한번 살펴보자.
- R-CNN
- 방법: 입력 이미지에서 후보 영역(region proposal)을 추출한 후, 각 영역을 CNN에 통과시켜 특징을 추출하고 분류.
- 문제점: 모든 후보 영역마다 CNN을 반복 적용해야 해서 속도가 매우 느림.
- Fast R-CNN
- 방법: 전체 이미지를 한 번만 CNN에 통과시켜 feature map을 만들고, 각 후보 영역을 ROI pooling으로 추출.
- 해결점: CNN 반복 계산을 줄여 학습과 추론 속도를 크게 개선.
- 문제점: 여전히 후보 영역(region proposal)을 외부 알고리즘(Selective Search 등)으로 생성해야 하므로 완전한 실시간 처리 어려움.
selective search는 CPU에서 돌아가고 이 부분이 병목이었다.
따라서 Faster R-CNN에서는 영역 추출기를 딥러닝 네트워크에 통합시키는 아이디어를 적용했다.
2. Region Proposal Networks(RPN)
RPN은 입력으로 크기에 상관없는 이미지 하나만을 받는다.
fast R-CNN에서는 이미지와 영역 제안을 모두 받았던 것과 다르다.
입력을 받아 영역 후보와 각각의 객체 존재 확률을 리턴한다.
RPN은 Fully Convolutional Network, FCN를 사용해 구성된다.
RPN을 통해 영역 후보를 얻으면 그 이후는 fast R-CNN과 똑같이,
RoI pooling 이후 classification과 BB를 수행한다.
즉 fast R-CNN에서 selective search로 받아왔던 영역제안을 RPN으로 바꿨다고 생각하면 된다.
2.1. Sliding Window
먼저 영역 제안을 만드는 법을 알아보자.
일단 이미지를 백본 CNN에 넣어 feature map을 얻는다.
이 백본은 AlexNet이거나 VGG처럼 우리가 사용해왔던 CNN이다.
이 논문에서는 특히 5개의 conv층을 가진 AlexNet을 개선한 모델인 ZF모델과, 13개의 conv층을 가진 VGG모델을 사용했다.
어쨌든 이 CNN에서 나온 feature map에 $n \times n$(논문에서는 n=3)크기의 작은 필터를 슬라이딩 시킨다.
이 필터의 채널 수(깊이)는 ZF모델일 때의 경우 256, VGG일 때는 512로 설정한다.
슬라이딩 윈도우 하나를 기준으로 보면 256또는 512차원의 벡터가 생성된다고 생각할 수 있다.
이후 ReLU를 한번 거쳐준다.
이 256또는 512차원의 벡터는 1x1크기의 필터를 통해 두 개의 층에 전달된다.
각 layer의 이름은 분류를 위한 cls layer, 박스를 조정하는 reg layer이다.
2.2. Anchor Boxes
이 윈도우가 슬라이딩 될 때마다 각 자리에 박스를 몇개씩 그린다.
따라서 $W \times H$ 크기의 특징 맵에서 총 $WHk$개의 앵커가 생성된다.
논문에서는 3개의 scale(면적)과 3개의 aspect ratio(비율)를 조합해 총 $k$ (논문에서는 k=9)개의 앵커를 사용한다.
면적 : $128^{2}$, $256^{2}$, $512^{2}$
비율 : $1:1$, $1:2$, $2:1$
면적은 특징 맵이 아닌 원본에서의 면적을 얘기한다.
이 앵커의 특징 중 하나는 Translation Invariance이다.
Translation Invariance: 이미지 내 객체가 이동해도 해당 위치에 또 동일한 앵커가 있을 것이므로 물체의 위치에 상관없이 동일한 함수로 예측이 가능하다.
reg layer: 4k개의 출력 → k개의 box에 대해 4개의 좌표 예측.
cls layer: 2k개의 출력 → 각 proposal이 object인지 아닌지 확률 예측.
cls 층에서는 사실 object일 확률을 알면 다른 확률은 1에서 빼서 구할 수 있지만 편의를 위해 그냥 두 확률을 리턴한다.
2.3. Loss Function
RPN을 학습시키기 위해 각 앵커에 객체인지 아닌지에 따라 1/0을 부여한다.
IoU가 0.7 이상이면 positive(1), 0.3 미만이면 negative(0)으로 간주한다.
그 사이 값 0.3~0.7이라면 무시한다. 즉 loss계산에 넣지 않는다.
손실함수는 아래와 같다.
$$L(\{p_{i}\},\{t_{i}\})=\frac{1}{N_{cls}}\sum_{i}L_{cls}(p_{i},p_{i}^{*})+\lambda\frac{1}{N_{reg}}\sum_{i}p_{i}^{*}L_{reg}(t_{i},t_{i}^{*})$$
- $i$: 미니배치 내 앵커의 인덱스.
- $p_{i}$: 앵커 $i$가 객체일 예측 확률.
- $p_{i}^{*}$: 정답 라벨로, 양성 앵커면 1, 음성이면 0.
- $L_{cls}$: 두 클래스(객체 vs 배경)에 대한 Log Loss.
- $L_{reg}$: Smooth $L_1$ 손실을 사용하며, $p_{i}^{*}=1$인 양성 앵커에 대해서만 활성화.
- $\lambda$: 두 손실 사이의 균형을 맞추는 가중치이며, 기본적으로 두 항이 거의 동일하게 가중되도록 설정.
$L_{cls}, L_{reg}$는 이전 fast R-CNN글에서도 알아봤듯 세부적으로 아래처럼 계산된다.
$L_{cls}(p_i, p_i^*) = -[p_i^* \log(p_i) + (1 - p_i^*) \log(1 - p_i)]$
$$L_{reg}(t_i, t_i^*) = \sum_{j \in \{x, y, w, h\}} \text{smooth}_{L_1}(t_{ij} - t_{ij}^*)$$
$$\text{smooth}_{L_1}(x) = \begin{cases} 0.5x^2 & \text{if } |x| < 1 \\ |x| - 0.5 & \text{otherwise}\end{cases}$$
2.4. Bounding Box Regression
Faster R-CNN에는 박스 조정(Bounding Box Regression) 단계가 두 번 있다.
- 1단계 (RPN): 앵커 박스로부터 지역 제안(Region Proposal)을 만들기 위한 조정
- 2단계 (Fast R-CNN): 생성된 지역 제안을 실제 객체 경계에 딱 맞게 다듬는 최종 정밀 조정
2단계는 이전 글에서 다룬 Fast R-CNN의 방식과 동일하므로, 여기서는 RPN 내부에서 일어나는 첫 번째 조정을 집중적으로 살펴보자.
첫 번째 조정도 학습 원리는 같다.
모델은 박스의 절대 좌표를 직접 맞추는 것이 아니라, 앵커 박스($a$)를 얼마나 옮기고 키워야 정답($*$)에 가까워지는지를 나타내는 4가지 파라미터($t_x, t_y, t_w, t_h$)를 학습한다.
$$t_x^* = (x^* - x_a) / w_a, \quad t_y^* = (y^* - y_a) / h_a$$
$$t_w^* = \log(w^* / w_a), \quad t_h^* = \log(h^* / h_a)$$
$x, y, w, h$: 네트워크가 최종적으로 예측한 박스 (Predicted)
$x_a, y_a, w_a, h_a$: 기준이 되는 앵커 박스 (Anchor)
$x^*, y^*, w^*, h^*$: 실제 정답 박스 (Ground-Truth)
특징: RPN의 reg layer에서는 9개($k$)의 앵커에 대해 파라미터를 공유하지 않고 각각 독립적으로 학습된다.
즉, 서로 다른 크기와 비율을 가진 앵커마다 전용 가중치가 따로 존재하는 것이다.
이 덕분에 고정된 크기의 특징 맵 안에서도 다양한 크기의 물체를 제안할 수 있다.
3. RPN 이후 단계
지금까지는 faster R-CNN의 핵심인 RPN을 알아봤다.
이제 RPN이후 단계에서 저자들이 사용한 기법을 알아보자.
3.1. NMS (Non-Maximum Suppression)
RPN을 거치면 수만 개의 지역 제안이 나온다.
이 중에는 서로 겹치는 박스가 너무 많기 때문에 이를 정리해주는 과정이 필수적이다.
- 방법: cls layer에서 나온 '객체일 확률' 점수를 기준으로 박스들을 정렬한 뒤, IoU가 높은(많이 겹치는) 박스들을 제거한다.
- 결과: 논문에서는 NMS를 거쳐 최종적으로 약 2,000개의 지역 제안만 남겨 Fast R-CNN으로 전달한다.
테스트 때는 300개로 줄이기도 한다.
3.2. 4-Step Alternating Training
이 논문의 가장 큰 성취 중 하나는 RPN과 Fast R-CNN이 특징 맵을 공유하게 만든 것이다.
이를 위해 저자들은 4단계 교대 학습 방식을 제안했다.
- Step 1: RPN을 먼저 단독으로 학습시킨다.
- Step 2: Step 1에서 만든 제안서를 사용해 Fast R-CNN을 학습시킨다. (이때까지는 두 네트워크의 가중치가 공유되지 않는다.)
- Step 3: Fast R-CNN의 가중치로 RPN을 초기화하고, 공유되는 층은 고정한 채 RPN만 미세 조정(Fine-tuning)한다.
- Step 4: 공유 층을 고정한 상태에서 Fast R-CNN의 고유 층만 미세 조정한다.
결과: 이 과정을 통해 두 네트워크가 동일한 Convolution 가중치를 공유하는 하나의 통합 네트워크(Unified Network)가 완성된다.
4. faster R-CNN의 성능, 의의, 한계
성능
이름부터 faster인 것처럼 fast R-CNN보다 훨씬빠르다.
VGG-16 백본을 사용했을 때의 성능을 비교해보자.
- Fast R-CNN (Selective Search): 이미지당 약 2.3초 (영역 제안에만 2초 소요)
- Faster R-CNN (RPN): 이미지당 약 0.2초 (5 fps)
의의
- Unified Network: 영역 추출부터 분류까지 모든 과정을 하나의 GPU 안에서 해결한 최초의 통합 모델
- End-to-End Training: 모든 모듈이 미분 가능한 신경망으로 연결되어 한꺼번에 학습이 가능
한계
- 충분히 빠르지 않은 속도: 실시간(30 fps 이상)으로 보기엔 여전히 무겁다.
- 이는 곧 리뷰할 YOLO, SSD 같은 1-Stage Detector의 등장으로 이어진다.
- RoI Pooling의 부정확성: 소수점 좌표를 정수로 반올림하는 과정에서 정보 손실이 발생.
- 이를 개선하는 Mask R-CNN이 나온다. 이 논문도 곧 리뷰할 계획이다.
<요약>
영역 제안 알고리즘(Selective Search)을 제거하고, 이를 딥러닝 네트워크 내부의 RPN(Region Proposal Network)으로 통합하여 속도와 정확도를 동시에 잡은 최초의 통합형(Unified) 객체 탐지 모델
핵심 포인트
1. RPN (Region Proposal Network)
외부 알고리즘 없이, 특징 맵(Feature Map) 위를 슬라이딩 윈도우로 훑으며 물체가 있을 법한 영역을 직접 예측한다.
모든 과정을 GPU 안으로 끌어들여 병목 현상을 완벽히 해결했다.
2. Anchor Boxes
특징 맵의 각 지점마다 다양한 스케일과 비율을 가진 9개의 기준 박스(Anchor)를 미리 설정한다.
이를 통해 단일 크기의 특징만으로도 다양한 모양의 물체를 효과적으로 포착할 수 있다.
3. Multi-task Loss (Cls + Reg)
객체인지 배경인지를 판별하는 Classification과 앵커를 정답 박스에 맞춰 정교하게 비트는 Bounding Box Regression을 동시에 학습한다.
특히 오차에 강한 Smooth L1 Loss를 사용하여 학습의 안정성을 높였다.
4. Shared Convolutional Layers
영역 제안(RPN)과 최종 검출(Fast R-CNN)이 동일한 CNN 백본의 특징 맵을 공유한다.
이로 인해 영역 추출에 드는 연산 비용을 거의 제로(Nearly cost-free) 수준으로 낮췄다.
5. 4-Step Alternating Training
RPN과 Fast R-CNN이 특징 맵을 공유하면서도 각자의 역할을 충실히 수행할 수 있도록,
두 네트워크를 번갈아 가며 학습시키는 독특한 교대 학습 방식을 도입했다.
'AI > 컴퓨터비전(CV)' 카테고리의 다른 글
| [CV 논문] SSD: Single Shot MultiBox Detector (0) | 2026.02.09 |
|---|---|
| 직접 찍은 이미지 물체탐지 해보기(detectron2 라이브러리, faster R-CNN) (0) | 2026.01.19 |
| [CV 논문] Fast R-CNN (0) | 2026.01.10 |
| [CV 논문] Rich feature hierarchies for accurate object detection and semantic segmentation (1) | 2026.01.09 |
| [CV 논문] Swin Transformer: Hierarchical Vision Transformer using Shifted Windows (0) | 2026.01.08 |