fully convolutional network는 어떻게 임의의 input size에서 동작하게 만들었을까?
1. 어떻게 하면 임의의 size에도 동작할 수 있을까?
기존 네트워크의 마지막 단인 fully connected layer 대신에 1*1 convolutional layer로 구성하여 가능하게 만들었다
기존 네트워크의 경우는 마지막이 fully connected layer로 linear layer니까 vector 형태로 나와서 class에 대한 확률분포를 구해주기에 적절했다면
fully convolutional network는 convolutional layer이므로 activation map을 출력하여 각 pixel에 속하는 classification 결과를 알 수 있게 해준다.
2. 1*1 convolution layer의 성질
기존 네트워크의 문제점은 output이 하나의 벡터로 나와 이미지 map의 pixel classification을 하기에 부족하다
물론 input 이미지 size에 따라 벡터 크기도 달라지므로 input 이미지 size도 고정되어야한다는 것도 문제다.
이미지의 pixel들이 한 줄의 벡터로 섞여 이미지 전체의 class를 분류하기에는 적절해도 개별 pixel 분류하기에는 부적절하다
사실 이렇게 벡터로 만들어도 pixel classification이 불가능한 것은 아니다.
어떻게 하면 pixel마다 classification을 할 수 있도록 만들수 있을까?
activation map에서 각 pixel 채널축으로 여러개의 flatten vector를 만들면 충분하다
그리고 그 flatten vector마다 fully connected를 전부 해서 class 분류를 한다면 pixel classification이 fully connected layer로도 가능하다
map에서 각 pixel부분에 대하여 채널축으로 벡터를 만드는 것이다
그렇다면 그림에서는 9개의 pixel channel vector를 만들 수 있을 것이다
그런데 사실 이 연산 어디서 본 것 같지는 않은가?
1*1 convolutional filter로 convolution 연산을 하는 것과 동일하다
fully connected layer로 할때는 (예시에서는 9개) 여러개의 벡터 각각을 출력하여 각각 pixel classification해야했는데
1*1 convolution filter는 spatial dimension을 유지하여 하나의 feature map으로 출력시켜주므로
단 한번만에 모든 pixel의 classification까지 가능하다
1*1 convolutional filter을 사용하면 각 pixel 위치의 채널축 flatten vector를 하나의 점으로 그 위치 그대로 가져온다
특히 filter가 m개면 결과도 m개의 채널을 가지는 map으로 출력된다
따라서 fully connected layer는 1*1 convolutional layer로 해석이 가능하면서(그래서 바꿀 수 있었다)
심지어 어떠한 입력사이즈가 들어와도 가능하고 단 1번에 모든 pixel classification도 가능하다
'딥러닝 > Computer Vision' 카테고리의 다른 글
Fully convolutional layer에서 사용하는 layer fusion의 원리 (0) | 2022.04.28 |
---|---|
fully convolutional network에서 Upsampling이란 무엇인가 + interpolation 기본 (0) | 2022.04.26 |
semantic segmentation을 할 수 있는 fully convolutional network의 특징 (0) | 2022.04.19 |
EfficientNet은 어떻게 만들어졌을까? (0) | 2022.03.14 |
GAN(Generative Adversarial Network)의 핵심 아이디어 미리보기 (0) | 2022.03.13 |