본문 바로가기

인공지능 AI/컴퓨터비전

GAP(Global Average Pooling) vs FCN(Fully Convolutional Network)

<FCN>

Fully convolutional network란 1x1 convolution layer을 말한다.

일반적으로 Classification에서 Conv-Pool layer를 통과한 후 마지막에 Fully Connected Layer를 거쳐

softmax함수로 classification이 진행된다.

Classification

위와같이 일반적으로 한 이미지에 대해 classification의 경우에는 이와 같은 진행방식이 문제가 되지 않는다.

그러나 object detection과 같이 classification과 localization 둘을 수행해야 할 경우 문제가 된다.

FC layer에서 위치 정보를 담고있던 conv feature map이 dense하게 쫙 펴지기 때문에 위치정보를 모두 손실하고 만다.

 

따라서 이 문제점을 해결하고자, 위치정보를 보존하기 위해 Fully convolutional network가 나오게 되었다.

FCN은 1x1 conv filter를 사용함으로써 위치정보가 손실되는 것을 막아준다.

 

예를들어, HxWxN(H:height, W:width, N:filter #)의 feature map이 있다고 가정하자.

여기에 1x1 conv filter K개를 사용하면 HxWxK의 output이 나오게 된다.

1x1 convolution

두번째 장점으로는 위 그림과 같이 HxW즉, 이미지의 크기 자체는 그대로 보존하기 때문에

filter의 개수에 따라서 output의 dimension이 달라진다.

 

"따라서 feature map의 크기를 유지하면서 dimension을 줄여주고 싶을때 1x1 conv를 자주 사용한다."


<GAP>

위에서 설명한대로 FC layer 대신 FCN을 사용한다고 해도 softmax를 통해 classification작업을 최종적으로 수행해주는

FC layer의 기능을 대신해주지는 못한다. 예를 들어 설명해보겠다.

10개의 label이 있는 classification을 진행한다고 가정하자. 이때 CNN모듈을 통과한 후 마지막에는 FC layer를 통해

conv feature map을 10개의 node로 수렴시키기 위해 feature map을 dense하게 펼치고 10개의 node와 연결해준다.

 

예를들어, 이때 FCN을 이용하면 FC layer에 의해 무작정 HxWxN의 feature map을 10개의 node로 수렴시키기 대신

위치정보를 유지하여 HxWx10의 output을 산출한다.

그러나 이는 classification을 하기위해 다시 1x1x10, 즉 10개의 node로 resize해줘야 한다.

FCN은 단지 filter의 dimension만 줄여줄뿐 height, width는 그대로 유지하기에 위치정보를 보존하는 것이기 때문이다.

 

FCN으로 위치정보를 유지한채 dimension을 줄이고 난 후 FC layer의 기능을 수행하기 위해 GAP를 사용한다.

GAP는 conv feature map에서 하나의 filter내에 있는 모든 pixel값을 average pooling하여 1개의 value로 수렴시킨다.

따라서 GAP에서는 FCN과 반대로 위치정보를 유지하지 못하지만 filter 사이즈가 어떻든 1개의 value로 수렴시키므로

 

"GAP를 사용하면 FC layer와 달리 input size에 유동적이다"

 

GAP는 HxW의 픽셀을 1개의 value로 수렴시키기 때문에 filter의 개수만 고정시키고 input size는 유동적이게 할 수 있다.

Global Average Pooling


<요약>

FCN : 위치정보를 그대로 유지하면서 dimension, 즉 filter의 개수에 해당하는 차원을 줄일 수가 있다.

HxWxN의 feature map에 1x1 conv filter K개를 사용하면 HxWxK의 feature map으로 만들어 줄 수 있다.

layer가 깊어져서 parameter의 개수가 급증할때 gradient vanishing 현상을 예방하기 위해 FCN을 사용한다.

 

GAP : FC layer를 사용하려면 아래 그림과 같이 dense하게 펼쳐진 node들과 모두 연결이 되어야한다.

이렇게 feature map을 dense하게 펼친 후 FC layer와 연결하게 되므로 FC layer의 input size는 고정이여야 한다.

 

그러나 GAP를 사용하면 HxW의 size인 1개의 feature map을 1개의 value로 수렴시키므로 filter의 개수만 고정일뿐

input size는 유동적이다. 요즘에는 FC layer의 위와 같은 한계를 극복하기 위해 GAP로 대체시킨다.