본문 바로가기

Computer Vision

Pixel Recursive Super Resolution

Pixel Recursive Super Resolution


한줄요약
GAN처럼 다루기 힘든 intractable generative model이 아닌, tractable generative model(PixelCNN)을 super resoltuion에 적용해봤다.


구글 브레인에서 나온 논문이라, 수식이 조금 복잡하고 자꾸 어려운 말로 개념을 설명해서 읽으면서 참 곤란(?)했다.
일단 풀고자하는 문제는 super resolution인데, 이 문제를 확률 모델로 끌어오면서 pixel간의 dependency를 고려한 multi modal 문제로 이걸 다루어야 한다고 실험을 통해 주장한다.

일단 super resolution 문제를 probabilistic하게 바라보면 eq(1)처럼 fomulation을 할 수 있다.

low resolution pixel 값이 주어졌을 때, target high resolution pixel의 log-likelyhood로 확률 값을 나타낼 수 있고 이를 maximize시키면 우리가 원하는 task를 위한 확률 모델을 얻을 수 있다.

pixel값이 independent하다고 가정하면 최적화를 해야하는 likelyhood 함수 p(y|x)는 continous한 gaussian form(eq3)과 discret한 softmax(eq4)함수로 나타낼 수 있다. 여기서 softmax함수는 multimodal을 표현할 수 있으나, 실제로 학습 시 조건부를 걸어주지 않으면 그렇게 학습 되지는 않는다. gaussian form은 L2 loss를 최소화하는 것으로 likelyhood값을 maximize할 수 있다.

그리고 재밌는 실험을 했는데, L2, cross-entropy 그리고 pixel cnn을 이용해서 MNIST 데이터에 대해 실험을 해봤다. 여기서 MNIST는 일반적인 MNIST가 아니라 해당 숫자가 top-left 혹은 right-botton 둘 중 하나에 위치하도록 데이터를 수정했다. 그리고 각각의 모델의 결과를 보면 아래와 같다.


즉, pixel간의 dependency를 고려하지 않으면 위와 같은 문제가 발생한다. 그러므로 likelyhood 함수를 서로 다른 분포의 joint로 구성해서 multi-modal 형태를 가지도록 해야된다고 말하고 있다.
이건 다른 연구에서도 많이 지적하는 것으로, L2 loss를 쓰면 이미지가 blurry해지는 것과 같은 현상이다.
그리고 당연하게도 GAN 또한 이 문제르 해결할 수 있는 방법 중 하나이지만, GAN의 고질적인 문제인 mode collapse때문에 mode의 갯수가 늘어나면 문제가 될 수 있다고 언급만 하고 있다.

그래서 이제 본격적으로 PixelCNN으로 문제를 풀어보자. PixelCNN은 처음 제안되었을 때 부터, 이전 pixel 값들을 조건부로 가지고 다음 pixel 값을 prediction한다. eq(5) 그리고 예전에 분명 PixelCNN 논문을 읽었었는데 여기서 계속 말하는 gate가 뭔지 1도 기억이 안난다....
아무튼 여기서 PixelCNN을 사용함으로써, pixel 간의 correlation을 학습할 수 있다는 사실.
그런데 예전 PixelCNN이 GAN에 밀린 이유 중 하나로, auto-regressive model은 영상의 전체적인 구조를 무시하는 경향이 많다.
그래서 여기서는 이를 보완해주기 위해 conditioning network라는 것을 하나 더 추가해서, likelyhood 함수를 PixelCNN과 Conditioning network의 합으로 나타내고 있다. eq(6)
그리고 최종 loss는 log-likelyhood를 maximize시키기 위해, pixel 값(0~255)을 각 class로 보고 ground-truth(high resolution image)를 one-hot으로 인코딩한 뒤 cross entropy로 표현했다. eq(7)
그리고 논문에서는 앞선 loss(eq(7))은 conditioning network가 correlation을 무시하는 경향이 있다고해서 conditioning network의 output만 따로 또 loss에 추가했는데, 이건 무슨말인지 모르겠다. (ㅠㅠ)

최종적인 구조는 아래 그림과 같다.


결과는 아래와 같다.



실험 부분은 아직 정확히 안읽었고, 아이디어만 봤다. 예전 batch norm 논문을 읽었을 때도 느꼈지만, 구글 브레인은 참 연구를 연구답게 하는 조직인 것 같다. 최근 Ali가 NIPS talk에서 지적한 것과 같이 최근 '딥러닝 연구'라는게 연금술에 가깝다고 했는데, 그래도 구글 브레인에서 쓰는 논문은 적절한 실험으로 주장을 뒷받침하는 것 같아서 그런 느낌은 많이 들지 않는 것 같다. 뭐..내가 딥알못이라 다른 논문에서 그런걸 못 느꼈을수도..