Faster R-CNN 개요
-
Fast R-CNN은 R-CNN에 비해 속도와 성능을 향상시켰지만, 여전히 Region Proposal(Selective Search)에 시간이 많이 걸리는 한계가 있으며 이를 해결하기 위해 Faster R-CNN은 RPN(Region Proposal Netwrok)을 도입해 속도를 대폭 개선함.
-
RPN은 Region proposal을 보다 정교하게 추출하기 위해 다양한 크기와 가로세로비를 가지는 bounding box인 Anchor box를 도입함.
-
Paper : Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Key-Points
Anchor box
- Anchor box는 feature map의 각 위치에서 미리 정의된 다양한 크기와 비율의 박스로, RPN이 이 anchor를 기준으로 물체 존재 여부와 박스 좌표를 학습 및 보정하기 위해 사용된다.
- 다양한 크기의 객체를 감지하기 위해 지정한 위치에 사전에 정의한 서로 다른 크기(scale)와 가로세로비(aspect ratio)를 가지는 bounding box인 Anchor box를 생성하여 다양한 크기의 객체를 포착하는 방법을 제시함.
- 논문에서는 3가지 sacle과 aspect ratio를 가지는 총 9개의 서로 다른 Anchor box를 사전에 정의함.
- 여기서 scale은 anchor box의 width, height의 길이를, aspect ratio는 width, height의 길이의 비율을 의미하며, aspect ratio가 1:1일 때의 anchor box의 넓이를 유지한 채 나머지 ratio를 설정함.
- anchor box는 원본 이미지의 각 grid cell의 중심을 기준으로 생성하며, 원본 이미지에서 sub-sampling ratio를 기준으로 gird를 구성하고, anchor box를 생성하는 기준점인 anchor를 고정한다.
- 예를 들어, 원본 이미지의 크기가 600x800이고 sub-sampling ratio가 1/16이라 할 때, 생성되는 anchor의 수는 아래와 같다.
- grid cell 개수 : 600/16 x 800/16 = 1900
- anchor box (9종) 개수 : 1900 x 9 = 17100
RPN (Region Proposal Network)
- RPN은 객체가 있을 법한 영역(Region proposal)을 찾는 네트워크로, 아래와 같이 동작한다.
- Feature Map 추출
- 입력 이미지를 CNN(예: VGG16)에 통과시켜 feature map을 얻는다.
- 예 8x8x512 feature map
- Anchor Box 생성
- feature map의 각 위치(cell)에 대해 다양한 크기와 비율의 anchor box를 원본 이미지에 설정함.
- Feature Map의 한 셀 → 원본 이미지의 9개 후보 박스 : 8x8x9 = 576개 anchor box.
- anchor box는 외부에서 미리 정의되어 테이블로 가지고 있다가, bounding box를 예측하고 loss를 계산할 때 사용됨.
- class score 계산
- 위에서 얻은 feature map에 대하여 3x3 conv 연산을 적용하며, 이때 feature map의 크기가 유지될 수 있도록 padding을 추가한다.
- 3x3 conv 연산의 출력에 1x1 conv 연산을 적용하여 객체가 포함되어 있는지 여부를 출력함.
- 예: 8x8x512 feature map 을 입력받아 8x8x2(객체 여부)x9(후보 anchor box)이 출력됨.
- box 보정값 계산
- 3x3 conv 연산의 출력에 1x1 conv 연산을 적용하여 anchor box에 따른 box 보정 좌표 4개를 얻는다.
- 예: 8x8x512 feature map 을 입력받아 8x8x4(box 보정 좌표)x9(후보 anchor box)이 출력됨.
- RPN을 통해 출력된 grid cell 마다 anchor 개수만큼의 region proposal들은 이후 class score에 따라 상위 N개만 추출하여 NMS를 적용 후 최적의 proposal만을 Fast R-CNN에 전달하게 된다.
Multi-task loss
- RPN과 Fast R-CNN을 파트를 학습시키기 위해 Multi-task loss를 사용하며, RPN에서는 객체의 존재 여부만을 분류하는 반면, Fast R-CNN에서는 배경을 포함한 class를 분류한다는 점에서 차이가 있다.
- : mini-batch 내의 anchor box의 index
- : anchor 에 객체가 포함되어 있을 확률 (score)
- : 정답 라벨 (1 = 객체 있음, 0 = 배경)
- : 예측된 bounding box 회귀값 (anchor 대비 offset)
- : GT box 좌표
- : mini-batch 내 anchor의 개수
- : positive anchor의 개수
- : 두 손실 간 가중치 (논문에서는 10)
- : 분류 손실
- anchor가 객체인지 배경인지 예측함
- binary cross-entropy (log loss)
- : 회귀 손실
- positive anchor의 위치 보정 (bounding box regression)
- Smooth L1 loss :
Faster R-CNN 구조 및 학습
- Faster R-CNN의 학습 과정은 두 개의 네트워크(RPN + Fast R-CNN)를 순차적으로, 그리고 부분적으로 공유하며 학습하는 방식이다.
1) Feature extraction
- pre-trained된 VGG16 모델에 800x800x3 크기의 원본 이미지를 입력하여 50x50x512 크기의 feature map을 얻는다.
- 여기서 sub-sampling ratio는 1/16이 된다.
2) Generate Anchors
- region proposals를 추출하기에 앞서 원본 이미지에 대하여 anchor box를 생성하는 과정이 필요하며, feature extraction으로 부터 나온 50x50의 grid cell을 기준으로 원본 이미지에 50x50개의 grid cell이 생성되고, 각 cell 마다 9개의 anchor box가 생성된다.
- 이 과정은 Anchor generation layer에서 수행되며, 총 22500(50x50x9)개의 anchor box가 생성된다.
3) Class score and Bounding box regressor
- RPN은 feature map을 입력 받아 anchor에 대한 class score, bounding box regressor을 반환한다.
- class score는 50x50x2x9 사이즈가 되고, bounding box regressor는 50x50x4x9 사이즈가 반환된다.
4) Region proposal
- Proposal layer에서 2번 과정에서 생성된 anchor box들과 RPN에서 반환한 class scores와 bounding box regressor를 사용하여 region proposals를 추출하는 작업을 수행한다.
- NMS를 적용하여 필터링을 적용한 후 class score 상위 N개의 anchor box를 추출한다.
- regression coefficients를 anchor box에 적용하여 anchor box가 객체의 위치를 더 잘 감지하도록 조정한다.
정리
참고
- Faster R-CNN 논문(Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks) 리뷰
- [Object Detection] Faster R-CNN (NIPS2016) 엄밀한 리뷰
- [딥러닝] Object detection (2)(R-CNN / Fast R-CNN / Faster R-CNN 총정리)
- Object Detection and Classification using R-CNNs | Telesens
- PR-012: Faster R-CNN : Towards Real-Time Object Detection with Region Proposal Networks - YouTube