Abstract
당시 객체 탐지의 성능이 region proposal 단계에 크게 의존하면서, Fast R-CNN/SPPnet처럼 탐지 네트워크의 실행 시간을 줄일려는 시도가 있었다. 그럼에도 proposal 생성이 전체 속도의 병목이었다. 이를 해결하기 위해 본 논문은 Region Proposal Network(RPN)를 제안한다. 이는 검출 네트워크와 전체 이미지의 convolution feature를 공유해 proposal을 거의 추가 비용 없이 생성하는 것이다. RPN은 fully-convolutional 구조로 각 위치에서 물체일 확률(objectness)과 경계상자(bbox)를 동시에 예측하며, end-to-end로 학습되어 고품질 proposal을 만든다. 이렇게 생성된 proposal을 Fast R-CNN에 연결해 하나의 통합 네트워크로 결합할 수 있고, 논문은 RPN이 어디를 볼지를 알려주는 attention처럼 동작한다고 설명한다. 결과적으로 VGG-16 기준으로 GPU에서 실시간에 가까운 속도를 달성하면서도, VOC 2007/2012와 MS COCO에서 높은 정확도를 보이며, 이후 ILSVRC/COCO 2015 우승 엔트리의 기반이 되었다고 주장한다.
1. Introcution
객체 탐지는 region proposal 방법과 R-CNN 계열의 결합으로 크게 발전했고, 특히 SPPnet / Fast R-CNN처럼 proposal들 사이에서 컨볼루션 연산 결과(feature map)를 공유하는 방식 덕분에 계산량이 확 줄었다. 그런데 Fast R-CNN이 깊은 네트워크로도 거의 실시간에 가까운 속도를 낸다고 말하려면 proposal 만드는 시간은 제외해야한다. proposal 단계가 최신 탐지 시스템의 병목이 되어버렸다는 게 핵심이다.
"특히 SPPnet/Fast R-CNN처럼 proposal들 사이에서 컨볼루션 연산 결과(feature map)를 공유하는 방식 덕분에 계산량이 확 줄었다." 라는 문장이 잘 와닿지 않았는데, 기존 R-CNN은 proposal 하나마다 이미지를 crop/warp해서 CNN에 넣었기에 proposal이 2000개면 conv도 2000번 수행했다면, SPPnet / Fast R-CNN은 원본 이미지로 conv를 1번 돌려 feature map을 만들고 proposal 마다 그 feature map에서 해당 영역을 특정 방식으로 뽑아 고정 길이 벡터로 만들고 이 벡터를 이용해 분류/박스 회귀를 수행한다고한다.
대표적인 Selective Search는 CPU 기준 이미지 한 장에 2초가 걸릴 정도로 느리고, EdgeBoxes도 0.2초 수준이라, proposal 단계만으로도 탐지 네트워크만큼의 시간을 써버린다고 지적한다.
그리해 이 논문이 제안하는 해법은 proposal을 별도 알고리즘으로 만들지 말고, 아예 Deep ConvNet이 직접 proposal을 뽑게 해서, 탐지기가 이미 계산한 conv feature 위에서 거의 추가 비용 없이 후보 영역을 생성하자는 접근이다. 이를 위해 Region Proposal Network(RPN)를 도입하고, RPN이 탐지 네트워크와 convolutional layer를 공유하도록 만들어 테스트 시 proposal 생성의 추가 비용을 매우 작게 만들 수 있다고 설명한다.
아이디어는 단순한데, Fast R-CNN 같은 region-based detector가 쓰는 feature map 자체가 어디에 물체가 있을 법한지에 대한 정보도 담고 있으니, 그 위에 몇 개의 conv layer만 얹어서 격자(grid) 각 위치에서 objectness 점수와 bounding box를 함께 예측하게 만들면 된다는 것이다.

또 다양한 크기와 비율의 물체를 처리하기위해 이미지 피라미드나 필터 피라미드를 돌리는 대신, 여러 스케일, 종횡비를 대표하는 anchor를 기준으로 회귀하는 방식(일종의 reference box 피라미드)을 제시해 단일 스케일 테스트에서도 속도를 유지할 수 있다고 이어간다.
Figure 1에서는 3가지 멀티스케일 처리 방식을 소개하고 있다:
(a) Image / feature pyramid: 이미지를 여러 스케일로 리사이즈해서 스케일마다 feature map을 다시 뽑고, 그때마다 분류기를 돌리는 방식이라 연산 비용이 크다.
(b) Filter pyramid: feature map은 한 번만 뽑되, 그 위에 크기나 비율이 다른 슬라이딩 윈도우/필터를 여러 개 적용하는 방식. 서로 다른 필터 크기(예: 5×7, 7×5)를 쓰는 방식이고, 이것도 연산 비용이 크게 늘어날 수 있다.
(c) Reference boxes pyramid (anchors): Faster R-CNN이 사용하는 방식으로 이미지는 단일 스케일, 슬라이딩 윈도우도 크기를 고정해 두고, 대신 각 위치마다 여러 개의 anchor(서로 다른 scale/ratio)를 기준점으로 두고 이 anchor에서 얼마나 이동/확대하면 GT 박스가 되냐를 회귀한다. 즉, 멀티스케일을 feature 추출을 여러 번이 아니라 회귀의 기준(anchor)을 여러 개로 해결한다.
마지막으로 RPN과 Fast R-CNN을 하나로 묶어(conv 공유) 학습시키기 위해, proposal 학습과 detection 학습을 번갈아 fine-tuning하는 학습 스킴을 제안하고, 이렇게 통합된 네트워크가 강한 베이스라인(Selective Search + Fast R-CNN)보다 정확도도 더 좋고, 무엇보다 proposal 때문에 생기던 계산 부담을 거의 제거해 실용적인 속도를 달성할 수 있다고 말한다.
2. Related Work
1. Object Proposal: 대표적으로는 superpixel(Selective Search, CPMC, MCG)과, 슬라이딩 윈도우(objectness in windows, EdgeBoxes)로 나뉜다. 이런 방법들은 대체로 detector와 분리된 외부 모듈로 붙어있기에, 전체 속도의 병목이 되기 쉬웠다.
2. Deep Networks for Object Detection: OverFeat는 단일 물체 가정의 박스 좌표를 예측하던 fully-connected 레이어를 검출에 활용하는 방향을 보여줬고, MultiBox는 네트워크의 마지막 FC가 여러 개의 class-agnostic 박스를 한꺼번에 예측해서 proposal로 쓰는 계열인데, 논문은 MultiBox가 본 논문과는 다르게 proposal 네트워크와 detection 네트워크 사이에 feature 공유가 없다는 차이를 강조한다.
마지막으로 SPPnet / Fast R-CNN처럼 공유 conv feature 위에서 region-based detection을 빠르게 하는 연구들이 늘고 있다는 점을 정리해 이제 남은 병목은 proposal이라는 결론을 제시한다.
3. Faster R-CNN

Faster R-CNN은 그림(Figure 2)과 같이, 3개의 모듈로 볼 수 있다.
첫 번째는 Backbone 네트워크로, 입력 이미지를 feature map으로 변환하는 네트워크이다. 본 논문에서는 ZF와 VGG-16이 활용되었다.
두 번째 모듈은 Region Proposal Network(RPN)(후보영역 생성)로, feature map을 바탕으로 Region proposal을 생성한다. 이렇게 생성된 Region proposal이 다음 모듈로 전달되어 후보군을 제안하게 되는 것이다.
세 번째 모듈은 Fast R-CNN Detector(분류/정밀 박스 보정)로, Detection 모듈에서는 RoI Pooling이 수행된다. RoI Pooling은 뒤에서 설명한다. 간단하게 말하자면, 각각의 사이즈가 다른 Region proposal에 대해서 동일한 크기의 Region proposal로 변환을 해주는 레이어이다.
3.1. Region Proposal Networks (RPN)
RPN은 크기 무관한 입력 이미지를 받아, 사각형 proposal + objectness score를 뽑아내는 네트워크고, 형태는 FCN로 모델링한다. RPN은 따로 conv를 돌리는 게 아니라, Fast R-CNN Detector와 공통의 conv layer를 공유한다. 그리해 실험에서도 ZF(공유 가능한 conv 5개)나 VGG-16(공유 가능한 conv 13개) 같은 백본을 둔다.

RPN은 백본의 마지막 conv feature map 위를 3×3 창으로 훑으면서, 각 위치에서 (1) 물체/배경 점수(cls)와 (2) 박스 보정값(reg)을 동시에 예측해 proposal을 만든다. Backbone을 ZF로 사용했다면 256-dimension의 output이 나오고 VGG-16을 Backbone 네트워크로 사용했다면 5120-dimension의 ouptput이 나온다. 그리고 이 output의 결과는 각각 cls/reg layer로 들어간다. cls layer에서는 bounding box안에 객체가 있으면 1, 없으면 0을 출력한다. 그리고 reg layer에서는 bounding box의 중심 좌표인 x, y, 그리고 bounding box의 높이(h)와 너비(w), 총 4개의 값이 출력된다. 그리해 출력도 cls는 2k, reg는 4k로 정의된다.
- Anchors

RPN은 proposal을 새로 뽑아내는 것이 아니라, feature map의 각 위치마다 여러 개의 기준 박스(anchor)를 깔아두고 그 기준에서 얼마나 이동/확대/축소할지를 예측하는 형태로 파라미터화되어 proposal을 만든다.

Anchor box의 기본 설정은 3개 scale×3개 ratio(k=9)로, Scale의 종류는 128, 256, 512 픽셀로 총 3가지, Ratio는 1:1, 2:1, 1:2로 총 3가지가 있다. 각 3가지의 scale과 ratio로 총 9가지의 다른 Anchor box를 생성할 수 있으며, Anchor box의 중심 x,y,w,h 정보는 reg layer를 거쳐 더 정밀한 Anchor box를 만들어낸다.
또한 이 구조는 위치가 바뀌어도 같은 방식으로 예측하는 이동 불변성(물체가 이미지에서 옆으로 이동하면 proposal도 같이 이동해야 하며 같은 함수가 어디서든 똑같이 예측해야 한다는 성질)을 자연스럽게 가져 overfitting 될 확률이 적으며, anchor를 단순화하면 성능이 떨어지는 결과도 함께 제시한다.


위 그림은 Faster R-CNN의 전체 구조이다. 이미지가 입력되면 Backbone 네트워크를 거쳐 Feature map이 생성되고, Feature map은 RPN을 거쳐 Region proposal을 생성한다. 생성 후, RoI Pooling Layer에서 기존의 Feature map과 Region Proposal이 결합되어 고정 크기 Feature map으로 변환되어 출력된다. 고정 크기 Output은 Fast R-CNN에 들어가고 NMS를 거쳐 최종 Prediction으로 출력된다.
- Loss Function
RPN 학습 시, anchor마다 (1) 물체/배경 분류와 (2) 박스 보정 회귀를 동시에 학습시키되, 회귀는 물체로 판정된 anchor에만 걸리게 만든다.
먼저 모든 anchor에 이진 라벨을 붙이는데, positive는 (i) 어떤 GT 박스와 IoU가 가장 높은 anchor(들) 또는 (ii) 어떤 GT와의 IoU가 0.7 이상인 anchor로 잡고, negative는 모든 GT에 대해 IoU가 0.3 미만인 anchor로 잡는다. 그 중간 애매한 anchor는 학습에 아예 쓰지 않는다.

그다음 손실은 분류 손실(Lcls, 이진 분류 cross-entropy)과 회귀 손실(Lreg, smooth L1)을 더한 형태로 정의한다. 중요한 점은 회귀 항 앞에 p*_i(positive면 1, negative면 0)를 곱해서 positive anchor에서만 박스 회귀 손실이 활성화되게 만든다는 것이다.
마지막으로 두 항은 각각 Ncls, Nreg로 정규화하고 가중치 λ로 밸런스를 맞추는데, λ는 실험적으로 결과에 둔감함을 보여 이와 같은 정규화가 필수는 아니며 단순화 될 수 있다고 말한다.

식 (2)는 t가 t*에 가까워지도록 학습시키는 구조로, anchor 기준으로 GT 박스가 되려면 얼마를 움직이고 키울지의 정의이다.
예전(Fast R-CNN)에는 proposal마다 RoI pooling으로 고정 크기 특징을 뽑아 어떤 크기의 박스든 같은 회귀기 하나가 좌표를 보정해도 됐다. 반면 RPN은 feature map에서 항상 3×3 같은 크기 특징만 보고 박스를 맞춰야 해서, 작은 물체/큰 물체/가로로 긴 물체를 한 회귀기가 다 처리하기 어렵다. 그래서 여러 모양의 anchor를 미리 깔아두고, 각 anchor 타입(스케일/종횡비)마다 전담 회귀기가 이 anchor를 얼마나 이동/확대/축소할지를 따로 예측하도록 만든다.
*Rol pooling은 크기가 다른 박스들을 feature map에서 똑같은 크기로 표준화하는 레이어이다. RoI를 왜곡하지않고, RoI의 정보들을 고정된 크기로 압축할 수 있다는 점이 warping보다 더 합리적이다.

작동 방식은 아래와 같다:
- 임의 사이즈인 RoI가 Proposal 단계에서 뽑혔을 때, 이미지의 feature map 중 RoI와 대응되는 부분의 feature 사이즈를 (h,w)라고 하자. (이미지에서는 h=5, w=7이므로 (5,7)이다.)
- 우리는 (5,7) 크기의 RoI를 (2,2) 크기의 고정된 사이즈로 변환하기를 원한다.
- 해당 (5,7) 사이즈를 (2,2) 사이즈에 맞게 sub grid로 나누어준다. (이미지에서는 pooling section의 검은색 window들에 해당된다.)
- 각 grid마다 pooling을 적용시켜 grid 마다 하나의 값을 구하고 최종적으로 (2,2) 크기의 feature를 얻는다. (이미지에서는 max pooling을 사용하였으므로 grid에서 가장 큰 값이 남게 된다.)
→ 결과적으로 RoI가 원래 무슨 크기든, 출력은 항상 고정 크기가 된다.
- Training RPNs
RPN은 역전파 + SGD로 end-to-end 학습되는데, anchor가 너무 많아서 그대로 다 학습하면 망가지기 쉬우니 샘플링과 초기화/하이퍼파라미터로 안정화한다.
구체적으로는, 한 장의 이미지에서 수천~수만 개 anchor가 나오는데(대부분 배경), 전부를 loss에 넣으면 negative(배경) 가 압도해서 학습이 한쪽으로 치우치기 쉽다. 그리해 Fast R-CNN에서 쓰던 image-centric 전략을 따라 미니배치를 이미지 1장에서 만들고, 그 안에서 anchor를 256개만 랜덤 샘플링해서 loss를 계산한다. 이때 positive:negative 비율은 최대 1:1로 맞추고, positive가 128개보다 적으면 부족한 만큼을 negative로 채운다.
학습 세팅은 새로 붙인 레이어는 랜덤 초기화, 공유 conv는 사전학습으로 세팅한다. RPN에서 새로 추가된 레이어들은 평균 0, 표준편차 0.01 가우시안으로 초기화하고, 나머지(공유 conv)는 ImageNet 분류로 pretrain한 가중치를 가져와 fine-tuning 한다. 학습은 PASCAL VOC 기준으로 lr=0.001로 60k, lr=0.0001로 20k를 돌리고, momentum 0.9 / weight decay 0.0005를 사용한다.
3.2 Sharing Features for RPN and Fast R-CNN
이 파트에서는 RPN과 Fast R-CNN을 한 네트워크처럼 묶되, 핵심 비용인 conv feature를 공유하게 만들려면 학습을 어떻게 해야 하냐에 대해서 다룬다.
논문은 공유 학습을 크게 3가지로 정리한다.
(1) Alternating training: RPN을 먼저 학습하고 그 proposal로 Fast R-CNN을 학습한 뒤, 다시 Fast R-CNN가 튜닝한 conv를 바탕으로 RPN을 재학습하는 식으로 번갈아 최적화하는 방법. 논문 실험은 전부 이 방식을 쓴다고 한다.
(2) Approximate joint training: 학습 중에 RPN과 Fast R-CNN을 아예 한 네트워크로 합쳐서, 한 SGD 스텝에서 forward로 proposal을 뽑고 이를 고정된 proposal처럼 취급해 탐지기를 학습한다. 이때 shared conv에는 RPN loss와 detector loss의 gradient가 함께 업데이트되지만, proposal 좌표 자체가 네트워크 출력이라는 점을 엄밀히 미분하지 않고(박스 좌표에 대한 derivative를 무시) 근사로 처리한다는 한계가 있다. 대신 구현이 쉽고 학습 시간이 25–50% 줄 수 있다고 말한다.
(3) Non-approximate joint training: 이론적으로 제대로 하려면 RoI pooling이 박스 좌표에 대해 미분 가능해야 하는데, 그건 어렵고 RoI warping 같은 별도 레이어가 필요해서 이 논문 범위를 벗어난다고 정리한다.
그리해 본 논문이 실제로 채택한 건 4-step alternating training이다.
(1단계) ImageNet 사전학습 가중치로 RPN을 end-to-end로 학습
(2단계) 1단계 RPN이 만든 proposal로 Fast R-CNN 검출기를 따로 학습한다(이때는 conv를 공유하지 않음).
(3단계) 2단계 검출기의 conv를 가져와 RPN을 다시 학습하되 공유 conv는 고정하고 RPN 전용 레이어만 튜닝
(4단계) 똑같이 공유 conv를 고정한 채 Fast R-CNN 전용 레이어만 fine-tuning해 최종적으로 하나의 통합 네트워크를 만든다. 추가로 더 반복해도 개선이 거의 없었다고 덧붙인다.
5. Conclusion
본 논문은 RPN을 제안하고, RPN이 Fast R-CNN Detector과 컨볼루션 층을 공유하면 proposal 생성의 비용이 매우 작아지고, 기존 문제였던 병목을 제거할 수 있다고 강조한다.
또한 멀티스케일 처리를 이미지/필터 피라미드로 여러 번 특징을 뽑는 방식 대신, 각 위치에 스케일/종횡비가 다른 anchor를 깔고 그 기준에서 회귀하는 reference box pyramid로 해결해 단일 스케일 테스트에서도 속도를 유지한다고 말한다.
RPN과 Fast R-CNN을 하나로 묶는 학습은 alternating 방식을 제안해 공유 feature를 안정적으로 만들고, 속도/정확도 모두에서 실용적인 탐지 시스템이 된다고 결론낸다.
[참고]
https://medium.com/@parkie0517/r-cnn-계열의-발전-동향과-faster-r-cnn-논문-리뷰-155f46cca6ad
'ML&DL > 논문리뷰' 카테고리의 다른 글
| Mask R-CNN (0) | 2026.01.03 |
|---|---|
| U-Net: Convolutional Networks for Biomedical Image Segmentation (0) | 2025.12.30 |
| VAE: Auto-Encoding Variational Bayes (0) | 2025.12.23 |
| StyleGAN: A Style-Based Generator Architecture for Generative Adversarial Networks (0) | 2025.11.27 |
| CycleGAN: Unpaired Image-to-Image Translationusing Cycle-Consistent Adversarial Networks (0) | 2025.11.19 |
