딥러닝 AI 프로젝트 실사례/미니 프로젝트

미니 프로젝트: GAN을 통한 Image Super-Resolution

공부중인학생 2022. 11. 26. 05:30

Image Super-Resolution은 저해상도(LR) 영상/이미지를 고해상도(HR) 영상/이미지로 변환하는 알고리즘입니다. 오늘날에 카메라 기술이 많이 발달하여 굉장히 먼 거리에 있는 물체들도 선명하게 촬영할 수 있게 되었습니다.

 

하지만 노후화나 비용적인 문제, 주변 환경 등 여러 요인으로 인해 저해상도 이미지들을 쉽게 접할 수 있습니다. 그렇기 때문에 미디어, 의료, 보안 등 다양한 산업 분야에서 Image Super-Resolution은 중요한 문제로 대두되고 있습니다.

 

https://www.yna.co.kr/view/AKR20191108058400063

 

 

Image Super-Resolution에 접근하는 방식은 크게 2가지로 나뉩니다.

 

1. Convolution layer를 사용한 Supervised Learning

    - 저해상도 이미지로 고해상도 이미지를 예측하는 Supervised Learning입니다.

 

2. Generative Adversarial Network(GAN)

    - GAN을 사용해 고해상도 이미지 분포를 학습하고 생성하는 방식입니다.

 

 

 

두 케이스를 전부 다뤄볼 예정이지만 Conv layer의 경우 날카로운 모서리가 흐려져서 text detail이 부족한 점과 대각선 가장자리 부분에서 blocking artifacts가 생기는 문제가 존재합니다. 먼저 GAN을 다뤄보겠습니다.

 

면적이 좁은 모서리 부분이 흐릿해짐 (Image super-resolution survey)

 

대각선 가장자리 부분이 불연속적으로 보임, 계단 패턴이 생김(Image super-resolution survey)

 

이번 미니 프로젝트에서 사용하는 모델은 2017년도에 발표된 Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network 제안한 SRGAN입니다.

 

 

 

SRGAN의 특징

 

저해상도 이미지에서 고해상도 이미지를 추정하는 작업(SR)은 매우 어려운 작업입니다. 이전까지 모델들은 생성된 이미지와 정답 사이 MSE를 최소화하여 진행하였지만 높은 텍스처 디테일과 같이 지각적으로 관련된 차이를 캡처하는 MSE의 기능은 픽셀 단위 이미지 차이를 기반으로 정의되므로 매우 제한적입니다.

 

그렇기 때문에 VGG network를 평가모델로 사용하여 추출된 feature map을 사용하여 loss를 계산을 합니다.

 

 

 

Preprocessing

 

 

데이터 셋은 캐글에서 찾아서 진행했고 위 사진과 같은 고해상도 이미지들을 포함하고 있습니다.

 

 

저해상도 이미지를 얻기 위한 전처리 과정입니다. Image size를 논문에서 사용한 96x96으로 변경하여 진행하였고 blur 처리를 했습니다. noise는 가우시안 노이즈를 사용했습니다. 위 사진과 같이 고해상도 이미지를 저해상도로 변경하여 pair data set을 만들어 학습했습니다.

 

 

 

Model

 

저희는 기존 모델에서 layer를 더 추가하여 진행했습니다.

 

1. Skip Connection 추가

 

    - 깊어질수록 정보 유실이 존재하기 때문에 skip connection은 4개 더 추가하여 텍스처를 더 선명하게 만들었습니다.

    - 기존 모델은 1개의 skip connection을 사용합니다.

 

 

2. Pixel Shuffle 추가

 

    - 기존 모델에서는 Pixel Shuffle 2개를 사용하여 HR 크기로 이미지를 변환하는데 이때 정보 표현이 단순해지는 문제가 존재합니다.

    - 그렇기 때문에 Pixel Shuffle을 1번 더 추가하여 채널 조절의 용이하게 하게 하고 concatenate로 정보를 더 추가했습니다.

    - 그다음 위에서 구한 map들을 Pixel Shuffle을 진행하여 Max pooling을 적용했습니다.(Max pooling을 사용할 경우 이미지가 더 선명해지기 때문에 추가했습니다.)

 

 

 

Result