Deconvolution & Overlap
neural networks가 이미지를 생성할 때 종종 높은 수준의 묘사, 저해상도로 구축한다. 이를 통해 network는 rough한 이미지를 묘사하고 detail을 채울 수 있다.
그럴러면 저해상도 이미지에서 더 높은 해상도로 가는 방법이 필요하다. 일반적으로 deconvolution 연산으로 이를 수행한다. deconvolution layer를 사용하면 model이 작은 이미지의 모든 point들을 사용하여 더 큰 이미지의 정사각형을 "paint"할 수 있다. 여기서 paint는 말 그대로 칠하다라는 의미로 이해하면 될 것 같다.
불행히도, deconvolution은 쉽게 "uneven overlap(불균일한 겹침)"을 가질 수 있으며, 어떤 위치에는 다른 위치보다 더 많이 paint가 된다. 특히 kernel 크기가 stride로 나누어지지 않을 때 deconvolution이 고르지 않게 겹친다.
overlap pattern은 다음과 같이 2차원에서도 형성된다. 두 축의 uneven overlap이 함께 multiply되어 다양한 크기의 checkerboard pattern이 만들어진다.
사실 uneven overlap은 2차원에서 더 극단적인 경향이 있다. 두 패턴이 함께 곱해지기 때문에 불균일이 제곱된다는 것이다. 예를 들어 1차원에서 stride 2, 크기가 3인 deconvolution은 다른 것보다 입력 수가 두 배인 일부 출력을 갖지만 2차원에서는 이것이 4의 배수가 된다.
neural networks는 일반적으로 이미지를 생성할 때 여러 계층의 deconvolution을 사용하여 일련의 저해상도 묘사에서 더 큰 이미지를 반복적으로 구축한다. 이렇게 쌓인 deconvolution이 artifact를 상쇄하는 것이 가능하지만 종종 합쳐져 다양한 scale의 artifact를 생성한다.
성공적인 모델에서 마지막 레이어로 흔히 볼 수 있는 stride 1 deconvolution은 artifact를 줄이는데 매우 효과적이다. 이미지의 크기를 나누는 artifacts of frequencies를 제거할 수 있고 크기가 더 작은 경우 줄일 수 있다. 그러나 많은 최근 모델에서 볼 수 있듯이 artifact는 여전히 누출 될 수 있다.
그렇다고 artifact를 피하려고 filter의 크기를 크게하면 모델의 용량이 커진다.
Better Upsampling
첫 번째 방법은 overlap을 피하면서 stride로 나눈 kernel 크기를 사용하도록 하는 것이다. 이것은 최근 초해상도에서 성공한 기술인 "sub-pixel convolution"에 해당한다. 이 방법이 도움은 되지만 deconvolution이 artifact에 빠지기 쉽다.
다른 방법으로 더 높은 해상도로의 upsampling을 convolution에서 feature 계산으로 분리한 것이다. 예를 들어 NN interpolation이나 bilinear interpolation과 같은 것을 사용하여 이미지 크기를 조정한 다음 convolution layer를 수행할 수 있다.
deconvolution과 다른 resize-convolution 방법은 모두 선형 연산이고 행렬로 해석될 수 있다. 이것은 그것들 사이의 차이점을 보는데 도움이 되는 방법이다.
NN interpolation으로 최고의 결과를 얻었고 bilinear interpolation은 resize 작업을 수행하는데 어려움을 겪었다고 한다. 이것은 가장 가까운 neighbor가 deconvolution에 최적화된 hyper-parameter와 잘 작동했음을 의미할 수 있다.
Summary
deconvolution을 사용할 경우 uneven overlap이 발생하게되고 Checkerboard Artifacts가 생기게된다. 이러한 문제를 해결하기위해 upsampling(NN interpolation)과 convolution을 따로 분리하여 수행하는 방법을 사용하였다.
[Reference]
'Boostcamp AI Tech' 카테고리의 다른 글
Fully Convolutional Networks(FCN) and VGGNet Segmentation Implemenation (0) | 2021.09.12 |
---|---|
[Boostcamp Day-29] Computer Vision - Object Detection (0) | 2021.09.10 |
[Boostcamp Day-28] Computer Vision - Semantic Segmentation (0) | 2021.09.09 |
[Boostcamp 6주차] 피어세션과 학습 회고 (0) | 2021.09.09 |
[Boostcamp Day-27] Computer Vision - Image Classification 2 (0) | 2021.09.08 |