티스토리 뷰

 

 
1. Introduction 
R-CNN이 발전해준 덕분에 image detection은 엄청난 발전을 이뤘다. 하지만 region proposal을 진행하는 데에 2초나 걸리면서 시간 및 연산량 문제가 계속 문제였다. 이를 보완하고자 한 것이 Faster R-CNN이다.

연산량을 줄이기 위해서는 

1)region proposal 진행 후 그대로 CPU에 올린 것을 GPU에 올리는 것으로 바꿨다.

2) region-based dectector에서 사용한 convolutional feature map는 region proposal을 생성하는 데에도 쓰일 수 있다. 즉, detection module과 convolution layer를 공유해서 region proposal가 효율적으로 이루어지게 했다. 합성곱 맨 위층에 convolutional feature로 이루어진 RPN을 더해줘서 localization의 연산량 및 시간을 줄여주고자 했다. 이러한 RPN은 region proposal이 scale과 비율이 달라도 효율적으로 예측하기 하기 위함이다. 저자는 효율적인 novel "anchor" box를 제시한다. 다른 scale과 aspect 비율에도 적합한 box이다. 이를 활용해서, 밑의 맨 오른쪽 그림처럼 해놓았는데, regression reference의 피라미드 구조로, image, filter를 나열하게 한다. 이렇게 RPN, anchor box를 통해  하면서 연산량, 시간이 아주 줄어들었다고 한다. 

2. Faster R-CNN 
간단히 얘기하면, Fater R-CNN = RPN + Fast R-CNN이다.

크게 3 가지 구조로 이어져 있다.

1. BackBone - 입력 이미지를 feature map으로 변형시켜주는 네트워크 (ZF & VGG16 이용)

2. RPN - 영역을 제안해주는 deep fully convolutional 네트워크
3. Fast R-CNN - Fast R-CNN detector로 제안된 영역을 이용하는 구조(RoI pooling 수행)

이 전체 시스템은 single, unified network으로 하나의 신경망이 모든 과정을 통합하여 객체 검출을 수행하며, RPN 모듈은 Fast R-CNN 모듈에게 어떤 곳을 봐야할지 제안해주는 역할이다.

3.에서 Fast R-CNN의 Classification과 Bounding-box regression을 수행하는 detection module(RoI pooling 수행)을 그대로 사용한다. 참고로 RoI pooling은 각각 사이즈가 다른 region proposal에 대해 동일한 크기의 region proposal로 변환해주는 레이어이다.


3.1 Region Proposal Network
이 논문의 핵심적인 모델이라 할 수 있다. input은 image 전체(backbone으로 추출된 feature map)이고, output은 object proposal이 된 직사각형 집합이다. Fully convolutional network(FCN)이 이 모델을 Fast R-CNN의 detecion module의 계산d을 공유하고 싶기 때문에 사용한다. 이에 대해서는 뒤에 더 얘기할 것이다. 

3.1.1 Anchors

이후 이 input이 들어오면 sliding window의 3x3 크기의 window를 이용해 feature map의 픽셀 전부 convolution 연산을 진행한다. 이렇게 동시에 여러 개의 region proposal이 이뤄진다. If backbone network == ZF -> 256-dimension의 output, if backbone network == VGG-16 -> 5120-dimension의 ouptput이 나온다.

Output인 proposal된 직사각형 집합은 cls layer(Classification layer, \(L_{cls}\)))와 reg layer(Regression layer, \(L_{reg}\))으로 이루어져 있다. 각 위치마다 최대 가능한 제안의 수는 k라고 하면, cls layer는 각 제안에 대한 객체 또는 객체가 아닌 확률을 추정하는 2k개의 점수를 출력하며,  reg layer는 k개의 상자를 인코딩하는 4k개의 출력을 가진다. cls layer에서 bounding box 안에 객체가 있으면 1, 없으면 0이다. reg layer에서는 bounding box 4개의 정보( 박스의 중심 좌표 x, y, 그리고 bounding box의 높이와 너비)가 출력된다. 이로써 bouding box는 Sliding Window의 중심 좌표를 기준으로 총 9 개가 생성된다.

anchor box(bounding box) 제시되는 방식

Anchor box는 region proposal을 생성하는 Faster R-CNN에서 제시된 고유 방식이라고 할 수 있다. 9 개의 고정된 크기로 된 Anchor box를 생성하는데, 이때 Scale의 종류는 128, 256, 그리고 512 픽셀로 총 3가지가 있다. 또, ratio는 1:1, 2:1, 그리고 1:2로 총 3가지가 있습니다. 3가지의 Scale과 3가지의 Ratio로 총 9가지의 다른 Anchor box를 생성할 수 있다. Feature map의 각 픽셀에서 Sliding Window가 적용될 때 이 9가지의 Anchor box가 사용되어서 region Proposal를 생성될 때 참고됩니다. 참고된 Anchor box의 중심 x, y좌표 값과 너비, 높이 정보는 reg layer를 거쳐서 보정되어 더 정밀한 bounding box가 됩니다.

 

Translation-Invariant Anchors

이미지 속 객체의 위치가 달라지더라도 동일한 객체로 인식되는 Anchor이다. 

 

이러한 RPN 구조를 토대로 학습하는 방법은 다음과 같다. 우선 mini-batch 구성을 설명하겠다. mini-batch는 256개의 샘플(128개의 Positive, 128개의 Negative 샘플)로 구성된다.

Positive 샘플이 되기 위해서는 두 가지 중 하나의 조건을 만족하면 된다. 첫 번째, Ground-truth box와 비교했을 때 IoU 점수가 가장 높은 Anchor box이면 Positive로 labeling 된다. 두 번째 조건은 Ground-truth box와 Anchor box를 비교했을 때 IoU 점수가 0.7보다 크면 Positive로 labeling된다. 보통 두 번째로도 결정이 될 것 같다고 생각이 든다. 하지만, 첫 번째를 추가한 이유는 Anchor box가 두 번째 조건을 만족 못하는 경우가 생겨서, Positive 샘플이 안 생기는 경우를 방지하고자 함이다. 그리고 Negative 샘플이 되기 위해서는 ground-truth box와 비교했을 때, anchor box의 IoU 점수가 0.3보다 작으면 된다. 이렇게 정의한 positive & Negative 샘플로 mini-batch를 구성하고, 여기서 만약 positive 샘플의 개수가 128개보다 적다면, 부족한 만큼 negative 샘플로 보충한다.

여러 스케일과 종횡비의 앵커 상자를 참조하여 바운딩 박스를 분류하고 회귀한다. 이는 단일 스케일 이미지와 특징 맵에만 의존하며, 단일 크기의 필터 (특징 맵 상의 슬라이딩 윈도우)를 사용한다.

 

3.1.2 Loss Function

i: mini-batch 속 샘플의 인덱스 num
p: RPN이 predict한 score 값 (Bounding box안에 객체가 있다고 predict하면 1, 없다고 predict하면 0)
t: RPN이 predict한 중심 x, y 좌표와 높이 너비 값
p*: Ground-truth의 score 값
t*: Ground-truth의 중심 x, y 좌표와 높이 너비 값
Ncls: mini-batch 속 샘플의 개수로 256
Nreg: 2400으로 정의
λ: 10으로 정의

Training Loss는 Classification Loss와 Regression Loss로 정의된다.

Faster R-CNN 학습

Faster R-CNN = RPN + Fast R-CNN인데, backbone 네트워크의 파라미터를 공유할 수 있게 학습시키는 게 목표이다. 그렇게 하기 위해서는 각각의 모듈을 번갈아가며 학습시키는데 Alternating Training이라고 한다. 논문에서 총 4가지의 step을 제시한다.
First step: conv layers를 ImageNet pre-trained weights로 초기화하고, Training Loss 함수를 사용하여 RPN을 fine-tuning한다.
Second step: 1을 다시 ImageNet pre-trianed weights로 초기화한다. 이후 2의 parameter는 수정되지 않게 고정하고, RPN의 region proposal을 활용해 3을 fine-tuning한다.
1번과 2번 step을 거쳤을 때는 아직 2와 3은 1의 parameter를 공유하지 않지만, 3번과 4번의 step을 거치며 2와 3은 1의 parameter를 공유하게 된다
Third step : 1의 parameter를 고정하고 2를 다시 fine-tuning
Fourth step : 1의 parameter를 여전히 고정하고 3을 fine-tuning

이렇게 전부 같은 parameter를 가지게 된다.

 

결과

여러 dataset과 method를 섞어서 결과를 가져왔다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함