Faster R-CNN
지난번에 공부했던 Fast R-CNN은 이전 모델인 R-CNN의 단점들을 극복하였지만, Input image에서 RoI 추출을 진행하는 selective search알고리즘이 cpu단에서 연산을 수행하기에 여전히 연산 수행 속도가 느리다는 단점을 갖고 있습니다. 이 문제를 해결하기 위해 Faster R-CNN이 등장하였습니다.
Faster R-CNN에 대해 자세히 알아보기전에 Faster R-CNN과 Fast R-CNN의 차이점 무엇일까요?
그것은 바로 RoI를 추출하는 방법입니다. RoI 추출 이후 과정인 RoI pooling, Fc layer를 거쳐서 수행되는 Classification과 Bounding box Regression은 동일합니다. 그렇다면 Faster R-CNN은 어떤 방법으로 RoI를 추출하고, 이는 결과적으로 어떤 장점을 갖고왔는지 알아보겠습니다😁😁
1-1) Image를 pre-trained CNN의 입력으로 넣어 Feature Map을 추출합니다
Fast R-CNN과 마찬지로 Input Image를 CNN에 입력값으로 직접 넣습니다.
추출된 Feature map은 미리 정의된 sub-sampling ratio에 의해 크기가 정해집니다.
1-2) Image에서 grid cell을 기준으로 하여 Anchor Box를 생성합니다
Feature Map은 미리 정의된 sub-sampling ratio에 의해 크기가 정해지기에 Input image를 sub-sampling ratio으로 나눕니다. Input Image를 grid cell로 나누고, 각 grid cell을 bounding box로 생각하여 이를 Feature map에 encode하는 방식을 사용합니다. 이를 위해 Input Image에서 Anchor box를 생성하는 과정이 필요합니다.
이렇게 grid cell로 나눠진 Feature Map을 sliding window방식으로 각 grid cell에 물체가 있는지 없는지, 물체가 있다면 bounding box의 좌표는 무엇인지 추측하는 연산을 수행합니다. sliding window 방식으로 물체의 유무를 확인할 때, 고정된 크기의 bounding box를 사용할 경우 다양한 크기의 객체를 포함하지 못할 수 있다는 문제가 있어, 논문에서는 서로 다른 3개의 scale과 서로 다른 3개의 aspect ratio를 갖는 bounding box를 사용하였습니다. grid cell N개가 있고, grid cell별로 9개의 Anchor Box를 갖게 되어 최종적으로 제안되는 Anchor Box는 Nx9개가 됩니다.
2) RPN(Region Proposal Network)에 Feature Map을 입력받아 Anchor Box에 대한 추론을 합니다
RPN에서는 1-2)에서 얻은 Anchor Box들에 대해 class score를 매기고, Bounding Box Regressor를 수행하는 역할을 합니다. CNN을 통해 얻은 Feature Map에 3x3 Conv연산을 수행하고, class score를 매기기 위해 feature map에 대해 1x1 Conv 연산을 수행합니다. 이때 채널수는 2(물체가 존재하는지?)x9(Anchor Box갯수)개로 설정하여 1개의 grid cell에 존재하는 9개의 Anchor Box에 물체가 존재하는 여부를 분류합니다. 이와 동시에 Bounding Box Regressor를 위해 1x1 Conv 연산을 수행합니다. 이때 채널수는 4(Bounding Box Regressor) x 9(Anchor Box갯수)로 설정합니다. 이러한 과정을 거치게 되면 Nx9개의 Anchor Box에 대한 Class score와 Bounding Box Regressor를 파악할 수 있게 됩니다.
3) Class score가 높은 상위 Anchor Box에 NMS을 적용하여 최적의 ROI만을 추출합니다
RPN을 통해 계산된 Nx9개의 Anchor Box들의 Class score중에서 상위 N개를 선정하고, 이를 Non-Maximum suppression을 적용하여 최적의 RoI를 추출합니다
4) RoI Pooling을 거쳐서 Classification과 Bounding box regression을 수행합니다.
1-1)과정을 통해 얻은 Feature Map과 3)을 통해 얻은 RoI를 이용하여 RoI Pooling을 수행합니다.
이 과정부터는 Fast R-CNN과정과 동일합니다.
.
Multi-task Loss
Faster R-CNN에서는 새롭게 적용한 RPN과 뒷단의 Fast R-CNN을 학습시키기 위해 Multi-task Loss를 사용합니다. L_cls는 물체가 있는지 없는지 분류하는 Log Loss를 사용하였고, L_reg는 물체가 없을때를 제외한 물체의 Bbox Regreesor를 수행하는 Smooth L1 Loss를 사용하였습니다.
R-CNN Family 성능 비교
Fast R-CNN의 병목현상을 RPN을 사용하여 극복함으로써 GPU 연산을 통한 이미지 처리 속도 향상이 이루어진 것을 확인할 수 있고, GPU를 통한 RoI 추출이 가능해졌다는 장점도 가져왔습니다. 또한 RoI 추출도 end-to-end로 연산 공유가 되기에 RoI 추출 정확도를 높일 수 있다는 장점을 가져왔습니다. 이러한 장점들이 모여서 최종적으로 mAp값이 향상된 것 또한 확인가능합니다.