오늘은 Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks에 대한 간단한 리뷰이다.
Faster R-CNN은 두 가지 모듈로 구성되어 있는데, 첫 번째는 region을 propose하는 cnn 모델이고, 두 번째는 Fast R-CNN detector이다.
참고로 논문에 attention이 언급되어있다!
RPN은 이미지를 입력으로 받아서, objectness score와 함께 여러 개의 object proposal을 아웃풋으로 낸다. region proposal을 생성하기 위해, feature map 위를 슬라이드하며 feature를 뽑아내고, 이 feature가 두 개의 fc layer에 들어가 bounding box regression과 classification을 수행한다.
또한 슬라이딩을 할 때마다, 여러 개의 region proposal을 예측한다. 이것을 anchor라고 하며, 3개의 크기와 3개의 비율을 적용해 총 9개의 anchor를 사용하여 RPN을 구성하였다.
이러한 접근은 translation invariant한 특성을 가지고 있고, multi-scale anchors를 사용하면서 파라미터 소모가 많지 않은 장점을 가진다.
Fast R-CNN과 똑같은 loss를 사용한다.
RPN을 학습하는데, 한 이미지에 대해서 256개의 sample anchor를 뽑고, 그것을 통해 loss를 계산한다. 이때 positive와 negative anchor의 비율은 1대1로 맞춘다.
각각 학습된 RPN과 Fast R-CNN이 feature를 공유하기 위해, 세 가지 방법을 소개한다.
1. RPN을 먼저 학습하고, proposals을 Fast R-CNN을 학습하는데 사용하기(논문에서는 이걸 사용)
2. 결합해서 한꺼번에 학습하기(구현하기 쉽지만, 학습 시간이 오래 걸림)
3. RPN에서 나온 bouding box를 Fast R-CNN의 ROI Pooling layer의 input으로 넣기(backprop을 하기 위해서는 differentiable 해야하는데 쉽지 않음)
그래서 1번을 사용한다.
4-step Alternating Training을 사용하여 학습했다고 한다.
1. RPN 학습
2. RPN에서 나온 proposal로 Fast R-CNN 학습시키기.
3. Fast R-CNN으로 RPN 학습 initialize, 이때 공유되는 layer는 얼림
4. Fast R-CNN에만 있는 layer 학습
anchor로는 128x128, 256x256, 512x512의 크기와 1:1, 1:2, 2:1 비율 총 9가지의 박스를 사용하였다. 추론 결과는 위와 같다.
또한 이미지 경계를 ㄴ머어서는 박스는 제거하였고, 20000개의 anchor를 6000개로 줄였다. 또한 심하게 겹치는 이미지에 대해서는 non-maximum suppression(NMS)를 적용하여 2000개로 또다시 줄였고, 정확도는 그대로이면서 속도는 더 빨라지도록 하였다.
표를 보면 알 수 있듯이, 좋은 성능을 보여주고 있고 속도 또한 빠르다.
다른 성능표도 많은데, 생략하였다.
오늘은 R-CNN 시리즈 세 번째인 Faster R-CNN을 살펴보았다. RPN을 Fast R-CNN과 결합하여 정확도와 속도를 증가시킨 것이 특징인 모델이었다. 이걸 구현하는 과제를 한 적이 있는데, 쉽지 않았었다. 논문을 읽고 나니 어느 정도 이해가 되는 것 같다. 성능표가 많아서 비교하는 맛이 있었고, Fast R-CNN 논문과 다르게 실제 추론 사진도 많이 있었다. 다음은 내가 구도 가이드 모델을 구현할 때도 사용했던 Spatial Pyramid Pooling을 사용한 SPPNet이 될 것 같은데, 기대가 된다.