Fast R-CNN 부수기 [백 병장의 CV 부수기 3편]
백 병장의 CV 부수기, 전역(완결)까지 11일 남은 오늘은 Fast R-CNN을 부숴보겠다.
Fast R-CNN은 이름에서 짐작할 수 있듯이 이전에 나도 리뷰한 적 있는 대표적인 2-stage Object Detection 모델인 R-CNN을 더욱 빠르게 개선한 모델이다.
Fast R-CNN을 다루기 전에 R-CNN의 특징을 복습해보자.
Regions with CNN Features 복습
R-CNN은 아래의 과정을 통해 이미지 속 객체를 분류한다.
- Region Proposal by Selective Search
- Feature Extraction by CNN
- Classification by SVM, Bounding Box Regression by Regressor model
사전 학습된 CNN을 통해 특성을 추출하고, SVM으로 분류하는 이 방식을 통해 높은 성능의 Object Detection 모델을 구성할 수 있었으나, R-CNN에는 명확한 한계가 존재했다.
- CNN, SVM Classifier, Bounding Box Regressor 세 개의 모델을 각각 학습시켜야 함
- Selective Search 알고리즘이 CPU에서 동작하여 매우 오랜 시간이 소요됨
이러한 R-CNN의 단점을 개선한 Object Detection 모델이 후에 많이 등장하였는데, 그중 처음 등장한 것이 Fast R-CNN이다.
Fast R-CNN의 등장
Fast R-CNN은 R-CNN 논문의 1 저자 Ross Girshick이 R-CNN이 공개된 지 1년이 지난 2015년 발표한 논문이다.
Fast R-CNN은 R-CNN에서 지적된 2개의 단점을 해결하여 R-CNN의 가장 큰 단점이라 할 수 있었던 시간 소요를 개선하였다.
- ROI(Region of Interst)마다 CNN 연산을 수행하여 오랜 시간이 소요되는 문제
- 학습시켜야 할 모델이 많고 분리되어 End-to-End 학습이 불가능했던 문제
위에 소개한 문제들을 해결한 방법들을 하나씩 살펴보자.
CNN 연산을 2천 번에서 한 번으로
R-CNN에서는 아래의 순서로 이미지를 처리했다.
- Selective Search를 통해 2천 개의 ROI를 찾아낸다.
- 각 ROI를 고정된 CNN의 입력 사이즈로 축소/확대하여 CNN에 입력하여 featrue map을 얻는다.
- 2천 개의 feature map을 SVM, Bounding Box Regressor에 넣고 처리...
이 과정에서 한 이미지 당 2천 개의 ROI가 생성되고, 모두 CNN과 SVM 등을 통과하는 과정에서 상당한 컴퓨팅 자원이 요구됨을 알 수 있다.
Fast R-CNN은 2천개의 ROI를 각각 CNN에 넣는 대신, 이미지 전체를 한번 CNN에 넣어 feature map을 추출한다.
feature map을 분석할 SVM, Regressor의 입력 크기는 고정되어 있지만, CNN 자체는 크기가 고정되어 있지 않기에 가능한 것이다.
원본 이미지를 통해 얻은 feature map에 R-CNN과 같이 Selective Search 방법으로 얻은 ROI를 투영한다.
feature map이 원본 이미지의 지역성을 유지하기 때문에, 원본 이미지에서 얻은 ROI를 그대로 투영할 수 있다.
이제 얻어낸 feature map을 SVM, Regressor 모델에 넣기 위해 입력을 정해진 크기로 조정해줘야 하는데, 이 ROI Pooling 과정에서 Spatial Pyramid Pooling(SPP)가 사용된다.
Spatial Pyramid Pooling
SPP는 입력 이미지에 따라 가변적인 CNN의 출력 Feature Map을 Fully Connected Layer에 넣기 위한 고정된 크기로 변환하기 위해 고안되었다.
CNN은 입력 이미지의 넓이와 높이에 따라 변화하는 $w, h$와 고정된 $k$ 채널의 3차원 feature map을 출력한다.
SPP는 이 feature map을 미리 정해진 몇 개의 조각으로 나눈다. 논문과 이미지에서는 $4\times 4$, $2\times 2$, $1\times 1$으로 feature map을 나눴다. 이 나누는 기준을 피라미드, 나누어진 칸을 bin이라 한다.
그러면 feature map의 $w, h$ 크기와 관계없이, 이미지는 각각 16, 4, 1개의 bin으로 나누어지게 된다.
각 bin에 속한 feature map 값 중 max 값을 풀링 하면, 결국 이미지의 크기와 관계없이 고정된 크기의 출력이 나오게 된다.
예를 들어, $4 \times 4$ 피라미드를 $k=256$ 채널을 갖는 CNN에 적용하면, 입력 이미지 크기와 무관하게 $16\times 256$의 고정된 크기의 출력을 얻을 수 있다.
ROI Pooling
이제 다시 Fast R-CNN으로 돌아가서, CNN을 통과한 원본 이미지의 feature map에 Selective Search로 얻은 2천 개의 ROI를 투영한다.
각 ROI를 별도의 크기 조정 없이 $7\times 7$ 크기의 피라미드로 풀링 하여 고정된 크기의 출력 벡터를 얻고, 이를 SVM Classifier와 BB Regressor에 투입함으로써 2천 번 수행되던 CNN 연산을 한 번만 수행하고, wrapping을 통해 이미지의 비율을 조정하지 않고도 Object Detection을 수행할 수 있다.
End to End 학습
기존 R-CNN에서는 최종 출력을 만드는 SVM과 Bounding Box Regressor가 각기 다른 데이터를 입력으로 받아서 학습을 따로 수행해야 하는 문제가 있었다. (SVM은 CNN이 추출한 feature, Regressor는 Selective Search가 제안한 영역)
그러나 Fast R-CNN에서는 SVM과 Regressor가 모두 CNN이 추출하고 ROI Pooling 된 feature vector를 입력으로 사용하기에 end-to-end 학습이 가능하다.
더 이상 CNN 따로, SVM 따로, Regressor 따로 학습시킬 필요가 없기에 학습이 훨씬 빠르고 쉬워진 것이다.
결론
Fast R-CNN은 Object Detection Task에 CNN을 적용한 R-CNN의 단점이었던 학습 속도를 ROI Pooling을 적용하여 해결하였다. 2천 번 수행되던 CNN 연산을 1번으로 줄이고, 학습 과정을 end-to-end로 진행하여 속도를 대폭 개선한 것이다.
그러나, 아직도 Seletive Search는 CPU 기반으로 수행되기 때문에 느리다는 한계가 있었다.
추후에 이를 해결한 모델이 Faster R-CNN이라 하는데, 이 모델도 곧 다뤄보겠다.
지금까지 R-CNN, OverFeat을 지나 Fast R-CNN까지 공부하며 기술의 발전 과정을 따라왔다.
따로 글로 다루지는 않았지만, 이번 글에서 다룬 SPP도 별도의 논문이 있다.
놀라운 속도로 기술을 개선하고 개발하는 연구자들이 새삼 경이롭다.
R-CNN 모델을 처음 보았을 때, 막연히 복잡하고 단점도 명확하다고 생각했는데, Fast R-CNN 모델에서 이를 지적하고 개선하는 모습을 보며 모종의 카타르시스가 느껴질 지경이다.
R-CNN의 저자와 Fast R-CNN의 저자가 같은데, 자신이 만든 모델의 단점을 이렇게 거침없이 파헤치고 개선하는 것이 멋지다.
그야말로 스스로를 계속 극복하는, 니체가 말한 위버맨쉬같다.
참고자료
- Fast R-CNN - Ross Girshick, arxiv
- (논문리뷰) Fast R-CNN 설명 및 정리 - Kanghee Lee
- Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition - Kaiming He et al. arxiv
'Deep Learning > 공부 노트' 카테고리의 다른 글
OHEM 부수기 [백 병장의 CV 부수기 5편] (1) | 2022.12.10 |
---|---|
Faster R-CNN 부수기 [백 병장의 CV 부수기 4편] (0) | 2022.12.04 |
OverFeat 부수기 [백 병장의 CV 부수기 2편] (0) | 2022.11.28 |
R-CNN 부수기 [백 병장의 CV 부수기 1편] (0) | 2022.11.27 |
Introduction to spiking neural networks: Information processing, learning and applications (0) | 2020.01.04 |
댓글
이 글 공유하기
다른 글
-
OHEM 부수기 [백 병장의 CV 부수기 5편]
OHEM 부수기 [백 병장의 CV 부수기 5편]
2022.12.10 -
Faster R-CNN 부수기 [백 병장의 CV 부수기 4편]
Faster R-CNN 부수기 [백 병장의 CV 부수기 4편]
2022.12.04 -
OverFeat 부수기 [백 병장의 CV 부수기 2편]
OverFeat 부수기 [백 병장의 CV 부수기 2편]
2022.11.28 -
R-CNN 부수기 [백 병장의 CV 부수기 1편]
R-CNN 부수기 [백 병장의 CV 부수기 1편]
2022.11.27