본문 바로가기
딥러닝 with Python

[딥러닝 with Python] SRGAN이란? / Super Resolution GAN (1/2) / SRGAN의 개념

by CodeCrafter 2023. 10. 5.
반응형

[본 포스팅은 논문 " Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network " 와 wikidocs "한땀한땀 딥러닝 비전 백과사전"을 참고하여 작성하였습니다]

 

이번에 알아볼 GAN 모델은 화질을 개선시켜주는 GAN인, Super Resolution GAN입니다.

 

 

1. Image Super Resolution 이란?

 

- Image Super Resolution(이미지 슈퍼해상도, 이하 SR)는 저해상도 이미지를 고해상도 이미지로 업스케일링하는 컴퓨터 비전 및 이미지 처리 기술을 말합니다. 

 

- 이 기술은 이미지의 세부 정보를 높이고 이미지의 시각적 품질을 향상시키는 목적으로 사용되는데요

 

- 이러한 SR이 사용된 분야는 정말 다양합니다. 

 

 * 디지털 줌 : 고해상도가 필요한 상황에서 저해상도 이미지를 고해상도로 업스케일링

  (Digital Zoom을 하게되면, 오리지날 이미지의 pixel의 영향을 받기때문에 해상도가 떨어질 수 있는데, 이를 SR로 해결할 수 있습니다)

 

* 의료 이미징 : 의료 영상에서 중요한 세부 사항을 감지

 * 보안 카메라 : CTV 등의 보안 카메라 영상을 고해상도 변환하여 범죄나 사고 조사에 도움

 

 

- 이때, Singe Image Super Resolution이 많이 사용되는데요. 이는 단일 저해상도 이미지를 사용하여 해당 이미지의 고해상도 버전을 생성하는 방법을 말합니다.

 

- 이러한 Singe Image Super Resolution 문제를 해결하는 방법 중 Deep Learning-based method에 대해서 알아보겠습니다. 

 

- 그 중 오늘 알아볼 논문인 " Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network "에 등장한 SR GAN에 대해서 알아보겠습니다.

 

 

2. SR GAN (Super Resolution GAN)

- SR GAN은 2017년 " Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network " 논문에서 제시된 Deep Learning Based Super Resolution method 입니다.

 

- 기존에 SRCNN이라는 모델이 딥러닝 베이스의 모델로 Super Resolution 문제를 해결하기 위한 접근을 시작하였으며 그 이후 더 빠르고 더 깊은 CNN 모델들이 제시되었으나, Texture detail이 떨어지는 문제는 해결되지 못했었는데요

 

- 위와 같이 texture의 detial이 떨어지는 문제를, 해당 논문의 저자들은 기존 딥러닝 베이스 모델들의 Loss function에 있다고 보았습니다. 

 

- 기존 SR 모델들은 복구된 HR 이미지와 원본 이미지의 픽셀 값을 비교하여 pixel-wise MSE를 최소화하는 것을 목표로 하였습니다. 즉, pixel-wise loss를 사용하였는데요. 

 

 * pixel-wise loss : 이미지의 각 픽셀 간의 차이 또는 거리를 계산하여 측정하며, 이 loss는 주로 MSE나 MAE로 계산도비니다. 하지만, 1) 디테일 손실(이미지에서 높은 픽셀값을 가지는 부분의 특징을 무시하고 전체적인 픽셀값에 근사를 시키기 때문에 전반적으로 부드러운 이미지의 결과를 만들고 특징을 잃어버림), 2) 너무 많은 평균화(엣지나 텍스처 영역 등 세부 정보를 무시함) 등의 문제를 발생

 

- 주로 pixel-wise MSE를 loss function으로 정의하여 이를 최소화하는 것으로 학습을 시켰는데요. 이럴경우, 특정 부분읜 high-texture detail을 제대로 잡아내지 못하는 등의 한계가 발생하게 됩니다. 

 

- 해당 논문의 저자들은 이러한 문제를 해결하기 위해 VGG-network의 high level feature map을 이용한 perceptual loss를 제시하여 이런 문제를 해결하였습니다. 

 

 

- 네트워크의 구조는 아래와 같습니다.

 

* 여기서 VGG-network의 high level feature map이란, 네트워크의 상위 레이어나 깊은 레이어에서 추출되는 특징 맵(feature map)을 지칭합니다. 이는 원본 이미지의 추상적인 정보를 높은 수준에서 표현하며 이미지의 고수준 특징을 포함하고 있습니다. 즉, 기존 SR 모델들이 pixel-wise loss를 통해 고려하지 못했었던 이미지의 고수준 특징, 디테일들을 고려하기 위해 VGG-network를 활용해 feature map을 추출하여 이를 Discriminator에 활용한 것입니다.

 

* perceptual loss : 이는 딥러닝 이미지 생성 및 변환 작업에서 사용되는 손실 함수 중 하나로, 이미지의 인간적인 인식에 관련된 특징(특정 부분의 texture, 디테일 등)을 보존하도록 모델을 조정하는데 사용됩니다.

 이는, a) 미리 훈련된 VGG와 같은 신경망을 활용해 입력 이미지와 생성 이미지에서 중요한 특징을 추출하고, b) 추출된 특징 간의 차이를 계산하여 손실을 정의합니다. 이때 이 차이는 MSE나 Cosine Similarity를 통해 loss가 정의됩니다.

 

 

* Generator(생성자) Network 

· 위 이미지에서 나온 것 처럼 B 개의 Residual Blocks(잔차 블록)을 가지고 있으며, 각 residual block은 커널사이즈가 3인 커널, feature maps의 크기가 64, stride가 1로 정의되어 있습니다. 또한, 각 Residual Block은 3x3 Convolutional layer(합성곱 층) -> Batch Normalization(배치 정규화) -> PReLU(Parametric ReLU) -> 다시 3x3 Convolutional Layer -> Batch Normalization -> Element wise Sum의 과정을 거칩니다. 

 

· Residual Block 및 PReLU에 관한 내용은 아래 포스팅을 참조하시면 되겠습니다.

[딥러닝 with 파이썬] PReLU란? Parametric ReLu란? (활성화함수, Activation Function)

[딥러닝 with 파이썬] RESNET(잔차신경망)의 개념 (1/2)

 

[딥러닝 with 파이썬] RESNET(잔차신경망)의 개념 (1/2)

이번에 알아볼 신경망은 잔차 신경망, Residual Net(RESNET) 입니다. 잔차 신경망은 2015년에 처음 등장한 신경망으로, 복잡한 신경망 작업을 원활하게 만들었고 정확도 또한 높게 달성할 수 있었기에

jaylala.tistory.com

 

· 또한 마지막 두개의 블록에서는 Pixel Shuffle을 거치게 됩니다. 일반적으로 Convolutional Layer를 거친 이미지들은 그 이미지의 차원이 작아지거나 동일하게 유지됩니다. 우리는 이미지의 Super Resolution을 위해 차원(Dimension)을 증가시켜야 하는데 이때 사용되는 방법이 Pixel Shuffle이 되겠습니다. Pixel Shuffle에 대한 내용은 아래 포스팅을 참조하시면 되겠습니다.

[딥러닝 with 파이썬] 픽셀셔플 / Pixel Shuffle

 

 

* Discriminator(구별자) Network 

· 이번에는 Discriminator의 Network에 대해서 알아보겠습니다. 여기서 특징적인 것만 알아보면, Leaky ReLU를 사용했고 음의 입력값에 대한 기울기인 alpha는 0.2입니다. 

· Reisdual block의 구조는 3x3 Convolutional Layer -> Batch Normalization -> Leaky ReLU 로 구성되어있습니다.

· feature map의 수는 VGG network 처럼 64부터 512까지 커집니다. 

· 마지막 feature maps 뒤에는 dense layer 2개, 그리고 이진분류를 위한 sigmoid함수로 구성되어 있습니다.

 

 

* Loss Fuction은 앞서 언급했던 것처럼 Perceptual loss를 사용합니다. 

· Perceptual Loss는 content loss와 adversarial loss의 합으로 구성되어 있습니다.

 

· 먼저 Adversarial Loss는 일반적으로 GAN의 loss 알려진 loss와 비슷합니다. 식은 아래와 같습니다.

이때,

은 Generator가 생성한 이미지를 진짜라고 판단할 확률로, 앞에 -가 붙어이쓰므로 이를 최소화하는 방향으로 학습을 진행합니다. 

 기존 GAN loss는 log(1-x)의 형태로 되어 있으나, 이러면 training 초반 부에 학습이 느리다는 점이 있습니다. 이를 -log(x) 형태로 바꾸어주면 학습 속도가 훨씬 빨라집니다.

 

· 다음은 Content loss 입니다. 

  • Φ_i,j = Feature map obtained by the jth convolution (after activation) before the ith maxpooling layer within the VGG 19 network
  • 시그마 안에 값 = Generator가 생성한 이미지와 original HR 이미지로 부터 얻은 Feature map 사이의 Euclidean distance
  • Wi,j & Hi,j = the dimensions of the respective feature maps within the VGG network.

Content loss는 앞서 설명한 perceptual loss와 거의 비슷한 개념입니다. 

 

perceptual loss은,  동일한 이미지를 한 pixel식 옮긴 이미지에 대해 Per pixel loss로 계산할 경우 loss가 0이 나오지 않는 문제점인 ill-posed problem을 해결하기 위해 나온 개념입니다. 

ill-posed problem이란 저해상도 이미지를 고해상도로 복원 해야하는데, 가능한 고해상도의 이미지가 여러 개 존재하는 것을 말합니다. 

이때, GAN 모델을 이용해 여러 개의 가능한 고해상도 이미지를 구하여도 MSE based Per-pixel loss를 사용하면 possible solutions 들을 평균내는 결과를 취하여 GAN이 생성한 다양한 high texture detail들이 smoothing 되는 결과를 초래합니다.

 

이런 단점을 해결하기 위해 GAN이 생성한 High Resolution 이미지와 Original High Resolution 이미지를 Pretrained VGG19에 통과시켜 얻은 Feature map 사이의 Euclidean distance를 구하여 content loss를 구합니다.

 

 

 

* 성능 

 

SRResNet / SRGAN에서 pixel wise loss를 MSE로 정의한 모델 / SRGAN에서 22층으로 구성된 VGG가 추출한 특징맵을 활용해 Perceptual loss를 활용한 모델 / SRGAN에서 54층으로 구성되 VGG가 추출한 특징맵을 활용해 Perceptual loss를 활용한 모델 / 그리고 원본의 고해상도 이미지의 특정 부분을 확대해 보니

 

texture의 detail이 확실히 좋아졌음을 알 수 있습니다. 

반응형

댓글