Fast R-CNN

장우솔·2022년 2월 7일
0

딥러닝

목록 보기
1/15

Fast R-CNN

R-CNN에 RoI Pooling을 하나 추가함으로써 앞서 말한 R-CNN의 한계를 극복한다.
(1) CNN“후”에 region proposal 연산
2000xCNN연산 → 1번의 CNN연산으로 첫 번째 한계극복

(2) 변경된 feature vector가 결국 기존의 region proposal을 projection시킨 후 연산한 것이므로 해당 output으로 classification과 bbox regression도 학습 가능하여 두 번째 한계극복




그렇다면 Fast R-CNN에서 사용한 RoI Pooling이 무엇인지 알아보자!



Fast R-CNN 순서


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

1-2. 전체 이미지를 CNN에 통과시켜 feature map을 추출한다.
(R-CNN은 wrap으로 고정된 크기로 만든 후 CNN통과)


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의 위치를 조정한다.

  • FC layer의 input이 고정인거지 CNN input은 고정이 아니기 때문에 CNN에는 입력 이미지 크기, 비율 관계없이 input으로 들어갈 수 있고 FC layer의 input으로 들어갈 때만 size를 맞춰주면 된다.
    Spatial Pyramid Pooling(SPP)를 이용해서 FC layer에 고정된 input을 넣는다.

SPP란?

SPP에서는 먼저 이미지를 CNN에 통과시켜 feature map을 추출한다.
그리고 미리 정해진 4x4, 2x2, 1x1 영역의 피라미드로 feature map을 나눠준다.
bin(피라미드 한칸)내에서 max pooling을 적용하여 각 bin마다 하나의 값을 추출하고,
최종적으로 피라미드 별로 뽑아낸 max값을 이어붙여 고정된 크기 vector를 만든다.


RoI Pooling?

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



Fast R-CNN에서 RoI Pooling되는 순서

  1. Fast R-CNN에서 먼저 입력 이미지를 CNN에 통과시켜 feature map을 추출한다.

  2. 미리 설정한 HxW크기로 만들어주기 위해서 (h/H) * (w/H) 크기만큼 grid를 RoI위에 만든다. 그 후 이전에 미리 Selective search로 만들어놨던 RoI(=region proposal)을 feature map에 projection시킨다.

  • 위 그림의 가장 좌측 그림이 feature map이고 그 안에 hxw크기의 검은색 box가 투영된 RoI이다.
  1. 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연산으로 속도를 대폭 높일 수 있다.

또한 RoI영역을 CNN을 거친 후에 투영시키기에 동일 데이터가 각자 softmax(classification), Bbox regre(localization)으로 들어가기에 연산을 공유한다.

따라서 모델이 end-to-end로 한 번에 학습시킬 수 있다.

요약

1.region proposal 추출 → 전체 image CNN 연산 → RoI projection, RoI Pooling

→ classification, bounding box regression

단점

속도가 느려! 그래서 나온 것이 Faster R-CNN
Selective search가 느린이유는 cpu에서 돌기 때문이다.
따라서 Region proposal 생성하는 네트워크도 gpu에 넣기 위해서 Conv layer에서 생성하도록 하자는게 아이디어이다.

Faster R-CNN은 한마디로 RPN + Fast R-CNN이다.
Faster R-CNN은 Fast R-CNN구조에서 conv feature map과 RoI Pooling사이에 RoI를 생성하는 Region Proposal Network가 추가된 구조이다.

이러다가 fastest R-CNN까지 나오겠어,,, 다음은 뭐라고 할지,,

Mask R-CNN

이전에 R-CNN(fast,faster)모델은 object detection을 위한 모델이다.
Mask R-CNN은 instance segmentation을 하기 위한 모델이다.
이것을 위해서는 object detection과 segmentation을 동시에 해야하는데, Mask R-CNN은 기존의 Faster R-CNN을 object detection을 하도록 하고 각각의 RoI에 mask segmentation을 해주는 작은 FC 레이어를 추가했다.

추가된 점
(1) Faster R-CNN의 classification, localization(bounding box regression) branch에 mask branch가 추가된다.
(2) RPN 전에 FPN(feature pyramid network)가 추가된다.
(3) Image segmentation의 masking을 위해 RoI align이 RoI pooling을 대신하게 됐다.













참고
https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf
blog

profile
공부한 것들을 정리하는 블로그

0개의 댓글