본문 바로가기

Deep Learning/PyTorch

영상 Resolution 복원을 위한 CNN 모델을 구현해보자!

흐린 영상의 해상도(Resolution)를 복원하는 것도 CNN을 통해 구현할 수 있다는 놀라운 사실을 아는가?

이번 포스팅에서도 코드를 따라가며 직접 그 결과를  확인해보자.

먼저 공개 데이터셋을 원하는경로에 다운로드한다.

다음으로 제각각인 영상의 크기들을 128x128과 32x32로 두 가지 경우로 나누어 입력값과 Ground Truth값으로 만든다.

Upsampling하는 네트워크를 잘 구축하는데, 이 때 중요한 포인트는 바로 Conv2d와 ConvTranspose2d이다.
이 네트워크에서 Conv2d는 stride=2의 값으로 주어 영상의 크기를 반으로 줄이는 역할을 하고,
ConvTranspose2d는 stride=2의 값일때, 영상의 크기를 2배로 크게하는 역할을 수행한다.
물론 그 크기가 계산과정에서 입력영상의 크기에 따라 몇 픽셀 정도 차이가 날 수 있어 Padding을 통해 보정하고,
ReLU와 BatchNorm을 적용해 학습이 잘 이루어질 수 있도록 도모한다.
결국 다음의 네트워크에서는 0.5배축소-> 0.5배축소-> 2배확대-> 2배확대-> 2배확대-> 2배확대가 수행되며,
입력영상의 크기를 4배로 확대한 영상을 출력값으로 생성한다.

 

첫 번째 열: Ground Truth 영상 (128x128), 두번째열: Nearest Upsample (32x32 to 128x128), 세번째 열: Bilinear Upsample (32x32 to 128x128), 네번째 열: Bicubic Upsample (32x32 to 128x128), 다섯번째 열: CNN Upsample (32x32 to 128x128)

128x128 영상을 32x32로 resize (scale down)하고 이를 다시 128x128으로 upsampling하게 되면
영상의 resolution이 저하됨을 확인할 수 있다. 이 때, upsampling하는 여러가지 방법들이 존재하는데,
위 결과 그림에서 보이듯이 CNN을 통한 Upsampling이 가장 원본영상에 가깝게 해상도를 복원해줌을 확인할 수 있다.