Perception/Object Detection

[Object Detection] Fast R-CNN

고집호랑이 2023. 5. 23. 07:23

이전에 배운 R-CNN은 다음과 같은 한계점이 있었습니다.

  • 개별 이미지에서 Region Proposal을 통해 뽑은 2000개의 영역 모두에 대해서 각각 CNN feacture extract을 수행하기 때문에 detect 시간이 굉장히 오래 걸린다.
  • 2000개의 영역을 crop과 warp하는 과정에서 data 손실이 날 수도 있다.
  • end-to-end 딥러닝이 아니기 때문에 학습시간이 오래걸린다.

 

Fast R-CNN은 R-CNN의 한계점을 개선시키고자 나온 모델로 다음과 같은 방법을 사용함으로써 R-CNN의 한계점을 극복했습니다.

  • SPP Layer와 비슷한 ROI Pooling Layer을 사용
  • SVM을 softmax로 변환

 

ROI Pooling Layer

ROI Pooling Layer는 Fast R-CNN의 가장 두드러지는 특징으로 이전 포스팅에서 설명했던 SPP Layer와 유사합니다.

 

Fast R-CNN 또한 원본 이미지만 CNN을 통과시켜 feature map을 만들고 Selective Search로 뽑은 2000개의 영역을 feature map에 mapping 시키는 방법을 사용하는데, 이때 mapping된 각 영역들의 서로 다른 크기를 동일하게 만들어주는 것이 ROI Pooling Layer입니다.

 

ROI Pooling Layer ex

 

위 그림은 ROI Pooling Layer을 적용한 예시로 feature map에 mapping된 영역을 2 x 2로 분할한 후, 각 영역에서의 Max Pooling을 적용하여 2 x 2 크기의 결과를 출력하였습니다.

 

이렇게 ROI Pooling Layer는 mapping된 영역을 일정한 크기로 분할한 후 Max Pooling을 적용하여 서로 다른 영역들의 크기를 동일하게 만들어줍니다.

 

지금까지의 설명으로는 "어? 그러면 ROI Pooling Layer는 SPP Layer와 같은 거 아닌가?" 라고 생각하실 수 있습니다.

 

SPP Layer

 

하지만 SPP Layer는 위 그림과 같이 1 x 1, 2 x 2, 4 x 4 총 3개의 spatial bin(공간 격자) 즉 하나의 영역에 여러 개의 spatial bin을 사용하는 반면에 ROI Pooling Layer는 오직 하나의 spatial bin만을 사용합니다.

 

이때 ROI Pooling Layer에서는 주로 7 x 7 크기의 spatial bin을 사용합니다. 이렇게 하나의 spatial bin을 사용함으로써 overfitting(과적합) 문제를 줄일 수 있다고 합니다.

 

또한 SPP Layer의 경우 출력 결과를 모두 펼쳐 1차원으로 만들어버리는 반면에 ROI Pooling Layer의 출력 결과는 면적 사이즈만 고정되고 depth는 이전의 feature map가 동일하게 출력됩니다.

 

예를 들어 원본 이미지가 CNN을 통과해 만들어진 feature map의 depth가 256이고 7 x 7 크기의 spatial bin을 사용한다고 할때,  ROI Pooling Layer의 출력 크기는 <7 x 7 x 256>이 되는 것이죠.

 

ROI Pooling Layer

 

위의 그림과 같이 8 x 4 크기의 ROI와 14 x 7 크기의 ROI에 7 x 7 크기의 spatial bin을 사용해 ROI Pooling Layer을 적용시킨다고 합시다. 14 x 7 ROI는 세로 길이인 14와 가로 길이인 7이 모두 7로 나누어 떨어지기 때문에 영역을 균일하게 나눌 수 있지만 8 x 4 ROI는 7 x 7 영역으로 균일하게 나눌 수 없을 뿐더러 나누기조차 애매합니다.

 

이때 Fast R-CNN은 별도로 존재하는 logic을 사용하여 영역을 나누거나 resize 함수를 이용해 부족한 크기는 늘리는 방법을 이용해 해결한다고 합니다. 

 

이렇게 ROI Pooling Layer는 어떤 크기의 영역이라도 7 x 7 크기의 spatial bin을 이용해 항상 동일한 크기로 만들어줍니다.

 

Fast R-CNN의 전반적인 과정

ROI Pooling Layer가 사용된 Fast R-CNN의 전반적인 과정은 다음과 같습니다.'

 

Fast R-CNN의 과정

1. 원본 이미지에서 Selective Search을 이용해 물체가 있을만한 2000개의 영역을 뽑습니다.

2. 원본 이미지를 pretrained된 CNN에 통과시켜 feature map을 만듭니다.

3. 2000개의 영역을 feature map에 mapping 시킵니다.

4. mapping된 2000개의 각 영역들을 ROI Pooling Layer에 통과시켜 고정된 크기의 feature vector를 얻습니다.

5. feature vector는 flatten된 후 2개의 FC(Fully Connected) Layer를 거쳐 Classification과  Bounding box regression을 수행하기 위해 두 부분으로 나뉩니다.

6-1. softmax를 통과하여 해당 영역이 어떤 class에 속하는지 분류합니다. (Classification)
6-2. selective search로 찾은 box의 위치를 조정해 줍니다. (Bounding box regression)

 

Multi Task Loss

Fast R-CNN은 Classifiaction 과정에서 SVM 대신 softmax를 사용하면서 비로소 Classification과 Bounding box regression을 함께 반영한 loss 함수를 만들어 학습에 사용할 수 있었습니다.

 

그 loss 함수를 Multi - task Loss 함수라고 하며, 수식은 다음과 같습니다.

 

Multi task loss
multi task loss explain

위 그림에서 나오는 각 기호들의 설명은 다음과 같습니다. 

  • $p$는 softmax를 통과해서 나온 (K + 1)개의 각 class에 해당할 확률 값(총 K개의 class + 배경일 확률)
  • $u$는 ground truth class score(해당 class의 값만 1, 나머지는 0)
  • $t^u$는 예측한 bounding box 좌표를 조정하는 값
  • $v$는 실제 bounding box까지 조정해야 하는 값 (위의 그림에는 잘못 설명되어 있음

 

Fast R-CNN은 Classification loss로는 Log loss를 사용하고 Regression loss로는 Smooth L1 loss를 사용하는데, 이 두 loss 함수를 합쳐 Multi - task Loss 함수를 만들었습니다.

 

Smooth L1 함수

 

이때 Smooth L1 loss 함수는 위 그림에서의 빨간색 그래프와 같이 <-1에서 1 사이의 구간>에서는 2차 함수이고 <그 밖의 구간>에서는 1차 함수인 오류함수입니다.

 

이는 예측값과 실제 값 사이의 큰 차이에 대해 업데이트 값이 너무 커져 학습에 방해가 되는 것을 방지하기 위해서 사용되는 함수입니다. 

 

결론

Fast R-CNN ROI Pooling Layer을 통해 detect 시간을 단축하고 crop과 warp를 통한 data 손실을 줄였으며SVM을 softmax로 변환Classification과 Regression을 함께 역전파로 학습시키면서 학습 시간도 크게 줄였습니다.

 

Fast R-CNN 성능 비교

 

위 그림을 보면 알 수 있듯이 Fast R-CNN의 mAP는 미미하지만 R-CNN보다 높아졌으며, 학습 시간과 객체 검출 시간은 이전 모델들보다 월등히 단축된 것을 확인할 수 있습니다.

 

하지만 region proposal은 CPU를 사용해야만 수행할 수 있으며, CNN 외부에서 실행되기 때문에 detect 시간을 늦추는 요인이 됩니다. 실제로 한 장당 2.3초라는 detect 시간은 사실 빠른 것이 아니며 실시간으로 사용하기에는 역부족이죠.

 

R-CNN 계열의 최종 모델인 Faster R-CNN은 어떻게 이런 문제점을 해결하고 성능을 더 향상시켰는지 다음 포스팅에서 알아보도록 하겠습니다.

 

Reference

 https://www.inflearn.com/course/딥러닝-컴퓨터비전-완벽가이드/dashboard - 인프런 강의

 

https://89douner.tistory.com/90

 

https://yeomko.tistory.com/15