네이버 부스트캠프 학습 정리/9~11주차

[Object Detection] Faster R-CNN

AI쟁이J 2023. 5. 9. 23:42

지난 포스팅 Object Detection에서 다뤘던 내용이지만, Faster R-CNN은 추가로 과제도 있고 2 - stage detector에서 끝이라고 할 수 있는 모델이기에 보다 더 자세히 다루고 넘어가기로 했다.

그 전 모델인 R-CNN, Fast R-CNN의 한계에 대해 간단히 짚고 넘어가자.

다음과 같이 Faster R-CNN모델은 비로소 End-to end 모델이며, RPN을 따로 neck으로 사용하는 모델임을 알 수 있다.

 

 

위 그림은 Faster R-CNN의 전반적인 구조로, 이미지를 CNN에 넣어 이 연산을 한 번만 사용 후, feature map을 추출하는 과정은 Fast R-CNN과 같다. 하지만 Region proposal 단계에서 기존의 selective search 대신 Region Proposal Network, RPN이라는 구조를 채택했다. 객체 탐지 영역에서  selective search의 비용이 지나치게 많이 소모되기 때문에 이 구조를 통해 객체의 경계 박스와 클래스 점수를 동시에 예측하는 합성곱 네트워크로 사용할 수 있으며, end-to-end 훈련이 가능하기에 faster R-CNN의 핵심 구조이다.

위 그림을 통한 Faster R-CNN의 진행 구조를 요약하면

1. 이미지에 대한 CNN 연산을 한 번 수행한다.

2. feature map이 생성된다.

3. 의 RPN과 4.의 분류기에 해당 feature map이 전달된다. 여기서의 분류기는 Fast R-CNN의 분류기와 같으며, RPN과 분류기가 이 피처 맵을 공유해서 사용한다.

4. 의 RPN은 이 과정에서 객체가 있을 만한 곳을 추정한다.

5. 이 영역 추정 결과를 RoI 풀링한다.

6. 피처 맵과 영역 추정 경계 박스를 통해 객체 탐지를 수행한다. RPN은 객체가 있을 만한 영역에 집중하도록 돕는다.

 

Region Proposal Network (RPN)

RPN은 크기에 상관 없이 이미지 전체를 입력받는다. 이후 영역 추정 경계 박스를 반환한다.

이 경계 박스는 객체가 있을 지에 대한 여부를 점수로 나타내며, 이런 과정을 classifier와 feature map을 공유하며 합성곱 네트워크를 통해 GPU에서 처리할 수 있다. 왼쪽의 RPN 네트워크의 진행 과정을 요약하면

1. feature map에 대한 슬라이딩 윈도우를 진행한다

2. 이 윈도우는 작은 차원의 feature로 매핑되며, 두가지 전결합 계층에 입력된다. 이 두 계층은

3.의 2k scores를 가지는 분류 계층과 4k coordinates의 경계 박스 회귀 계층이다.

 

Anchor box

RPN은 다양한 스케일과 가로,세로의 비율을 갖는 앵커 박스를 사용한다. 위 그림에서 (a)의 이미지 피라미드나 (b)의 필터 피라미드와 달리 (c)의 다양한 크기를 가지는 앵커 박스를 통해 단일 스케일의 이미지를 사용해 여러 앵커 박스를 통한 훈련을 할 수 있어 속도가 빨라진다. 

위 그림의 RPN 구조에서 슬라이딩 윈도우의 중심 위치마다 여러 경계 박스 영역을 예측한다. 이 때 경계 박스의 영역 개수는 k개이며, 따라서 회귀 계층은 좌표값을 4k개 ((x,y,w,h))  갖는다. 분류 계층의 2k의 점수값은 이미지가 있을지 없을지 (0,1) 의 두 경우를 k개 가지기 때문에 2k scores를 가진다.

K = 9의 경우 9개의 앵커 박스는 3가지의 스케일과 3가지의 가로세로 비율 (1:1, 2:1, 1:2)를 결합해 9개의 앵커 박스를 만들어 낸다. 따라서 피처 맵 크기가 W x H인 경우 앵커 박스의 개수는 (W x H x k)개가 된다. 

 

 

Loss function

RPN 훈련을 위한 앵커 박스에서의 훈련에서 객체가 있는지 없는지 여부를 판단하는 이진 분류를 수행한다.

여기서 positive label은 실제 경계 박스와 IoU가 가장 큰 앵커, 그리고 실제 경계 박스와 IoU가 0.7이 넘어가는 앵커 두 경우를 모두 positive labeling을 하기 때문에 여러 앵커 박스가 나올 수 있다. 

손실 함수의 식은 다음과 같다.

앞 수식의 i는 앵커 박스의 인덱스이며, pi는 앵커 박스가 객체일 확률로, 분류 손실에 관여한다. ground-truth인 pi*는 앵커가 positive인 경우 1, negative인 경우 0이다. ti는 예측 경계 박스의 4가지 좌표 값이며, ti*는 실제 경계 박스의 좌표값이다. 따라서 L_cls는 객체 vs 객체가 아님에 대한 로그 손실이며, L_reg는 경계 박스에 대한 회귀 손실이다. 따라서 앵커 박스의 값이 negative인 경우 pi*의 값이 0이고, 따라서 회귀 손실의 값은 0이 된다. (라벨이 negative인 경우의 객체 박스에 대한 손실을 구할 이유가 없으므로)

이후 일정 값 N_cls, N_reg로 나누는 과정을 통해 정규화하며 회귀 손실의 경우 균형을 맞추기 위해 일정 값 lambda를 곱한다. 논문의 경우 N_cls = 256, N_reg = 2400을 사용하며 lambda = 10을 통해 두 값을 1/256, 1/240으로 비슷한 크기로 정규화한다.

 

NMS (Non-Maximum Suppression)

비최대 억제는 RPN에서 만든 추정 경계 박스끼리 겹치는 영역이 많은 경우 겹치는 영역을 없애기 위한 과정이다. 

훈련하는 동안 1000 x 600 픽셀의 이미지에는 약 20,000개의 앵커 박스가 생긴다. 여기서 이미지의 경계를 가로지르는 앵커 박스인 cross-boundary anchor를 제거한다.

cross-boundary anchor

그러면 약 6,000개의 앵커 박스만이 남는다.  여기서 성능을 더 높이기 위해 최대값이 아닌 앵커 박스들에 대한 삭제를 진행한다. 만약 NMS IoU의 임계값을 0.7로 설정하는 경우, 최종적으로 앵커 박스의 수가 2,000개까지 줄어든다. 

 

 

 

Reference

https://bkshin.tistory.com/entry/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Faster-R-CNN-%ED%86%BA%EC%95%84%EB%B3%B4%EA%B8%B0

 

논문 리뷰 - Faster R-CNN 톺아보기

Faster R-CNN은 기존 Fast R-CNN에 영역 추정 네트워크(RPN)를 더해 속도와 성능을 끌어올린 모델입니다. Faster R-CNN에 와서야 비로소 모든 객체 탐지 구조를 딥러닝으로 훈련할 수 있었습니다. 본 글에서

bkshin.tistory.com

 

'네이버 부스트캠프 학습 정리 > 9~11주차' 카테고리의 다른 글

[Object Detection] mAP  (1) 2023.05.19