I've recently found a great article related to deconvolution and checkerboard artifacts.
https://distill.pub/2016/deconv-checkerboard/
위의 사진들이 말하는 것은 밝은 영역을 만들 때 이상한 strange checkerboard pattern of artifiact를 만든다는 것이다. 이러한 이유가 생기는 이유에 대해서 알아보자.
Deconvolution & Overlap
뉴럴넷을 이용해서 이미지를 만들 때, 많은 경우에 저해상도에서 고해상도를 만든다. 이는 네트워크가 rough image를 만들고, 그 중간을 채워넣는 방향으로 디테일을 만든다. 이를 위해서 많은 경우에 deconvolution을 사용하게 된다.
문제는 deconvolution이 uneven overlap을 만든다는데 있다.
즉 어떤 픽셀의 경우는 다른 픽셀에 비해서 더 많은 겹칩이 생기게 된다. 물론 네트워크가 학습을 잘 해서 이러한 현상이 덜 나타내게 될 수는 있지만, 쉽지는 않다. 이러한 overlap이 이차원 공간에서 있게 되면 checkerboard 현상을 가져오게 된다.
사실 이러한 uneven overlap은 이 차원에서 더 심하게 생긴다. 게다가 뉴럴넷이 여러 개의 layer로 되어있기 때문에 이러한 현상이 stack되면서 더 심해진다. 즉 여러 scale의 artifact를 만들게 된다.
Better Upsamling
이러한 artifact를 해결하기 위해서 이미지를 먼저 resize를 하고, 그 다음에 convolution을 하는 것이다.
Deconvolution은 선형 연산으로 볼 수 있기 때문에, 위와 같이 resize를 했을 경우에 표현이 가능하다.
Resize-convolution layers can be easily implemented in TensorFlow using tf.image.resize_images(). For best results, use tf.pad() before doing convolution with tf.nn.conv2d() to avoid boundary artifacts.
결과적으로 이미지의 크기를 키우고 싶을 때, nearest neighbor로 일단 이미지를 키우고, deconvolution를 쓰는 것 보다 convolution으로 하는게 더 좋다. 라고 한다.
결과는 아래와 같다.
'Enginius > Machine Learning' 카테고리의 다른 글
Causalty란 무엇일까? (0) | 2017.12.30 |
---|---|
Back-propagation (delta rule) (0) | 2017.12.24 |
CapsNet (0) | 2017.12.19 |
NIPS 2017 - Interpretable ML workshop (0) | 2017.12.19 |
On Bayesian Deep Learning and Deep Bayesian Learning (0) | 2017.12.18 |