SPPNet 논문 리뷰입니다.
본 논문은 2014년도에 등장한 논문입니다.
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
저자 : Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun
[1] Introduction
이번에 소개할 논문은 SPPNet 입니다.
여기서 SPP란? Spatial Pyramid Pooling 을 의미합니다.
그리고 논문 제목에서 알 수 있듯이 Deep 합성곱 신경망에서 SPP를 사용했다고 하는데,
저 SPP가 뭔지 알아보는 것이 본 논문의 핵심이라고 할 수 있겠습니다.
일단, SPPNet이 등장한 배경부터 알아보겠습니다.
SPPNet 등장 배경
SPPNet이 등장한 배경을 알아보기 위해서는 먼저 CNN 구조를 이해해야 합니다.
위 사진이 CNN의 Architecture 입니다.
CNN은 크게 봤을 때 Convolution Layer + Fully Connected Layer 로 구성됩니다.
여기서 FC Layer 때문에 우리는 이미지 입력을 고정된 크기로 입력해야 합니다.
FC Layer는 모든 입력 뉴런과 출력 뉴런이 완전히 연결되어 있는 구조를 가지고 있어 가중치 행렬 크기가 고정되어 있어야 하기 때문입니다.
좀 더 쉽게 설명하면 입력된 이미지가 Conv Layer를 거쳐 Feature Map이 만들어지고 이를 1차원 벡터로 변환된 후 FC Layer에서 연산되는데, 여기서 이미지 크기가 변한다면 Feature Map Size가 바뀌고 Flatten Layer의 길이 또한 달라져 계산이 불가능해지기 때문에 고정된 크기의 입력이 들어와야 한다는 말입니다.
그러면 고정된 크기의 이미지를 입력하면 되지 뭐가 문제일까? 하는 궁금증이 들 수 있습니다.
raw 이미지를 고정된 크기로 입력하는 방법은 대표적으로 crop, wrap 등이 있습니다.
위 예시처럼 crop을 하게 되면 이미지가 잘리고, wrap을 하게 되면 이미지가 왜곡되어 정보 손실이 일어날 수 있습니다.
따라서 고정된 크기의 이미지 입력은 정보의 손실을 초래할 수 있다는 겁니다.
그렇기 때문에 SPPNet은 이러한 문제점을 보완하고자 했고, 그 아이디어가 Spatial Pyramid Pooling입니다.
[2] Spatial Pyramid Pooling
위 이미지는 SPPNet과 R-CNN의 Architecture를 비교한 사진이고, SPPNet은 Object Detection 분야에서 많이 사용되어 R-CNN과 비교할 수 있다고 합니다.
R-CNN의 경우 객체를 탐지하기 위해 Bounding Box를 생성하는데 이걸 입력 이미지에서부터 사용하기 때문에 Box 개수만큼 CNN 작업이 수행되어 시간이 매우매우 오래 걸린다는 단점이 있습니다.
반면, SPPNet의 경우 입력 이미지를 먼저 CNN하고 CNN Layer를 5번 거친 후 도달한 Feature Map에서 Bounding Box를 선별해 연산 시간을 매우매우 단축시킬 수 있었다고 합니다.
SPP Layer
SPPNet은 기본적으로 5개의 Conv Layer, 3개의 FC Layer를 가집니다.
SPP Layer는 5개의 Conv Layer 이후에 위치합니다.
FC Layer에 고정된 입력 크기로 전달해주기 위해서 그렇다고 하네용.
SPP Layer가 어떻게 구성되어 있는지도 바로 알아보겠습니다.
위 이미지는 SPP Layer를 도식화한 이미지입니다.
SPP Layer에서는 bins 라는 변수의 개수를 선정합니다.
bin이란? SPP Layer를 거친 후 생성되는 출력 벡터의 크기라고 얘기할 수 있을 것 같은데, 예시를 통해 더 쉽게 알아보겠습니다.
일단, 위 이미지는 bin이 21인 경우 입니다.
21 bin = [4x4, 2x2, 1x1]
만약 bin이 50이라면 [6x6, 3x3, 2x2, 1x1], bin이 30이라면 [4x4, 3x3, 2x2, 1x1] 로 생성되겠죠.
따라서 입력 이미지가 어떤 크기가 들어와도 bin을 제대로 설정해준다면 FC Layer에 고정된 크기를 전달할 수 있기 때문에 입력 이미지 크기에 구애받지 않습니다.
아래 이미지는 5x5 Feature Map을 2x2 Pooling 한 경우에 변환되는 과정을 나름대로 이해를 돕기 위해 그려본 도식화입니다.
참고만 해주세용
Pooling할 때의 Window size 와 Stride도 구하는 공식이 있습니다.
- Window size : Ceiling(Feature Map Size / Pooling Size) (올림)
- Stride : Floor(Feature Map Size / Pooling Size) (내림)
SPP Layer의 output 벡터 차원
그래서 결국 SPP Layer를 거친 벡터의 차원은 k * M이 됩니다.
여기서 k는 5번째 Conv Layer에서 출력한 Feature Map의 Filter 수를 의미하고, M은 사전에 설정한 bin의 수를 의미합니다.
위 사진에서 k는 256이 되고, bin은 21이 되기 때문에 output vector의 차원은 256 x 21 = 5,376이 되겠습니다.
[3] Experiments
1) Image Classification
본 논문에서 실험한 내용이 많은데 몇 가지만 추려서 이야기하겠습니다.
첫 번째로 Image Classification Task입니다.
- 세로축 설명 : a는 SPPNet을 사용하지 않은 경우, b는 Single Size Trainied SPP Layer를 사용한 경우, c는 Multi Size Trainined SPP Layer를 사용한 경우입니다.
- 가로축 설명 : SPPNet의 구조를 조금씩 다르게 하여 구성한 모델입니다.
여기서 Single Size, Multi Size에 관한 이야기가 나오는데,
- Single Size Training : 고정된 크기 (224x224)의 입력을 사용해 학습, 네트워크의 구조와 크기는 변하지 않음
- Multi Size Trianing : 매 에폭마다 입력크기를 다르게 설정 (224X224 / 180X180 등)하여 학습, 네트워크 크기는 변경되지만 가중치는 네트워크간 공유되어 학습 효율을 유지
쉽게 설명해서 Single-size는 고정 크기, Multi-size는 변동 크기를 다룬다고 이해하면 되겠습니다.
아무튼 Multi-Size Trained SPPNet의 경우가 모든 부분에서 에러율이 가장 낮은 결과를 보였습니다.
2) Object Detection
다음은 Object Detection 관련 실험입니다.
위에서 설명했듯이 R-CNN은 입력 이미지에 대해 Bounding Box를 생성하기 때문에 시간이 매우 오래걸리지만, SPPNet은 Conv Layer를 5번 거친 Feature Map에 대해 Bounding Box를 생성하기에 시간 절약에 있어 큰 강점을 가집니다.
상단의 표는 Pascal VOC(2007)에 대한 감지 결과 mAP 평가지표가 R-CNN보다 우수했으며 시간을 절약했다는 내용을 담고 있습니다.
ftfc7 : fc7 Layer를 Fine Tuning한 mAP 결과값
ftfc7 bb : 위에서 Bounding Box Regression까지 포함한 mAP 결과값
3) ILSVRC 2014 Detection
다음은 2014년에 있었던 ILSVRC Object Detection 대회에서 SPPNet이 2위를 차지했다는 내용입니다.
[4] Conclusion
- SPPNet은 기존 CNN이 이미지 입력에 있어 고정된 크기를 입력해야 하는 단점을 보완한 모델
- CNN의 FC Layer 때문에 이미지 입력 크기를 고정시켜야 하는데, 이를 SPP Layer로 해결함
- Conv Layer 5개 + SPP Layer + FC Layer 3개로 모델 구조가 구성되어 있음
- bin을 사전에 설정하여 SPP Layer의 출력 벡터 크기를 결정함
- Bounding Box를 5개의 Conv Layer를 거친 후에 생성하기 때문에 객체 탐지 시간을 매우 절약할 수 있었음 (vs R-CNN)
- 2014년 ILSVRC Object Detection에서 2위를 차지함
CV 논문은 항상 Pooling, Feature Map 등 차원에 관한 이해가 가장 중요한 듯 합니다.아직 완전 이해는 멀었지만 Inception 보다는 SPPNet이 조금 더 이해하기 수월했다는 느낌이 드네요.
'논문리뷰' 카테고리의 다른 글
[논문리뷰] MoblieNet 논문 리뷰 (2) | 2025.01.12 |
---|---|
[논문리뷰] Inception v2, v3 논문 리뷰 (1) | 2025.01.04 |
[논문리뷰] Whisper 논문 리뷰 (9) | 2024.08.27 |
[논문리뷰] Flamingo 논문 리뷰 (0) | 2024.08.22 |
[논문리뷰] mPLUG 논문 리뷰 (0) | 2024.08.18 |
[논문리뷰] CoCa 논문 리뷰 (0) | 2024.08.06 |
[논문리뷰] SimVLM 논문 리뷰 (0) | 2024.08.01 |
[논문리뷰] FILIP 논문 리뷰 (5) | 2024.07.23 |