본문 바로가기

Enginius/Machine Learning

Deconvolution and Checkerboard Artifacts

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