R-CNNs Tutorial

INTRODUCTION

20170525-research-seminar-google-slides-2017-05-25-16-24-52.png
Classification+Localization과  Object detection task의 차이

Object detection은 입력 영상이 주어졌을 때, 영상 내에 존재하는 모든 카테고리에 대해서 classification과 localization을 수행하는 것을 말합니다. 입력 영상에 따라 존재하는 물체의 개수가 일정하지 않고 0~N개로 변하기 때문에 난이도가 높은 task로 알려져 있습니다.

본 글에서는 convolutional neural network(CNN) 기반의 object detection 중에서 높은 성능과 빠른 속도로 큰 주목을 받고 있는 region based CNN의 흐름을 살펴보고자 합니다.

Naive Approach

누구나 쉽게 떠올릴 수 있는 간단한 방법은, 물체가 존재할 수 있는 모든 크기의 영역(different scale & ratio)에 대해 sliding window 방식으로 이미지를 모두 탐색하면서 classification을 수행하는 것입니다.

figure6.gif (500×209) 2017-05-25 16-40-24
Sliding window approach

하지만, 탐색해야 하는 영역의 수가 너무 많기 때문에 classifier가 충분히 빠르지 않다면 연산시간이 오래 걸리는 비효율적인 방법입니다.

Region Proposals

20170525 Research seminar - Google Slides 2017-05-25 16-45-08.png
입력 영상에서 region proposal algorithm으로 물체 영역을 찾아낸 예시

이러한 sliding window 방식의 비효율성을 개선하기 위해서, 입력 영상에서 ‘물체가 있을 법한’ 영역을 빠른 속도로 찾아내는 알고리즘을 region proposal 알고리즘이라 합니다. 다양한 region proposal 알고리즘들이 논문으로 발표되었지만, survey 논문[1]을 참고해 봤을 때, selective search[2]와 Edge boxes[3] 알고리즘이 보편적으로 좋은 성능과 속도를 보여주고 있습니다.

Region proposal을 활용하면, sliding window 방식에 비해 search space가 확연하게 줄어들기 때문에 훨씬 빠른 속도로 object detection을 수행할 수 있게 됩니다.

20170525 Research seminar - Google Slides 2017-05-25 17-00-43
Region proposal 알고리즘 간의 성능 비교 [1]

R-CNN

Region Proposal + Convolutional Neural Network (CNN)

20170525 Research seminar - Google Slides 2017-05-25 18-27-11.png
R-CNN object detection system overview

R-CNN[4]은 Image classification을 수행하는 CNN과 이미지에서 물체가 존재할 영역을 제안해주는 region proposal 알고리즘을 연결하여 높은 성능의 object detection을 수행할 수 있음을 제시해 준 논문입니다. R-CNN의 수행 과정은 다음과 같습니다.

  1. 이미지를 입력으로 받음
  2. 이미지로부터 약 2000개 가량의 region proposal을 추출함 (Selective search[2] 활용)
  3. 각 region proposal 영역을 이미지로부터 잘라내고(cropping) 동일한 크기로 만든 후(warping), CNN을 활용해 feature 추출
  4. 각 region proposal feature에 대한 classification을 수행

위 과정을 통해 충분히 높은 성능을 낼 수 있지만, localization 성능이 취약함을 발견할 수 있습니다.

Rich feature hierarchies for accurate object detection and semantic segmentation.pdf(8:21페이지) 2017-05-26 11-27-37.png
Distribution of top-ranked R-CNN false positive types

저자는 논문에서 이러한 localization 취약성이 CNN이 어느 정도 positional invariance한 특성을 지니고 있기 때문이라고 설명하고 있습니다. 즉, region proposal 내에서 물체가 중앙이 아닌 다른 곳에 위치하고 있어도 CNN이 높은 classification score를 예측하기 때문에 물체의 정확한 위치를 잡아내기에는 부족하다고 볼 수 있습니다.

20170525 Research seminar - Google Slides 2017-05-26 11-57-37
Bounding-box regression 예시

이러한 취약점을 해결하기 위해, 위치를 보정해 줄 수 있는 bounding-box regression을 논문에서 제안하고 있습니다. Bounding-box regressor의 학습 목표는 region proposal P 와 정답 위치 G가 존재할 때, PG로 mapping할 수 있는 변환을 학습하는 것입니다.

Rich feature hierarchies for accurate object detection and semantic segmentation.pdf(5:21페이지) 2017-05-26 15-52-48.png
R-CNN과 타 알고리즘과의 성능 비교

이를 통해 localization 성능을 끌어올릴 수 있게 되었고, object detection task에서 CNN을 활용하지 않은 방법들에 비해 상대적으로 높은 정확도를 실험 결과로부터 확인할 수 있습니다.

하지만 R-CNN은 이미지 1장 당 region proposal의 개수만큼 CNN 연산이 필요하기 때문에 inference 속도가 매우 느리고, 학습 과정이 복합하게 여러 stage를 거쳐야 하는 등의 단점이 있습니다.


FAST R-CNN

20170525 Research seminar - Google Slides 2017-05-26 16-56-47.png
Fast R-CNN 구조

Fast R-CNN[5]은 논문의 제목에서도 알 수 있듯이, R-CNN의 단점 중 하나인 ‘속도’를 대폭 개선하기 위한 연구를 진행하였습니다.

20170525 Research seminar - Google Slides 2017-05-26 17-14-03
R-CNN과 Fast R-CNN의 feature 추출 방법

R-CNN에서 어떤 region이 주어졌을 때, 우리가 필요한 건 classification 수행에 필요한 feature를 뽑아내는 것입니다. 만약 하나의 이미지에 2,000개의 region이 존재한다고 했을 때, R-CNN은 각각의 region 마다 이미지를 cropping 한 뒤 CNN 연산을 수행하여 2,000번의 CNN 연산을 진행하게 됩니다. 이러한 비효율성을 개선하기 위해, cropping 하는 과정을 image level이 아닌feature map level에서 수행하면 2,000번의 CNN 연산이 1번의 CNN 연산으로 줄어듦으로 연산량 측면에서 훨씬 이득을 볼 수 있습니다.

하지만, classification을 수행하기 위해서는 보통 feature 크기가 각 example마다 동일해야 합니다. R-CNN에서는 다른 크기의 region들을 모두 동일하게 만들기 위해 warping을 통해 같은 크기의 이미지로 변환한 뒤 CNN 연산을 진행하였지만, warping은 사이즈를 줄이고 ratio를 변경하는 과정에서 정보의 손실이 일어나므로 좋은 방법이 아닙니다. 따라서 feature map의 다양한 크기의 region으로부터 정보의 손실 없이 일정한 길이의 feature를 추출해 낼 방법이 필요합니다.

Spatial Pyramid Pooling, RoI Pooling

20170525 Research seminar - Google Slides 2017-05-26 19-50-28.png
Spatial Pyramid Pooling

다양한 크기의 입력으로부터 일정한 크기의 feature를 추출해 낼 수 있는 방법 중 Bag-of-words (BoW)라는 방법이 있습니다. 하지만  BoW는 이미지가 지닌 특징들의 위치 정보를 모두 잃어버린다는 단점이 존재합니다. 이러한 단점을 보완하기 위한 Spatial Pyramid Pooling 은 이미지를 여러개의 일정 개수의 지역으로 나눈 뒤, 각 지역에 BoW를 적용하여 지역적인 정보를 어느정도 유지할 수 있게 됩니다.

1406.4729.pdf 2017-05-26 20-11-59.png
Spatial pyramid pooling layer의 구조

SPPNet[6]은 앞서 말씀드린 Spatial Pyramid Pooling (SPP) 기법을 CNN feature map에 적용할 수 있음을 보여 준 논문입니다.SPPNet에서 제안한 SPP layer는 feature map 상의 특정 영역에 대해 일정한 고정된 개수의 bin으로 영역을 나눈 뒤, 각 bin에 대해 max pooling 또는 average pooling을 취함으로써 고정된 길이의 feature vector를 가져올 수 있습니다. Fast R-CNN에서는 이러한 SPP layer의 single level pyramid만을 사용하며, 이를 RoI Pooling layer라고 명칭하였습니다.

20170525 Research seminar - Google Slides 2017-05-29 19-06-26.png
RoI pooling layer의 pooling 과정

RoI Pooling 또는 SPP를 수행할 feature map의 사이즈가 a \times a 이고, 이를 n \times n개의 bin으로 나눈다고 했을 때, 각 bin의 window size가 정수배가 되지 않을 경우가 있습니다. (예를 들어, 13×13 feature map을 6×6 bins으로 나눌 경우 window size가 2.167이 됩니다) SPPNet의 저자는 이러한 misalignment를 해결하기 위해 각 bin의 window size를 올림하고( win = \lceil a/n \rceil ), 각 bin을 pooling하기 위한 stride를 내림함으로써 ( str = \lfloor a/n \rfloor ) 문제 없이 pooling을 수행할 수 있었습니다.

올림과 내림 과정에서 실제 영역의 좌표값과는 약간 다르게 pooling이 진행되지만, 해당 영역을 classification하기 위한 feature를 가져오기에는 부족함이 없고, 어차피 bounding-box regressor가 한 번 더 위치를 보정해주기 때문에 object detection 성능에 큰 영향을 주지 않습니다. 하지만 pixel-level의 정확한 feature가 필요한 경우에는 이러한 근사적인 방법이 문제가 될 수 있으며 최근 발표된 논문 Mask R-CNN[11]에서는 RoI Pooling의 misalignment 문제를 개선한 RoIAlign layer를 선보였습니다.

R-CNN vs Fast R-CNN

20170525 Research seminar - Google Slides 2017-05-30 19-42-30.png
R-CNN과 Fast R-CNN의 차이점 비교

이전의 R-CNN과 RoI Pooling을 통해 개선된 Fast R-CNN의 가장 큰 차이점은 바로 속도입니다. 위 그림에서 볼 수 있듯이, 1장의 이미지에 대해 약 2000번의 CNN 연산이 필요했던 R-CNN과 달리, Fast R-CNN은 단 1번의 CNN 연산을 통해 모든 region에 대한 feature를 계산할 수 있습니다.

또 하나의 큰 차이점은 학습과정입니다. R-CNN은 아래와 같은 복잡한 과정을 통해 학습을 진행하게 됩니다.

  1. ImageNet classification 데이터로 ConvNet을 pre-train 시켜 모델 M을 얻습니다.
  2. M을 기반으로, object detection 데이터로 ConvNet을 fine-tune 시킨 모델 M'을 얻습니다.
  3. object detection 데이터 각각의 이미지에 존재하는 모든 region proposal들에 대해 모델 M'으로 feature vector F를 추출하여 저장합니다.
  4. a. 추출된 F를 기반으로 classifier (SVM)을 학습합니다.
    b. 추출된 F를 기반으로 linear bounding-box regressor를 학습합니다.

이처럼 학습이 여러 단계를 거쳐 진행되기 때문에 복잡하고 시간이 오래걸리는 단점이 있습니다. 오직 5,000여장의 이미지가 존재하는 object detection dataset인 VOC2007을 학습하기 위해 그 당시 최신 GPU인 Tesla K40을 사용해 약 84시간이 소요되었습니다.

20170525 Research seminar - Google Slides 2017-05-30 19-49-36.png
Fast R-CNN의 end-to-end 학습 과정

반면, Fast R-CNN에서는 R-CNN의 복잡한 학습 단계 대신, 한 번의 학습으로 Object detection을 위한 CNN을 구축할 수 있도록 개선하였습니다.

  • R-CNN에서는 Softmax classifier와 linear bounding-box regressor를 따로 학습했습니다.
    ⇒ 반면, Fast R-CNN에서는 두 함수의 loss를 더한 multi-task loss를 기반으로 동시에 두 가지 task를 학습합니다.
  • R-CNN에서는 여러 장의 이미지에서 랜덤하게 N개의 영역을 샘플링한 mini-batch를 구성하여 학습을 진행하였습니다. 이러한 방식을 Fast R-CNN에 적용할 경우, 샘플링한 N개의 영역이 K개의 이미지로부터 오게 되고, K가 N에 가까울 확률이 높습니다. 각 영역의 feature를 얻기 위해서는 K번의 CNN 연산이 필요합니다. (region-wise sampling)
    ⇒ Fast R-CNN에서는 이를 개선하기 위해 R-CNN의 RoI 샘플링 방식 대신, 1장 또는 2장 이내의 이미지에서 N개의 영역을 샘플링한 mini-batch를 사용함으로써 Fast R-CNN 학습에 필요한 CNN 연산량을 효율적으로 줄일 수 있었습니다. (image-centric sampling)
20170525 Research seminar - Google Slides 2017-05-31 15-43-06.png
R-CNN과 Fast R-CNN의 학습 시간 비교

위 그래프를 보시면, R-CNN과 Fast R-CNN간의 속도 차이가 상당함을 알 수 있습니다. 학습의 경우 약 10배 이상, 테스트의 경우 약 20배 이상 상대적으로 빨라졌습니다. 하지만 여기서 주목할 점은, 테스트 시간의 대부분을 차지하고 있는 것이 바로 region proposal 추출 시간이라는 겁니다. Fast R-CNN의 효율적인 구조와 GPU의 병렬처리 덕분에 약 2,000개 영역을 classification하는 데 0.32초 밖에 소요되지 않지만, CPU를 기반으로 CNN 외부에서 처리되는 region proposal 알고리즘(Selective search[2])은 약 2초 가량이 소요되어 느린 처리속도의 주범임을 알 수 있습니다. 이러한 region proposal 알고리즘의 비효율성을 개선한 논문이 바로 다음에 소개드릴 Faster R-CNN입니다.


FASTER R-CNN

20170525 Research seminar - Google Slides 2017-05-31 16-18-49.png
Faster R-CNN의 구조

Faster R-CNN[7]은 논문의 이름에서도 알 수 있듯이 ‘더욱 빠른’ object detection을 수행하기 위한 연구를 진행하였습니다. 기존 Fast R-CNN 속도의 bottleneck이었던 region proposal 생성을 CNN 외부의 알고리즘이 아닌, CNN 내부에 region proposal을 생성할 수 있는 network를 설계함으로써 더욱 빠르면서도 정확한 region proposal을 생성할 수 있습니다. Faster R-CNN은 기존의 Fast R-CNN에 Region proposal network을 추가한 것이 핵심이라고 볼 수 있습니다.

Region Proposals from Feature Map

20170525 Research seminar - Google Slides 2017-05-31 19-33-04
ZFNet[8] 논문에서 보여준 feature map activation 시각화
최근에 나온 여러 CNN visualization 논문과 weakly supervised classification CNN 논문들을 보면, classification을 위해 학습한 CNN이 어느 정도 localization 역할을 수행할 수 있음을 확인해 볼 수 있습니다. 그 이유는 바로 classification 학습 과정에서 학습되는 convolution filter들이 중요한 정보는 보존하고 불필요한 정보는 손실하는 방향으로 형성되기 때문입니다. 위 그림에서도 볼 수 있듯이, 학습된 classification CNN에 특정 이미지를 입력하고 해당 이미지로부터 얻어낸 feature map을 시각화 해 보면, 물체를 구별하는데 불필요하다고 판단되는 배경은 무시하고 실제 물체가 존재하는 위치에 대부분의 filter가 반응함을 볼 수 있습니다. 여기에 대한 자세한 내용은 Back-projecing high-level activations 라는 제목의 포스트를 참고하시면 많은 도움이 될 것입니다.

위와 같이 classification 또는 detection을 수행하는 CNN이 가진 feature map이 대략적인 물체의 위치 정보를 가지고 있다면, 이를 잘 학습하면 충분히 물체의 대략적인 위치를 잡아낼 수 있을 것이라고 짐작할 수 있습니다.

RPN: Region Proposal Network

20170525 Research seminar - Google Slides 2017-05-31 20-01-41.png
Region proposal network의 동작 과정

Faster R-CNN에서는 feature map 정보를 활용해 물체가 존재하는 위치를 출력으로 가지는 네트워크인 region proposal network(RPN)를 학습해보자는 아이디어를 제시합니다. 이를 위해 feature map 위의 N \times N 크기의 작은 window 영역을 입력으로 받고,  해당 영역에 물체가 존재하는지/존재하지 않는지에 대한 binary classification을 수행하는 작은 classification network를 만들어 볼 수 있습니다.  R-CNN, Fast R-CNN에서 사용되었던 bounding-box regression 또한 위치를 보정해주기 위해 추가로 사용됩니다. 하나의 feature map에서 모든 영역에 대해 물체의 존재 여부를 확인하기 위해서는 앞서 설계한 작은 N \times N 영역을 sliding window 방식으로 탐색하면 될 것입니다. 이러한 작동 방식은 N \times N 크기의 convolution filter, 그리고 classification과 regression을 위한 1 \times 1 convolution filter를 학습하는 것으로 간단하게 구현할 수 있습니다.

1506.01497.pdf 2017-06-01 19-30-11.png
RPN에 사용된 anchor

하지만, 이처럼 단순하게 RPN을 설계할 경우 문제가 발생할 수 있습니다. 이미지에 존재하는 물체들의 크기와 비율이 다양하기 때문에 고정된 N \times N 크기의 입력만으로 다양한 크기와 비율을 수용하기에는 부족함이 있습니다. 이러한 단점을 보완하기 위해 저자는 미리 정의된 여러 크기와 비율의 reference box k를 정해놓고 각각의 sliding-window 위치마다 k개의 box를 출력하도록 설계하고 이러한 방식을 anchor라고 명칭하였습니다. 즉 RPN의 출력값은, 모든 anchor 위치에 대해 각각 물체/배경을 판단하는 2k개의 classification 출력과, x,y,w,h 위치 보정값을 위한 4k개의 regression 출력을 지니게 됩니다. Feature map의 크기가 W \times H라면 하나의 feature map에 총 W \times H \times k개의 anchor가 존재하게 됩니다. 논문에서는 3가지의 크기(128, 256, 512)와 3가지의 비율(2:1, 1:1, 1:2)을 사용해 총 anchor k=9를 최종적으로 사용하였습니다.

Fast R-CNN과 region proposal network를 학습하기 위한 과정은 alternating optimization이라고 저자는 명칭하였는데, 과정이 꽤나 복잡합니다. 과정은 아래와 같습니다.

ImageNet 데이터로 미리 학습된 CNN M0를 준비합니다.

  1. M0 conv feature map을 기반으로 RPN M1를 학습합니다.
  2. RPN M1을 사용하여 이미지들로부터 region proposal P1을 추출합니다.
  3. 추출된 region proposal P1을 사용해 M0를 기반으로 Fast R-CNN을 학습하여 모델 M2를 얻습니다.
  4. Fast R-CNN 모델 M2의 conv feature를 모두 고정시킨 상태에서 RPN을 학습해 RPN 모델 M3을 얻습니다.
  5. RPN 모델 M3을 사용하여 이미지들로부터 region proposal P2을 추출합니다.
  6. RPN 모델 M3의 conv feature를 고정시킨 상태에서 Fast R-CNN 모델 M4를 학습합니다.

즉, RPN과 Fast R-CNN이 서로 convolution feature를 공유한 상태에서 번갈아가며 학습을 진행하는 형태임을 볼 수 있습니다. 하지만, 학습과정이 너무 복잡해서 실제 학습을 진행하려면 꽤나 고생할 것 같이 보이는데요. 논문에는 나와있지 않지만, 저자 중 한명인 R. Girshick은 당시 NIPS 논문의 마감일이 얼마 남지 않아 급하게 구현을 하다 보니 저런 비효율적인 구조가 나왔다고 ICCV 2015 튜토리얼 세션에서 솔직하게 밝힌 바가 있습니다. [9]

20170525 Research seminar - Google Slides 2017-06-01 19-53-03.png
Faster R-CNN의 Approximate joint optimization 학습 방법

Faster R-CNN 논문에는 기술되어 있지 않지만, [9]에서는 이러한 비효율적이고 복잡한 학습방법 대신, RPN의 loss function과 Fast R-CNN의 loss function을 모두 합쳐 multi-task loss로 둔 뒤, 한 번에 학습을 진행해도 위 alternating optimization 방법과 거의 동일하거나 높은 성능이 나올 수 있음을 실험적으로 증명하였습니다. 이를 통해 단 한번의 학습과정으로 더욱 빠르게 Faster R-CNN 구조를 학습할 수 있습니다.

Performance

20170525 Research seminar - Google Slides 2017-06-01 20-27-50
R-CNN, Fast R-CNN, Faster R-CNN의 성능 비교

지금까지 소개한 R-CNN과 Fast R-CNN, 그리고 Faster R-CNN에 대한 성능과 속도를 비교해 볼 수 있습니다. 위 표를 보시면 속도 뿐 만 아니라, 성능도 동시에 개선되어감을 확인할 수 있습니다.

20170525 Research seminar - Google Slides 2017-06-01 20-13-20
CNN 기반 object detector 성능 비교 [10]
CNN기반의 object detection가 R-CNN 계열만 있는 것은 아닙니다. 수많은 종류의 CNN 기반 object detection 논문들이 발표되고 있지만, 그 중 많은 연구자들의 주목을 받고 널리 활용되고 있는 object detector로 R-CNN 종류를 손꼽을 수 있다는 것에는 여지가 없으며 위 표를 살펴보면 그 사실이 더욱 명확해집니다. Google research에서 CVPR 2017에 발표한 object detector survey 논문[10]에서는 Faster R-CNN을 포함해 최근 발표된 다양한 object detector들의 성능과 효율을 비교하였습니다. 연산시간 대비 성능을 표 위에 나타냈을 때, 다른 종류의 object detector보다 성능과 속도 면에서 Faster R-CNN이 우위에 있음을 확인할 수 있습니다.


SUMMARY

20170525 Research seminar - Google Slides 2017-06-01 20-25-42.png
Region based CNN의 발전 과정

본 글에서는 R-CNN부터 Faster R-CNN까지 발전되는 region 기반의 CNN에 대해 알아보았습니다. R-CNN에서는 region proposal과 classification CNN을 결합하여 높은 성능의 object detection을 수행할 수 있다는 가능성을 보여주었습니다. Fast R-CNN에서는 R-CNN의 단점인 속도를 보완하기 위해 conv feature map에서 일정한 길이의 vector를 가져올 수 있는 RoI pooling을 제안하였습니다. Region proposal 알고리즘으로 인해 생기는 bottleneck을 개선하기 위해, Faster R-CNN에서는 conv feature map으로부터 region proposal을 직접 생성할 수 있는 region proposal network를 제안하였습니다. 이러한 R-CNN 기반의 object detection 방법은 다른 알고리즘들과 비교해 성능과 속도면에서 우위를 점하고 있음을 확인할 수 있었습니다.

[1] How Good are Detection Proposals, really?, J. Hosang et al, BMVC14.
[2] Selective Search for Object Recognition, J. R. R. Uijings et al, IJCV13.
[3] Edge boxes: Locating Object Proposals from Edges, L. Zitnick et al, ECCV14.
[4] Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation, R. Girshick et al, CVPR14.
[5] Fast R-CNN, R. Girshick, ICCV15.
[6] Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition, K. He et al, ECCV14.
[7] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, S. Ren et al, NIPS15.
[8] Visualizing and Understanding Convolutional Neural Networks, M. Zeiler et al, ECCV14.
[9] http://mp7.watson.ibm.com/ICCV2015/slides/iccv15_tutorial_training_rbg.pdf
[10] Speed/Accuracy Trade-offs for Modern Convolutional Object Detectors, J. Huang et al, CVPR17.
[11] Mask R-CNN, K. He et al, arXiv17.


본 포스트를 작성하기 위해 아래의 글들을 주로 참조하였습니다.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s