공부기록

FAST R-CNN 논문 리뷰 본문

분석/논문

FAST R-CNN 논문 리뷰

맘모스빵러버 2021. 4. 6. 14:40

이번 논문 리뷰에서는 FAST R-CNN에 대하여 리뷰해보겠습니다. 지난 게시물에서 다루었던 R-CNN은 학습시간이 매우 오래걸리고, detection속도 역시, 이미지 한 장다 47초나 걸린는 등 매우 느린 추론 속도를 보였습니다.

더불어, 3가지의 모델 (AlexNet, linear SVM, Bounding box regressor)을 독립적으로 학습시키 연산을 공유하거나 가중치값을 update하는 것이 불가능하다는 문제도 있었습니다. 이러한 문제점 들을 Fast R-CNN은 개선시킨 모델입니다. 

 

Fast R-CNN은 다음  두가지를 통해 한계점들을 극복했습니다.

 

1. ROI pooling

2. CNN 특징 추출부터 classification, bounding box regression까지 하나의 모델에서 학습

 

 

R-CNN모델의 경우 2000장의 Regino proposals를 CNN 모델에 입력시켜 각각에 대하여 독립적으로 학습시켜 많은 시간이 소요됩니다. Fast R-CNN은 이러한 문제를 개선하여 단 1장의 이미지를 입력받았으며, region proposals의 크기를 warp시킬 필요 없이 RoI Pooling을 통해 고정된 크기의 feature vector를 fully connected layer에 전달합니다. 또한 multi-task loss를 사용하여 모델을 개별적으로 학습시킬 필요 없이 한 번에 학습시킵니다. 이를 통해 학습 및 detection시간이 크게 감소하게 되었습니다. 

 

먼저 Fast R-CNN에서의 수행과정을 살펴보면 다음과 같습니다. 

 

1-1. R-CNN에서와 마찬가지로 Selective Search를 통해 RoI를 찾는다.

1-2. 전체 이미지를 CNN에 통과시켜 feature map을 추출한다.

2. Selective Search로 찾았었던 RoI를 feature map크기에 맞춰서 projection시킨다.

3. projection시킨 RoI에 대해 RoI Pooling을 진행하여 고정된 크기의 feature vector를 얻는다.

4. feature vector는 FC layer를 통과한 뒤, 구 브랜치로 나뉘게 된다.

5-1. 하나는 softmax를 통과하여 RoI에 대해 object classification을 한다.

5-2. bounding box regression을 통해 selective search로 찾은 box의 위치를 조정한다. 

 

Fast R-CNN의 가장 핵심적인 아이디어는 RoI Pooling입니다. R-cnn에서 CNN의 output이 FC layer의 input으로 들어가야했기 때문에 CNN input을 동일 size로 맞춰줘야 했습니다. 그렇기 때문에 원래 이미지에서 추출한 RoI를 crop, warp를 통해 동일한 크기로 조정했습니다.

 

하지만!! FC layer의 input이 고정인거지 CNN input은 고정이 아닙니다! 따라서 CNN에는 입력 이미지의 크기, 비율 관계없이 input으로 들어갈 수 있고 FC layer의 input으로 들어갈때만 size를 맞춰주기만 하면 됩니다.  여기서 Spatial Pyramid Pooling 즉 SRP가 제안됩니다. 

 

 

SRP는 먼저 이미지를 CNN에 통과시켜 feature map을 추출합니다. 그 후 미리 정해진 4*4, 2*2, 1*1영역의 피라미드로 feature map을 나눠줍니다. 이때 피라미드 한칸을 bin이라 한다고 합니다. bin내에서 max pooling을 적용하여 각 bin마다 하나의 값을 추출하고, 최종적으로 피라미드 크기만큼  max 값을 추출하여 3개의 피라미드의 결과를 쭉 이어 붙여 고정된 크기 vector를 만듭니다. 

 

정리해보면, 4*4, 2*2, 1*1 세 가지 피라미드가 존재하고, max pooling을 적용하여 각 피라미드 크기에 맞게 max값을 뽑아냅니다. 그리고 각 피라미드 별로 뽑아낸 max 값들을 이어붙여 고정된 크기 vector를 만들고 이게 FC layer의 input으로 들어가게 됩니다. 

 

따라서 CNN을 통과한 feature map에서 2천개의 region proposal을 만들고 region proposal마다 SPPNet에 집어넣어 고정된 크기의 feature vector를 얻어냅니다. 이 작업을 통해 모든 2천개의 region proposal마다 해야했던 2천번의 CNN연산이 1번으로 줄어들게 됩니다. 

 

실제로 Fast R-CNN에서는 1개의 피라미드를 적용시킨 SPP로 구성되어있습니다. 또한 피라미드의 사이즈는 7*7입니다. Fast R-CNN에서 적용된 1개의 파라미드 SPP로 고정된 크기의 feature vector를 만드는 과정을 "ROI Pooling"이라고 합니다.

Fast R-CNN에서 먼저 입력 이미지를 CNN에 통과시켜 feature map을 추출하고 그 후, 이전에 미리 Selective search로 만들어 놨던 RoI을 feature map에 projection시킵니다. 여기서 가장 왼쪽 그림이 feature map이고 그 안에 h*x크기의 검은색 box가 투영된 RoI입니다. 

 

즉 순서를 표현해보자면

 

(1) 미리 설정한 HxW크기로 만들어주기 위해서 (h/H) * (w/H) 크기만큼 grid를 RoI위에 만든다.

(2) RoI를 grid크기로 split시킨 뒤 max pooling을 적용시켜 결국 각 grid 칸마다 하나의 값을 추출한다.

위 작업을 통해 feature map에 투영했던 hxw크기의 RoI는 HxW크기의 고정된 feature vector로 변환된다.

 

이렇게 RoI pooling을 이용함으로써 "원래 이미지를 CNN에 통과시킨 후 나온 feature map에 이전에 생성한 RoI를 projection시키고 이 RoI를 FC layer input 크기에 맞게 고정된 크기로 변형할 수가 있습니다"

따라서 더이상 2000번의 CNN연산이 필요하지 않고 1번의 CNN연산으로 속도를 대폭 높일 수 있었다고 합니다. 

 

 

다음은 R-CNN의 두번째 문제였던 multi-stage pipeline으로 인해 3가지 모델을 따로 학습해야했던 문제입니다.

R-CNN에서는 CNN을 통과한 후 각각 서로다른 모델인 SVM(classification), bounding box regression(localization)

안으로 들어가 forward됐기 때문에 연산이 공유되지 않았습니다.

 

(* bounding box regression은 CNN을 거치기 전의 region proposal 데이터가 input으로 들어가고

SVM은 CNN을 거친 후의 feature map이 input으로 들어가기에 연산이 겹치지 않습니다.)

 

 

그러나 위 그림을 다시보면 RoI Pooling을 추가함으로써 이제 RoI영역을 CNN을 거친후의 feature map에 투영시킬 수 있었습니다.  따라서 동일 data가 각자 softmax(classification), bbox regressor(localization)으로 들어가기에 연산을 공유합니다. 이는 이제 모델이 end-to-end로 한 번에 학습시킬 수 있다는 뜻입니다.

 

 

 

이제 Fast R-CNN의 Loss function은 위와 같이 classification과 localization loss를 합친 function으로써 한 번의 학습으로 둘다 학습시킬 수가 있습니다.

 

<결론>

 

RoI Pooling을 하나 추가함으로써 

 

(1) CNN후에 region proposal 연산 - 2000xCNN연산 → 1번의 CNN연산

(2) 변경된 feature vector가 결국 기존의 region proposal을 projection시킨 후 연산한 것이므로

해당 output으로 classification과 bbox regression도 학습 가능

 

의 성과를 이룰 수 있었습니다.

 

 

 

 

[출처] arxiv.org/abs/1504.08083

 

Fast R-CNN

This paper proposes a Fast Region-based Convolutional Network method (Fast R-CNN) for object detection. Fast R-CNN builds on previous work to efficiently classify object proposals using deep convolutional networks. Compared to previous work, Fast R-CNN emp

arxiv.org

herbwood.tistory.com/8

 

Fast R-CNN 논문 리뷰

이번 포스팅에서는 Fast R-CNN 논문(Fast R-CNN)을 읽고 정리해봤습니다. 기존 R-CNN 모델은 학습 시간이 매우 오래 걸리며, detection 속도 역시, 이미지 한 장당 47초나 걸려 매우 느린 추론 속도를 보였습

herbwood.tistory.com

ganghee-lee.tistory.com/36?category=863370

 

(논문리뷰) Fast R-CNN 설명 및 정리

이전글 : (논문리뷰) R-CNN 설명 및 정리 컴퓨터비전에서의 문제들은 크게 다음 4가지로 분류할 수 있다. 1. Classification 2. Object Detection 3. Image Segmentation 4. Visual relationship 이중에서 4. Visu..

ganghee-lee.tistory.com

 

'분석 > 논문' 카테고리의 다른 글

YOLO 논문 리뷰  (1) 2021.04.13
Faster R-CNN 논문 리뷰  (4) 2021.04.06
R-CNN 논문 리뷰  (0) 2021.03.29
[논문] VGGNet(2015) 리뷰 및 정리 (3)  (1) 2021.03.16
[논문] VGGNet(2015) 리뷰 및 정리 (2)  (0) 2021.03.15