SPPNet 이해
Fast RCNN 이해
Fast RCNN의 경우 SPP Net 을 차용하므로 선세적인 이해가 필요하다.
RCNN 의 문제점으로는
➡️ RCNN 개선 방안
그래서 SPP레이어를 추가한다. (고정된 크기의 벡터로 미리 변환하여 FC에 제공)
SPP 는 서로 다른 크기의 이미지를 고정크기로 변환하는 기법으로 소개된 것이다.
그렇다면 SPP, Spatial Pyramid matching 은 무엇일까?
Bag of Visual Words
BOWs 방법처럼 사진을 쪼개서 그것들의 count histogram 을 보는 것이다.
원본 사람의 사진을 쪼개고, count 하고, 분류하는 방식이다. -> 원본이 가진 정보를 새로운 매핑 정보로 변환. 이때 매핑 정보의 기준을 히스토그램으로 하는 것이다.
그러나 이렇게 단순히 자르고, count 하는 방식은 사진 내에서의 위치를 감안하지 않기 때문에 위치를 어떻게 계산할 것인지, 여기서 등장한 것이 SPM 이다.
SPM(Sptial Pyramid Matching)
이렇게 하면 아래와 같이 정보를 늘리는 것이 가능해진다.
따라서 SS 로 추출한 피처맵의 크기가 어떻듯 SPP 레이어를 지나면 같은 고정크기를 도출하는 것이 가능해진다. 그 후 FC layer 계산을 하면된다!
결과적으로 원본 이미지에서 2000개의 region 을 뽑아 계산하지 않고 원본 이미지 하나에서 피처를 뽑고, 피처에서 SS를 뽑아 SPP 레이어를 통과시키고 학습시키는 것이다. 이미지는 한번만 CNN을 통과한다!
이미지 하나 > CNN 연산 > ROI Pooling 연산 적용하는: Fast R-CNN
Selective search 를 딥러닝 네그워크로 들어오게 한 RPN: Faster R-CNN
✅ Fast R-CNN 주요 특징 (from SPP Net)
1. SPP layer 을 ROI Pooling layer 로 교체
2. End to End Network Larning (SVM -> Softmax 로 변환, Multi-task loss 함수로 분류와 회귀 함께 최적화)
다시 순서를 정리해보자.
CNN Feature extraction
원본이미지에서 CNN 연산을 통해 피처맵을 추출한다. 논문의 숫자로는 (14, 14, 512)
동시에 2000개의 bounding box 를 Selective Search 로 생성한다.
Region projection
추출한 2000개의 region 을 피처맵과 매핑한다.
ROI Pooling
VGG의 max pooling layer 을 ROI로 바꿈으로써 구현된다. ROI Pooling 을 적용시키면 항상 동일한 크기의 input을 얻게되는데 이는 배치까지 고려하면 5차원이다.
결과적으로는 2000개의 bounding box마다 7 x 7 x 5012 의 피처맵을 flatten 하기 때문에 4096 크기의 벡터가 완성된다.
5-1. Image Classification
4096 크기의 feature vector 를 FC layer 에 입력한다. FC layer 에선 K개의 클래스와 1개의 배경까지 예측할 수 있도록 (K+1) 크기의 피처벡터를 출력한다. 따라서 2000개의 region 이 하나씩 FC layer 를 통과하여 K+1 크기의 피처벡터를 하나씩 가진다.
5-2. Bounding Box Prediction
class 별로 bounding box좌표를 예측해야 하므로 (K+1) X 4 크기의 피처벡터가 출력 크기이고, 2000개의 bounding box 가 한번씩 FC layer 를 통과하여 피처벡터를 1개씩 갖는다.
따라서 예측 class score 과 GT 의 class score 분류 오차로 Log loss로 계산하고, 회귀 손실은 Smooth L1 loss 로 게산한다. 만약 값이 1이하일 경우 오차를 선형보다 더 줄여서 계산하고, 그렇지 않으면 -0.5 해준 값을 이용한다.