흐린 영상의 해상도(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배로 확대한 영상을 출력값으로 생성한다.
128x128 영상을 32x32로 resize (scale down)하고 이를 다시 128x128으로 upsampling하게 되면
영상의 resolution이 저하됨을 확인할 수 있다. 이 때, upsampling하는 여러가지 방법들이 존재하는데,
위 결과 그림에서 보이듯이 CNN을 통한 Upsampling이 가장 원본영상에 가깝게 해상도를 복원해줌을 확인할 수 있다.
'Deep Learning > PyTorch' 카테고리의 다른 글
PyTorch 학습 모델 저장 및 불러오기 (0) | 2020.07.27 |
---|---|
Embedding에 대해서 알아보자 (0) | 2020.07.27 |
Fashion MNIST를 이용한 CNN기반 Classification 따라해보기! (0) | 2020.07.16 |
나만의 신경망 모듈 만들어보기! (0) | 2020.07.14 |
Overfitting 문제 해결해보기 (0) | 2020.07.14 |