Introduction
이전의 R-CNN은 다음과 같은 한계점들이 있었다.
- RoI마다 CNN연산을 수행해 속도가 느림
- Multi-stage pipelines로 모델을 한 번에 학습시키지 못함
위와 같은 문제점들을 Fast R-CNN에서는 다음과 같이 극복한다.
- RoI Pooling
- CNN feature 추출부터 classification, bounding box regression까지 한 번에 학습
R-CNN이 나온 이후 이를 개선한 SPPNet이 나왔는데, Fast R-CNN은 SPPNet의 SPP layer를 사용하면서 이를 더 개선한 모델이라고 할 수 있다.
Fast R-CNN Process
- Selective Search를 통해 RoI를 찾는다.
- 전체 이미지를 CNN에 통과시켜 feature map추출
- Selective Search로 찾은 RoI를 feature map크기에 맞춰 projection시킴
- projection시킨 RoI에 대해 RoI Pooling을 진행해 고정된 크기의 feature vector 추출
- feature vector는 FC layer 통과 뒤 두 브랜치로 나뉨
- feature vector 하나는 softmax 통과 후 RoI에 대해 object classification 진행, 하나는 bounding box regression을 통해 selective search로 찾은 box 위치 조정
Fast R-CNN은 RoI pooling으로 CNN 연산 횟수를, Multi-task loss로 multi-stage pipeline이 가지는 문제점을 개선한다.
ROI Pooling
SPPNet에서의 SPP layer는 4x4, 2x2, 1x1 크기의 세 피라미드를 사용해 Max pooling을 진행했다. Fast R-CNN에서는 7x7크기의 한 피라미드를 사용해 고정된 크기의 feature vector를 만든다. 이를 **"RoI Pooling"**이라한다.
RoI pooling 과정은 다음과 같다.
- Fast R-CNN에서 입력이미지를 CNN 구조에 통과시켜 feature map을 추출한다. 그 후 이전에 Selective Search로 만들어놨던 RoI를 feature map에 projection시킨다.
- -> 그림 제일 좌측 그림이 feature map이고 검은색 box가 투영된 RoI이다.
- 이 때 projection된 RoI영역이 고정된 크기의 feature vector가 되는 과정은 다음과 같다.
- 미리 설정한 HxW의 고정된 크기로 만들어 주기 위해 (h/H)x(w/H) 크기만큼 grid를 RoI위에 만든다.
- RoI를 grid 크기로 split한 뒤 max pooling을 적용시켜 각 grid 칸마다 하나의 값을 추출한다.위 과정을 통해 CNN연산을 2000번에서 1번으로 줄여 속도를 높일 수 있다.
- -> 이 작업을 통해 feature map에 투영했던 RoI는 HxW의 고정된 feature vector로 변환된다.
Multi-task loss
기존 R-CNN은 multi-stage pipeline으로 인해 3가지 모델(CNN, SVM, bounding box regression)을 따로 학습해야했다.
그러나 위 그림처럼 RoI Pooling을 추가함으로써 RoI영역을 feature map에 projection시킬 수 있게 되었다. 따라서 동일한 data가 각자 softmax(classification), bounding box regression(localization)으로 들어가 연산을 공유하게 된다. 이는 모델이 end-to-end로 학습할 수 있게 되었다는 뜻이다.
Conclusion
Fast R-CNN에서는 RoI Pooling과 Multi-task loss를 통해 R-CNN과 SPPNet의 문제점을 개선했다. 하지만 여전히 RoI를 생성하는 Selective search를 CNN 외부에서 진행시켜 속도의 저하가 있다. 이 RoI 생성마저 CNN내부에서 진행함으로써 더욱 빠르면서 정확한 region proposal을 생성하는 Faster R-CNN이 나오게 된다.
'DL > Object detection' 카테고리의 다른 글
FPN (Feature Pyramid Networks for Object Detection) (0) | 2024.01.17 |
---|---|
YOLO v2 (1) | 2024.01.15 |
YOLO v1 (1) | 2024.01.05 |
Faster R-CNN (1) | 2024.01.05 |
R-CNN (0) | 2024.01.05 |