[논문리뷰] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

장우솔·2022년 9월 26일
0
post-thumbnail

Abstract

최신 객체 탐지 모델은 객체 위치를 추정하기 위해 영역 추정(region proposal) 알고리즘을 사용했다. SPP-net과 Fast R-CNN은 객체 탐지 시간을 크게 줄인 모델이지만 여전히 영역 추정 단계에서 병목(bottleneck) 현상이 생긴다는 단점이 있다. 본 논문에서는 영역 추정 네트워크 기법인 RPN을 사용한다. RPN은 객체 탐지 네트워크와 함께 합성곱 피처들을 공유하기 때문에 ROI 생성도 CNN level에서 수행해서 수행속도가 향상되었고, 영역 추정에 거의 비용이 들지 않는다. RPN은 객체의 경계 박스와 클래스 점수(객체가 있는지 없는지 여부를 점수화)를 동시에 예측하는 합성곱 네트워크이다. 게다가, 품질 좋은 영역 추정 경계 박스를 생성하도록 end-to-end 훈련을 할 수 있다. 본 논문은 합성곱 피처를 서로 공유할 수 있도록 RPN과 Fast R-CNN을 결합해 단일 네트워크(single network)를 만들었다. 이는 어텐션 메커니즘과 비슷하다. Faster R-CNN은 GPU에서 깊은 VGG-16 모델을 사용해 5 fps(1초에 이미지 5프레임 처리)를 달성하며 우수한 객체 탐지 성능을 보였다.

1. Introduction

영역 추정(region proposal) 기법과 R-CNN 덕분에 객체 탐지 성능이 크게 좋아졌다. R-CNN은 속도가 느리지만, Fast R-CNN에서는 convolution을 공유해서 R-CNN의 단점을 많이 개선했다. 하지만 Fast R-CNN도 여전히 영역 추정 단계에서는 병목 현상이 있습니다. 영역 추정 단계만 빼면 실시간 객체 탐지가 가능할 정도로 빠른데 말이다.

선택적 탐색(selective search)은 CPU에서 이미지당 2초가 걸릴 정도로 꽤 느리다. 이후에 나온 EdgeBox를 활용하면 영역 추정 단계가 이미지당 0.2초가 걸리지만, 여전히 느린 속도다.

Fast R-CNN은 기본적으로 GPU를 이용하지만, 영역 추정은 CPU에서 수행한다. 그렇기 때문에 영역 추정 단계에서 병목 현상이 발생한다. 영역 추정을 빠르게 하기 위해서는 GPU에서 수행해야한다. 그렇다면 이는 병목 현상을 해결할 효과적인 방안이 될 수 있다. 하지만 GPU로 영역 추정을 하도록 영역 추정 네트워크를 재설계하는 경우, 어떻게 피처 맵 계산 결과를 공유할지는 다시 고민해봐야 한다.

본 논문에서는, 깊은 합성곱 신경망으로 영역 추정을 하도록 하는 알고리즘을 통해 영역 추정 계산 비용이 거의 들지 않게 했다. 객체 탐지 네트워크와 함께 합성곱 계층(피처 맵)을 공유하는 영역 추정 네트워크(RPN)를 사용한다. 테스트 단계에서 합성곱 계산 결과를 공유해 영역 추정 속도를 크게 개선할 수 있게 만들었다. (이미지당 10ms만큼)

Fast R-CNN과 같은 영역 기반 탐지기(region-based detectors)가 사용하는 합성곱 피처 맵은 영역 추정하는 데에도 사용될 수 있다. 이 피처 맵에 몇 가지 합성곱 계층만 더하면 RPN을 구축할 수 있다. RPN은 객체의 대략적인 경계 박스를 찾아주고, 동시에 객체 존재 여부를 점수로 표현한다. 또한 RPN은 end-to-end 훈련이 가능하다.

RPN은 다양한 스케일과 가로세로 비율을 갖는 영역 추정 경계 박스를 효과적으로 예측하도록 설계됐다. 기존 모델과 다르게, Faster R-CNN은 앵커 박스(anchor boxes)를 사용한다. 앵커 박스는 여러 스케일과 가로세로 비율을 사용한다. 앵커 박스를 사용하면 다양한 스케일과 가로세로 비율을 갖는 이미지나 필터를 사용하지 않아도 되기 때문에, 즉 단일 스케일 이미지만 사용해도 되기 때문에 속도가 빠르다.

RPN과 Fast R-CNN 객체 탐지 네트워크를 결합하기 위해, 영역 추정 파인 튜닝과 객체 탐지 파인 튜닝을 번갈아가며 수행한다. 이런 훈련 방식으로 영역 추정과 객체 탐지 작업끼리 합성곱 피처를 공유할 수 있고, 속도도 빨라진다.

3. Faster R-CNN

  • Faster R-CNN 과정 개똥같은 그림...

Faster R-CNN은 두 가지 모듈로 이루어져 있다. 첫 번째 모듈은 영역 추정을 위한 깊은 합성곱 네트워크, 두 번째 모듈은 객체 탐지 모듈이다. 어텐션 메커니즘과 유사하게 영역 추정 네트워크(RPN)는 탐지기(detector)가 어디에 주목해야 하는지 알려준다.

  • Faster R-CNN의 구조

순서

  1. 먼저 input image를 합성곱 계층을 활용해 합성곱 연산 수행.

  2. convNet으로 피처 맵을 만들고 피처 맵은 RPN과 분류기(classifier)에 전달한다.
    피처 맵이 RPN과 분류기에 동시에 전달된다 : RPN과 분류기가 피처 맵을 공유해서 사용한다는 의미이다.

  3. RPN은 피처 맵을 기반으로 객체가 있을 만한 곳을 찾아찾고 영역 추정을 한다. 그리고 영역 추정 결과를 RoI pooling한다.

  4. 최종적으로, 피처 맵과 영역 추정 경계 박스를 활용해 객체 탐지를 수행한다. 여기서 RPN은 객체가 어디에 있을지, 즉, 탐지기가 어디에 주목을 해야 하는지 말해준다.
    Faster R-CNN은 영역 추정과 이미지 분류 모두를 하나의 통합 네트워크에서 수행하여 영역 추정을 독립된 모듈(CPU에서)로 수행하는 Fast R-CNN의 단점을 보완했다.

3.1 Region Proposal Networks

RPN(Region Proposal Networks)은 크기에 상관없이 이미지 전체를 입력받고 영역 추정 경계 박스를 반환한다. 각 경계 박스는 객체가 있는지의 여부를 점수로 나타낸다. RPN은 영역 추정 경계 박스를 만들기 위해, 슬라이딩 윈도우 방식을 적용한다.

  • RPN 구조

RPN 순서

  • 각 슬라이딩 윈도우는 작은 차원의 피처로 매핑된다. (ZF에서는 256차원, VGG에서는 512차원) 슬라이딩 윈도우로 구한 피처는 첫 번째는 3. 분류 계층(cls layer)이고, 두 번째는 4. 경계 박스 회귀 계층(reg layer)으로 두 가지 전결합 계층에 입력된다.

3.1.1 Anchors

각 슬라이딩 윈도우의 중심 위치마다 여러 경계 박스 영역을 예측한다. 각 슬라이딩 윈도우 위치마다 최대로 예측할 수 있는 경계 박스 영역 개수는 k개다. 경계 박스 하나에는 총 4가지 좌표값이 있으므로 k개 경계 박스에는 좌표값이 4k개가 있다. 따라서 회귀 계층(reg layer)은 좌표값을 4k개 갖는다. 그리고 경계 박스 하나에는 객체일 확률과 객체가 아닐 확률로 두 가지 확률값이 있기 때문에 분류 계층(cls layer)은 2k개 점수값을 갖는다.

Translation-Invariant Anchors

Faster R-CNN의 중요한 특성인 위치 불변성(Translation-Invariance)이란 이미지 안에서 객체 위치가 변하더라도 같은 객체로 인식하는 특성이다. Faster R-CNN의 RPN은 슬라이딩 윈도우 방식으로 이미지의 전체 영역을 훑기 때문에 위치가 변해도 같은 객체로 인식할 수 있다. 반면, MultiBox 기법은 위치 불변성이 없어서 객체 위치가 변하면 같은 객체라고 판별하지 못한다.
위치 불변성은 모델의 크기도 줄여준다. MultiBox는 (4 + 1) x 800차원의 전결합 계층을 갖지만 Faster R-CNN은 (4 + 2) x 9차원의 전결합 계층을 갖는다(k=9일 때). 따라서Backbone 모델이 VGG16일 때, 총 출력 계층의 파라미터 개수는 2.8 x 10⁴개(= 512 x (4+2) x 9)로 MultiBox 출력 계층이 갖는 파라미터보다 훨씬 적다. 파라미터가 적은 덕분에 PASCAL VOC와 같이 작은 데이터셋에서도 과대적합 가능성이 적다.

Multi-Scale Anchors as Regression References

멀티 스케일 예측에는 세 가지 방법이 있다.
(a) 이미지 피라미드 방식, (b) 필터 피라미드 방식, (c) 앵커 박스 방식

(a) OverFeat, SPP-net에서 사용한 이미지 피라미드 방식으로 입력 이미지를 다양한 크기(멀티 스케일)로 조정해서 각 스케일마다 피처 맵을 구한다. 효율적인 방법이지만 시간이 오래 걸린다.

(b) 필터(슬라이딩 윈도우)를 다양한 크기(멀티 스케일)로 사용하는 방법으로 피처 맵은 하나지만 다양한 필터를 사용해 풀링하는 방식이다.

본 논문에서는 기존에 사용하던 이미지 피라미드, 필터 피라미드보다 더 빠르고 효율적인 앵커 피라미드(pyramids of anchors) 방식을 소개한다. 다양한 크기의 앵커 박스를 활용해 객체 분류, 경계 박스 회귀를 수행한다. 앵커 피라미드 방식을 적용하면 추가 연산 없이 피처를 공유할 수 있어 효율적이다.

3.1.2 Loss Function

RPN을 훈련하기 위해, 각 앵커 박스마다 이진 분류를 수행한다. 앵커 박스에 객체가 있는지 없는지 여부를 이진 분류하는 것이다.

이런식으로 ~ 글씨 너무 못썼네ㅠ

손실 함수 수식

i : 앵커 박스 인덱스
p_i : i번째 앵커 박스가 객체일 확률
p_i : ground-truth label (positive이면 1, negative이면 0 : negative라는 건 배경이라는 의미.
t_i : 예측 경계 박스의 4가지 좌표값
t
_i : 실제 경계 박스의 4가지 좌표값
L_cls : 분류 손실 두 가지 클래스(객체 vs. 객체가 아님)에 대한 로그 손실.
L_reg : 경계 박스 회귀 손실( 회귀 손실값은 positive 앵커 박스일 때만(객체 일 때만) 활성화 된다. negative일 때, 곧 배경일 때는 경계 박스를 구할 필요 없으니까!)

경계 박스 회귀에 사용하는 파라미터
4개의 좌표값을 갖고 있는 하나의 벡터를 의미.

x, y, w, h는 각각 경계 박스의 (x, y)좌표와 너비(w), 높이(h)를 의미하고 x, x_a, x*는 예측 경계 박스, 앵커 박스, 실제 경계 박스를 뜻한다.

3.1.3 Training RPNs

RPN은 확률적 경사 하강법(SGD)과 역전파로 end-to-end 훈련을 할 수 있다. 앞서 여러 앵커 박스를 만들어 영역 추정을 한다. 그런데 모든 앵커 박스마다 손실 함수를 적용해 최적화하면 negative label에 치우친 결과를 낸다. 왜냐하면 미지 안에서 객체가 차지하는 공간 비율보다 배경이 차지하는 비율이 더 크기 때문에 positive label보다 negative label이 압도적으로 많다. 그래서 손실 함수를 계산하기 위해 하나의 이미지에서 앵커 박스 256개를 무작위로 샘플링한다.

positive 앵커와 negative 앵커를 1:1 비율로 뽑고 positive 앵커 128개, negative 앵커 128개가 된다. 훈련할 때 새로운 계층은 '평균 0, 분산 0.01인 가우시안 분포에서 뽑은 가중치'로 초기화한다. 나머지 모든 계층(= 공유하는 합성곱 계층)은 이미지넷 분류 영역에서 사전 훈련된 모델의 가중치로 초기화한다.

3.2 Sharing Features for RPN and Fast R-CNN

RPN과 Fast R-CNN이 피처를 공유하는 방법

PN과 Fast R-CNN은 합성곱 피처를 서로 다른 방법으로 독립적으로 훈련한다. 그렇기 때문에 RPN과 Fast R-CNN이 합성곱 피처를 공유하면서도 서로 다른 방법으로 분리해서 사용할 수 있는 Alternating training 훈련방식을 사용한다.

먼저 RPN을 훈련하고, 이어서 영역 추정 경계 박스를 사용해 Fast R-CNN을 훈련한다. Fast R-CNN으로 튜닝된 네트워크는 다시 RPN을 초기화하는 데 사용한다. 이런 절차를 계속 반복한다. 그러면 RPN과 Faster R-CNN이 피처를 공유하면서도 독립적인 방법으로 훈련할 수 있다.

4-Step Alternating Training.

이 논문에서는 피처를 공유하면서 훈련하도록 실용적인 4단계 훈련 알고리즘을 채택한다.

  1. 첫 번째 단계에서는, 3.1.3에서 설명한 바와 같이 RPN을 훈련한다. 이 네트워크는 이미지넷으로 사전 훈련된 모델로 초기화하고 영역 추정 작업을 위해 end-to-end 파인 튜닝한다.

  2. 두 번째 단계에서는, 첫 번째 단계에서 생성한 영역 추정 경계 박스를 활용해 독립적인 Fast R-CNN을 훈련한다. 이 네트워크도 이미지넷으로 사전 훈련된 모델로 초기화한다. 지금까지는 RPN과 Fast R-CNN이 합성곱 피처를 공유되기 전이다.

  3. 세 번째 단계에서는, RPN 훈련 초기화를 위해 Fast R-CNN을 사용한다. 다만, 공유된 합성곱 계층은 고정하고, 오직 RPN 계층만 파인 튜닝한다. 이제 RPN과 Fast R-CNN은 합성곱 계층을 공유한다.

  4. 마지막 단계에서는, 공유된 합성곱 계층을 역시 고정한 채로 오직 Fast R-CNN 계층만 파인 튜닝한다. 이런 방식으로 RPN과 Fast R-CNN은 같은 합성곱 계층을 공유하면서 단일 네트워크를 구성할 수 있다.

5. Conclusion

본 논문에서는 빠르고 정확한 영역 추정을 하기 위해 RPN을 제안한다. RPN과 객체 탐지기가 합성곱 피처를 공유함으로써 영역 추정 비용을 크게 줄였다. Faster R-CNN은 통합된 딥러닝 기반 객체 탐지 시스템으로, 실시간 객체 탐지가 가능할 정도로 빠르고 정확도도 기존 모델들보다 우수하다.

Faster R-CNN paper

profile
공부한 것들을 정리하는 블로그

0개의 댓글