728x90
서론
- 이 포스트는 R-CNN을 어느정도 알고 있다고 가정하고 작성된 내용입니다.
- 이전 R-CNN은 총 3개의 문제점이 있다.
- two-stage 문제
- 학습에 공간이랑 시간이 많이 들어간다
- 객체 탐지 자체가 느리다.
- 여기서 c번의 문제를 Spatial Pyramid Pooling이라는 것을 통해서 정해진 사진의 크기에 상관없이 구분을 할 수 있도록 해준다.
- 따라서 이 포스트에서는 SPPNet, Fast-RCNN에 대해서 정리해보고자 한다.
본론
- 크게 달라진 점은 2개이다. ROI pooling, Multi-task Loss
- Fast-RCNN이 R-CNN과 제일 큰 차이점이라면 원본 사진에서 feature map을 만들 때, 한번에 한다는 것이다.
- 이것에 관해서 꽤 헷갈렸는데, Conv와 Selective Search의 순서가 바뀌었다고 생각하면 된다.
- R-CNN은 원본 데이터 → Selective Search에서 나온 Bbox를 가지고 Conv를 진행한 뒤, feature을 거쳐서 분류하는 과정을 거쳤다면,
- Fast-RCNN은 원본 데이터 → 한번에 Conv를 거쳐서 feature map을 만든다. → 여기서 Selective Search를 해서 Bbox를 뽑는다 → Bbox가 각기 다른데 어떻게 Fc에 넣을껀가?? → 이를 SPPNet의 개념을 사용해서 전부 같은 크기의 특징 벡터로 수렴할 수 있다는 것이다.
- 어떻게 각기 다른 Bbox를 같은 fc로 줄이는 가?
- feature map의 크기에 상관없이 1616, 44, 1*1으로 max pooling을 진행한다. 이러면 총 20개의 fc가 나오는 걸 알수 있다.
- SPPNet에서 이 같은 방법을 사용했고 Fasst-RCNN은 이를 차용해서 ROI pooling이라고 사용한다.
- 학습에서도 차이점이 있다. R-CNN은 classification과 Bbox regression을 구분해서 학습했으나, Fast-RCNN은 이를 하나로 묶어 사용한다.
- 따라서 Loss는 다음과 같다.
- $L(p_i,t_i)=\frac{1}{N_{cls}}∑_iL_{cls}(p_i,p_i^∗)+λ\frac{1}{N_{reg}}∑_i[p_i^∗≥1]L_{reg}(t_i,t_i^∗)$
- $p_i$: 예측된 클래스 확률 (소프트맥스 출력).
- $p_i^*$: 실제 클래스 레이블 (정수, 0 ~ K, 여기서 K는 클래스 수).
- $t_i$: 예측된 바운딩 박스 좌표.
- $t_i^*$: 실제 바운딩 박스 좌표.
- $N_{cls}$: 분류 손실을 정규화하기 위한 샘플 수.
- $N_{reg}$: 회귀 손실을 정규화하기 위한 샘플 수 (일반적으로 RoI의 수).
- $\lambda$: 분류 손실과 회귀 손실 간의 균형을 조절하는 하이퍼파라미터.
- $[p_i^* \geq 1]$: 실제 클래스 레이블이 1 이상인 경우에만 회귀 손실을 계산하도록 하는 인디케이터 함수.
- 따라서 Loss는 다음과 같다.
결론
- Fast-RCNN에서 R-CNN 차이는 2가지, ROI pooling과 Multi-task Loss
- ROI pooling은 원본을 한번에 conv하면서 나온 결과를 동일한 특징벡터로 만들 수 있다.
- Multi-task loss는 classification과 Bbox regression을 한번에 해결할 수 있다.
추가로 생각할 점
- 저번 R-CNN에서 왜 softmax를 쓰지 않는지에 대한 해답이 여기서 나온다.
- R-CNN과 마찬가지로 사진을 추가해서 새로 올릴 필요가 있다.
728x90
'Learn' 카테고리의 다른 글
[데이터처리와분석] GMM EM Algorithm (1) | 2024.06.13 |
---|---|
[데이터처리및분석] SVM 정리 및 실습 (0) | 2024.06.13 |
[데이터처리와 분석] K-Mean 실습 및 확인 (0) | 2024.06.13 |
[컴퓨터비전] R-CNN (0) | 2024.06.13 |
[머신러닝] Optimizer(SGD+M, AdaGrad, RMSProp, Adam, AdamW) (1) | 2024.06.12 |