Day to_day

Global Average Pooling이 뭐길래? 본문

Deep Learning

Global Average Pooling이 뭐길래?

m_inglet 2024. 2. 24. 22:45
728x90
반응형

들어가며

Pooling layer의 한 종류인 Global Average Pooling(GAP)에 대해서 알고는 있었지만 더욱 정확하게 알고, 그 특징과 GAP가 나오게 된 배경에 대해서 정리하고자 이번 포스팅을 작성하게 되었다.

 

Global Average Pooling은 무엇인가?

 

간단하게 말해서 Convolution layer를 거치고 마지막에 나오는 feature map에서 각 채널마다 전체 평균을 구해서 1x1 사이즈의 채널 수는 유지된 채로 그림과 같이 계산된다. 단순히 입력 사이즈에 상관없이 냅다 평균을 내서 계산을 해버리는 것!

 

그러면 간단하게 GAP의 동작은 알겠는데 이것이 나오게 된 배경은 어떻게 될까?

 

GAP의 배경

결론부터 말하면 기존의 Fully Connected Layer의 단점을 극복하기 위해서 고안되었다고 할 수 있다.

Classifier로 사용되는 FC layer는 마지막 feature map이 이미지의 전체를 함축하고 있다고 가정하고 그 feature들의 전체를 보고 출력을 만들어내는 역할을 한다. 

그런데 이 FC layer의 치명적인 단점은 VGG에서 전체의 80%가 넘는 계산량을 차지할 정도로 가중치가 많이 필요하다는 것이다. 또한 많은 파라미터로 인해 오버피팅의 위험성도 있다. 

그리고 FC layer는 feature 전체를 matrix 연산을 하면서 공간적 위치 정보를 잃어버리는데 이건 GAP에서도 일어난다. 어쩔 수 없이 전체를 평균 내버리는데 정보 손실이 있을 수밖에 없다. 그러나 GAP는 FC layer에 비해서 비교적 공간적 정보를 덜 잃는다. 일단 그 부분은 뒤에서 더 설명하기로 하고!

또 하나 FC layer는 필수적으로 입력 이미지 사이즈를 주어야하기 때문에 그에 맞춰서 사이즈를 고정해주어야했다. 

이러한 FC layer의 단점을 보완하기 위해 GAP가 등장하게 되었다.

 

GAP의 특징

일단 FC layer의 많은 파라미터로 인한 많은 연산양과 오버피팅의 위험성을 GAP로 많이 해소했다고 할 수 있다.

그래서 많은 모델에서 GAP 연산법을 택하고 있거나 경우에 따라 FC layer와 GAP가 같이 사용되기도 한다. 

 

아까 한가지 의문이 들었던 점이 있었다. 분명 이렇게 극단적으로 압축을 시켜버렸는데 공간적 정보를 FC layer에 비해 덜 잃는다는 것이 나는 이해가 되지 않았다.

그런데 아래의 포스팅을 참고해서 이해했다.

 

 

GAP (Global Average Pooling) : 전역 평균 풀링

위 그림처럼 Fully-Connected Layer(전결합층) 직전의 컨볼루션 레이어에서 채널 수, 즉 feature map의 수가 6개라고 합시다. 기존 FC Layer를 사용한 분류에서는 Flatten Layer를 이용해서 입력받은 값을 굉장히

mole-starseeker.tistory.com

 

인용해 보자면, 

" GAP 연산은 채널 별로 평균을 낼 뿐이고, 평균을 통해 얻은 클래스 개수만큼의 1차원 벡터와 클래스 라벨로 loss를 계산해 업데이트했을 때, GAP 연산의 결과가 아닌 GAP 연산을 거치기 전의 컨볼루션 필터(커널)들을 학습시킨다. "

다시 정리하면 가중치를 업데이트 시키면서 이미지의 특징을 더 잘 잡는 컨볼루션 필터를 학습시킨다는 것이다. 그렇기 때문에 GAP연산이 FC layer에 비해 공간적 정보를 상대적으로 덜 잃는다는 것이다.

 

 

다시 한번 GAP에 대해 정리했고, 논문 구현을 통해서 한번 실제 적용을 해보려고 한다! 

 

 

Reference

https://mole-starseeker.tistory.com/66

https://gaussian37.github.io/dl-concept-global_average_pooling/

728x90
반응형