기존 R-CNN은 학습시간이 오래 걸리고, 이미지 한장을 처리하는데 47초의 추론 시간이 소모되었습니다. 그리고 CNN, SVM, Bounding Box Regressor가 독립적으로 학습을 진행하여 연산이 공유되지도 않는 한계가 존재하였습니다. 이를 위해 기존 R-CNN보다 더 빠른 속도를 갖는 Fast R-CNN이 등장하였습니다.
Fast R-CNN도 R-CNN처럼 2-Stage Detector로 Region Proposal과 Classification으로 구성됩니다.
그렇다면 어떤 곳에서 속도의 이점을 가져왔을까요?
R-CNN에서는 입력 이미지 1개에서 추출된 2000여개의 RoI를 CNN의 입력으로 넣었지만, Fast R-CNN에서는 입력 이미지 1개를 CNN의 입력으로 넣는것으로 속도의 이점을 가져왔습니다.
자세한 것은 모델의 구조를 보며 알아보겠습니다.
1-1) Selective Search알고리즘을 사용하여 RoI를 추출합니다.
R-CNN처럼 Selective Search 알고리즘을 사용하여 2000여개의 RoI를 추출합니다.
1-2) 입력 이미지를 Pre-trained CNN의 입력으로 넣어 Feature Map을 추출합니다.
R-CNN과 다르게 CNN의 입력으로 원본 이미지를 입력으로 넣습니다. CNN모델로는 VGG를 사용하며 CNN을 거쳐서 추출된 Feature map은 sub-sampling ratio = 1/100이 적용됩니다.
2) RoI projection을 통해 Feature Map에서 추출된 RoI에 해당하는 영역을 추출합니다.
Fast R-CNN에서는 RoI 추출과 Feature Map 추출을 따로 진행하고, 이를 다시 합친 것을 사용함으로써 CNN, SVM, Regressor가 End-to-End로 학습이 가능하도록 모델 구조를 수정하였습니다. 이 과정에서는 따로 추출된 RoI와 Feature Map을 하나로 합쳐주는 작업을 진행합니다. 우선 sub-sampling 과정을 통해 크기가 작아진 Feature Map에 맞게 RoI를 투영해주는 과정이 필요합니다. 이는 RoI의 크기와 중심 좌표를 sub sampling ratio에 맞게 변경시켜줌으로써 수행합니다.
3) RoI pooling layer를 거쳐서 고정된 크기의 RoI Feature Map을 추출합니다.
RoI Projection을 통해 얻은 RoI Feature Map은 크기가 제각각이기 때문에 Fc layer에 통과시키기 위해 고정된 크기의 Feature vector로 변환해야 합니다. 이를 위해 RoI pooling Layer를 거칩니다. RoI Pooling은 고정된 크기(h,w)로 RoI영역을 나누고, 나눠진 RoI 영역에 Max-Pooling을 적용합니다.
4) 추출된 RoI Feature Map을 Fc layer에 통과시켜 Feature vector를 추출합니다.
RoI pooling layer를 거쳐서 나온 고정된 크기의 RoI Feature Map을 Fc layer에 통과시켜 4096차원의 Feature vector를 추출합니다.
5) 추출된 Feature vector으로 Classification과 Bounding box regression을 수행합니다.
4096차원의 feature vector를 k+1(k개 class수 + 배경)개의 output을 가진 Fc layer에 입력하고, 하나의 입력 이미지에서 하나의 RoI에 대한 class 예측값을 출력합니다.
4096차원의 feature vector를 class별 bounding box의 좌표를 예측하도록 (k+1)x4개의 output을 가진 Fc layer에 입력하고, 하나의 입력 이미지에서 하나의 RoI에 대한 class별로 조정된 bounding box 좌표값을 출력합니다.
이는 Multi-task loss를 사용하여 하나의 RoI에 대한 Classification과 Bounding box regression의 loss를 반환합니다. 이후 역전파를 통해 두 모델을 한 번에 학습 시킵니다.
- p = k+1개의 class score
- u = ground truth class score
- t_u = 예측한 bounding box 좌표값
- v = 실제 bounding box의 좌표값
- L_cls(p,u) = -log p_u - classification Loss
- L_loc(t_u, v) = smooth L1 Loss - regression Loss
Faster R-CNN 장점
- Input Image를 CNN 입력 값으로 넣기 때문에 R-CNN보다 9배 빠릅니다.
- multi-task loss를 사용하여 single stage로 여러 모델을 학습시킬 수 있다는 편리함과 네트워크의 가중치값을 역전파를 통해 업데이트할 수 있다는 장점이 있습니다.
Fast R-CNN 여전히 존재하는 한계
- Region Proposal에서 사용되는 Selective Search알고리즘에서 병목현상이 발생하여 여전히 학습속도가 느립니다.
'Deep Learning > Vision' 카테고리의 다른 글
YOLOv8 Custom Dataset 학습 (1) | 2024.02.28 |
---|---|
Faster R-CNN (1) | 2023.11.24 |
R-CNN (0) | 2023.11.02 |
Pose Estimation (0) | 2023.11.01 |
Vision Transformer (2020 - AN IMAGE IS WORTH 16X16 WORDS: TRASNFORMERS FOR IMAGE RECOGNITION AT SCALE) (1) | 2023.11.01 |
댓글