본문 바로가기
DL|ML

Checkerboard Artifacts 체커보드 아티팩트

by 이든Eden 2020. 5. 28.

EnhanceNet 논문을 읽다가 Checkerboard Artifacts가 나와서, 평소같으면 대충 넘어가겠지만 오늘은 한 번 포스팅을 해보려고 한다. Super Resolution 깨끗하게 만들어서 저화질 트와이스 사진 고화질로 만들어야징

 

아래의 링크에서 설명을 잘해줘서 아래를 요약하는 식으로 해보겠다.

 

https://distill.pub/2016/deconv-checkerboard/

 

Deconvolution and Checkerboard Artifacts

When we look very closely at images generated by neural networks, we often see a strange checkerboard pattern of artifacts.

distill.pub

 

Checkerboard Artifacts가 무엇일까

보통 저화질의 사진에서 고화질의 사진으로 generate할 때 뉴럴넷은 러프한 이미지를 그리고 디테일을 채운다고 한다.

근데 이걸 하기 위해서는 저화질에서 고화질로 맵핑을 해야되는데(맵핑이라는 단어가 맞을 지 모르겠지만..) 이 때 우리는 Deconvolution(==Transposed convolution)을 한다.

 

Deconvolution을 하다보면 어쩔 수 없이 "uneven overlap"이라는걸 하게된다. 내가 참고한 글에서는 은유로서 표현되는 어떤 페인트를 덧바르는 것이라고 이야기했다. 이러한 uneven overlap은 커널 사이즈(output window size)가 stride로 나눠지지 않을 때 생긴다.

 

uneven overlap은 2차원에서 더 많이 생기는 경향이 있다고 한다. 왜냐하면 2차원에서는 두 개의 패턴이 곱해지고 unevenness가 제곱이 되기 때문이다. 예를 들어 1차원에서, stride가 2 사이즈가 3인 deconvolution은 두 배로 곱해지는 부분이 있지만 2차원에서는 네 배로 곱해지게 된다.

 

아래에 이미지를 멍하게 계속 보면 이해가 된다. 그림을 보면서 설명을 한다면 1차원에서는 필터가 한 방향으로만 가면 되니까 두 번만 겹치는데, 2차원일 때는 겹치고 아래에 내려가서 또 겹친다.

 

1차원 일 때 even overlap [출처 : https://distill.pub/2016/deconv-checkerboard/]
2차원일 때 even overlap [출처 : https://distill.pub/2016/deconv-checkerboard/]

 

그런데 뉴럴넷은 보통 deconvolution을 위해 여러개의 레이어를 사용한다. 이렇게 쌓인 디콘볼루션으로 인해 아티팩트가 취소되는 것은 가능하지만, 종종 복합적으로 작용하여 다양한 스케일의 아티팩트를 만들어 낸다.

 

성공적인 모델(Improved techniques for training gans라는 논문)의 마지막 레이어로 흔히 볼 수 있는 Stride 1 디콘볼루션은 아티팩트를 감쇠시키는 데 상당히 효과적이다. 

 

Checkerboard Artifacts 피하기

1. 커널 사이즈를 stride로 나눠지도록 설정하기. (Make sure you use a kernel size that is divided by your stride, avoiding the overlap issue.)

 

커널 사이즈가 stride로 잘 나눠떨어진다면 checkerboard artifacts가 생기지 않는다.

이 방법은 "sub-pixel convolution"이라는 최근 image super-resolution(Real-time single image and video super-resolution using an efficient sub-pixel convolutional neural network라는 논문)에서 성공한 기법이다.(내가 참고한 글은 2016년에 쓰여졌다.. 2016기준 최신, 요즘은 어떨려나) 이 방법은 도움이 되지만 여전히 artifacts가 생기기 쉽다고 한다.

 

2. 업샘플링을 콘볼루션과 분리하기. (Separate out upsampling to a higher resolution from convolution to compute features.)

 

예를들어, 이미지를 nearest-neighbor interpolation 또는 biliniear interpolation을 이용해 사이즈를 키운 후 콘볼루션을 한다. 이건 자연스러운 접근법으로 보이며, 대략 비슷한 방법이 image super-resolution(Image super-resolution using deep convolutional networks)에서도 잘 작동했다.

 

 

Artifacts in Gradients

콘볼루션 레이어의 gradient를 계산할 때, deconvolution을 하게 된다. 이때 역시 우리가 images를 generate할 때 처럼 checkerboard pattern이 생길 수 있다.

 

 

 

어느 정도 이해를 한 것 같다. 더 자세히 알고싶은 분은 링크로 바로 들어가셔서 읽으셔도 좋을 것 같습니다. 하지만 2016년 글이라는 것을 인지하시면서 읽으세요. 틀린 부분이 있다면 언제든 댓글 달아주세요.