티스토리 뷰
Upsampling은 pooling layer를 거치면서 축소된 feature map을 원본 이미지 크기로 되돌리기 위해 사용하는 방식이다. 즉, conv와 pooling을 거치면서 원본 이미지를 압축해나가는 과정과 반대로 크기를 늘려나가는 방식이다. 이러한 upsampling은 여러 가지 방식으로 구현될 수 있다.
1) Nearest Neighbor / Bed of Nails
위 그림에서 표현된 두 가지 방식은 upsampling을 할 수 있는 가장 쉬운 방식 중 하나이다. 먼저, nearest neighbor는 dense layer를 늘린 뒤에 원본 이미지의 근접한 픽셀값을 채워넣는 방법이다. Bed of Nails는 마찬가지로 dense layer를 늘린 뒤에 한쪽 픽셀에만 기존에 가지고 있던 값을 채워넣고 나머지 칸들은 0으로 채우는 방식이다.
2) Bilinear Interpolation
Bilinear interpolation 방식은 x, y의 2차원에 대해 선형 보간법을 이용해서 필요한 값을 채우는 방식이다. 즉, dense layer의 사이즈를 늘렸을 때 비어있는 칸들을 네 개의 인접한 점들의 값과 그에 따른 면적을 가중치로 하여 값을 계산하게 된다.
3) Max Unpooling
Bed of Nails와 유사한 방식으로 maxpooling을 했을 때 최댓값의 위치를 기억해서 그 자리에 원본값을 넣어주고, 나머지 칸은 0으로 채우는 방식이다. 이를 구현하기 위해서는 maxpooling을 수행할 때 최댓값의 자리에 대한 정보를 upsampling하는 단계에 넘겨주어야 한다.
4) Transpose Convolution
UNet에서 이용하고 있는 upsampling 방식으로 기존에 conv layer에 대한 연산을 반대로 수행한다고 생각하면 된다. 주어진 입력과 거꾸로 학습된 parameter를 이용해서 더 큰 크기의 출력을 얻는다.