토리의 데굴데굴 공부일기

[ 논문리뷰 ] Pixel Recurrent Neural Networks (PixelRNN, PixelCNN) 본문

ML DL/논문리뷰

[ 논문리뷰 ] Pixel Recurrent Neural Networks (PixelRNN, PixelCNN)

도토오오리 2024. 4. 6. 22:40

Pixel Recurrent Neural Networks 

 

0. Generative Modeling 

- unsupervised learning의 일종

- pixel들의 확률 분포를 추정 (density estimation) 

 

1. Density Estimation 

1.1. Explicit density estimation 

 - Tractable density : PixelRNN / PixelCNN 

 - Approximate density : VAE

 

1.2. Implicit density estimation 

 - Direct : GAN

 - Stocastic : GSN 

 

2. Pixel - by - pixel Image Generation 

- density를 tractable 하게 실제로 modeling 

- image가 주어졌을때 그 이미지들을 만들어내는 확률분포 p(x)를 명시적으로 구하는 방법

- RNN처럼 앞자리까지 만들어낸 pixel들을 바탕으로 다음 pixel값을 예측함 

- image는 RGB 3개의 채널로 구성되어 있어 RGB 순서대로 만들어냄 

 

 

3. 구현 (3가지 방법)

3.1. Row LSTM

- hidden state + input => 예측값 

- RNN처럼 pixel을 하나하나 순차적으로 만들어냄 (RNN 개념, but 구현은 Conv로 함)

- 위 사진처럼 하나의 픽셀을 만들때 그 윗줄의 3개의 pixel을 참고함 

- 하지만 이렇게 할 경우 위 사진처럼 하나의 pixel을 만들때 그 위의 역삼각형 모양의 receptive field만 보게되어 만들어진 모든 pixel들을 참고하지 않는다는 단점이 발생함

 

장점: 한 픽셀씩 recurrent하게 image를 생성할 수 있다 (image generation의 시초가 되었다는 의의를 가짐)
단점: receptive field가 앞에서 만들어낸 전체 pixel이 아님 

 

3.2. Diagonal BiLSTM

- 위의 Row LSTM의 단점을 극복하고자 고안됨. 

- 윗줄의 픽셀을 보는 것이 아닌 위 사진처럼 만들고자 하는 픽셀의 왼쪽과 위쪽의 픽셀 2개만을 참고함. 

- 이렇게 하면 결과적으로 하나의 픽셀을 만들때 이전에 만들었던 모든 픽셀을 참고할 수 있음

- 구현의 효율화를 위해 skewing이라는 기법 활용. 이렇게 한칸씩 픽셀을 다 밀면 참고하는 픽셀을 2x1 kernel로 처리 할 수 있음

- parallel하게 돌릴 수 있어 구현이 쉬움 (implementation trick)

- 그리고 이걸 오른쪽 대각선과 왼쪽 대각선 두가지 방향을 반복하여 양쪽 패턴을 동시에 볼 수 있도록 함

 

장점: receptive field가 전체 영역이 됨
단점: 속도가 느림

 

 

 

 

3.3. PixelCNN 

- 어차피 위의 것들도 구현할땐 Conv로 구현했으니, 아예 CNN으로 접근해보자! 

 

- 위 그림처럼 참고하는 영역의 pixel 부분의 Conv kernel만 1로 두고, 나머지는 0으로 둔 채 Conv layer를 거치는 방식

- 특수한  크기(3 x 3)의 Convolution mask filter를 사용해 작업

장점: PixelRNN보다 Training 시에 속도가 빠름
단점: 모델이 특정 시점 이전의 일부 데이터를 활용하지 못하는 Blind spot 문제가 발생하는 문제점 존재 (사각지대 존재) 

 

 

 

4. 후속연구

Gated Pixel CNN