공부/AIFFEL

Exploration 16 : 흐린 사진을 선명하게

dong_dong_2 2021. 3. 9. 20:55

1. Super Resolution 이란?
    - 픽셀이란 무엇인가
       1) 디스플레이를 구성하고 있는 가장 작은 단위
    - 빛의 3원색을 혼합하여 색을 나타내는 방식은 무엇인가
       1) RGB
    - 픽셀과 해상도의 관계는 무엇인가
       1) 해상도는 가로와 세로의 픽셀 수로 표기하며, 픽셀의 갯수가 많을수록 고해상도가 되어 선명해진다.
    - UHD, QHD, FHD, HD 순으로 해상도가 높다.
    - 사실 해상도에 대해 정확히 설명할 때는 픽셀 수 뿐만 아니라, 픽셀의 크기 등을 고려해야 하지만, 오늘 학습한 내용에서는 이 부분까지 다루지는 않았다.
    - Super Resolution이란 저해상도 영상을 고해상도 영상으로 변환하는 작업 또는 그러한 작업을 말한다.
    - Super Resolution은 수 많은 컴퓨터 비전 연구 분야 중 하나로 고해상도 디스플레이의 발전에 따라 많은 관심을 받아 왔다.
2. Super Resolution의 활용 사례
    - 우리나라에서 가장 대표적으로 꼽히는 활용 사례는 하얀거탑이라는 드라마의 리마스터링이다. 처음 방송 당시 HD화질이였는데, UHD화질로 향상되어 재방송 되었다.
    - 감시 및 보안 시스템에서 흔히 사용되는 CCTV는 대상의 거리가 멀어짐에 따라 획듯한 영상의 해상도가 저하되는 형상이 발생한다. 
    - 정보 손실이 많은 저해상도 영상을 활용한다면 차량의 번호판이나 얼글을 인식하는 데 큰 어려움을 겪거나 심지어 인식 자체가 불가능할 수 있다.
    - 이를 극복하기 위해 Super Resolution 기술을 적용하여 고해상도 이미지를 생성해 인식 성능을 높이려는 많은 연구가 진행되고 있다.
    - 의료 영상을 이용하면 구조 정보를 상세하게 관찰할 수 있으므로, 정량적인 이미지 분석 및 진단 등의 의사 결정에 많은 도움을 줄 수 있다.
3. Super Resolution을 어렵게 만드는 요인들
    - 첫 번째 어려운 점은 하나의 저해상도 이미지에 대해 여러 개의 고해상도 이미지가 나올 수 있다는 것이다.
    - 하나의 저해상도 이미지를 고해상도 이미지로 만드는데 매우 다양한 경우의 수가 있다는 것은 Super Resolution이 가진 큰 특징이며, 이런 문제를 ill-posed (inverse) problem이라 부른다.
    - 두 번째 어려운 점은 Super Resolution 문제의 복잡도이다.
    - 원래 가진 제한된 정보만을 이용해 많은 정보를 만들어내는 과정은 매우 복잡하며 그만큼 잘못된 정보를 만들어 낼 가능성 또한 높다.
    - 이 문제는 원래 가진 이미지의 해상도 보다 더욱 높은 해상도로 Super Resolution 할수록 점점 심해진다.
4. 가장 쉬운 Super Resolution
    - Super Resolution을 수행하는 가장 쉬운 방식은 Interpolation을 이용하는 것이다.
    - Interpolation이란 알려진 두 점 사이의 특정 지점에 대한 값을 추정하는 방법이다.
    - 여기에는 Linear interpolation과 Bilinear interpolation, Cubic interpolation과 Bicubic interpolation이 있다.
    - 오늘 실습에서는 scikit-image에서 제공하는 예제 이미지를 가지고 Bilinear interpolation와 Bicubic interpolation을 사용하여 크기를 크게 해봤다.
5. SRCNN
    - SRCNN이란 Super Resolution Convolutional Neural Networks의 앞글자를 따서 불린다.
    - 매우 간단한 모델 구조를 사용했음에도 기존결과에 비해 큰 성능 향상을 이뤘다.
    - 가장 먼저 저해상도 이미지를 bicubic interpolation 하여 원하는 크기로 이미지를 늘린다.
    - SRCNN은 이 이미지를 입력으로 사용한다. 이후 3개의 convolutional layer를 거쳐 고해상도 이미지를 생성해 낸다.
    - 생성된 고해상도 이미지와 실제 고해상도 이미지 사이의 차이를 역전파 하여 신경망의 가중치를 학습한다.
    - SRCNN은 3가지 연산으로 구성된다.
       1) Patch extraction and representation : 저해상도 이미지에서 patch를 추출한다.
       2) Non-linear mapping : Patch를 다른 차원의 patch로 비선형 매핑한다.
       3) Reconstruction : Patch로부터 고해상도 이미지를 생성한다.
    - SRCNN의 학습에 사용되는 Loss function(손실함수)는 MSE(Mean Squared Error)이다.
6. SRCNN 이후 제안된 구조들
    - VDSR(Very Deep Super Resolution)
       1) SRCNN과 동일하게 interpolation을 통해 저해상도 이미지의 크기를 늘려 입력으로 사용한다.
       2) 이전보다 훨씬 많은 20개의 convolutional layer를 사용했고, 최종 고해상도 이미지 생성 직전에 처음 입력 이미지를 더하는 residual learning을 이용했다.
    - RDN(Residual Dense Network)
       1) 저해상도 이미지가 입력되면, 여러 단계의 convolutional layer를 거치는데 각 layer에서 나오는 출력을 최대한 활용하도록 했다.
    - RCAN(Residual Chnnel Attention Networks)
       1) 이 구조 또한 많은 convolutional layer를 거치며 학습한다.
       2) convolutional layer의 결과인 각각의 특징 맵을 대상으로 채널 간의 모든 정보가 균일한 중요도를 갖는 것이 아닌 일부 중요한 채널에만 선택적으로 집중하도록 유도한 것이 이 구조의 특별한 점이다.
7. SRCNN을 이용해 Super Resolution 도전하기
    - 이번 실습에서 사용할 데이터셋은 DIV2K이다. 이 데이터셋은 많은 Super Resolution 연구에서 학습 및 평가에 사용되는 데이터셋이다.
    - 먼저 데이터를 준비하고 불러온 뒤 저해상도 이미지를 bicubic interpolation하여 고해상도 이미지처럼 만들고 시각화 해보았다.
    - 데이터를 어렴풋이 봐서는 별 차이가 없었지만 특정 부분을 확대해보니 실제 고해상도 이미지보다 선명하지 못한 것이 보였다.
    - 이번에는 SRCNN을 이용하기 위해 SRCNN을 구현하고 학습하기 위해 compile시키고, fit했다.
    - 위에서 훈련은 맛보기로 1epochs만 했고, SRCNN을 처음부터 끝까지 학습시키기엔 시간이 오래 걸려서, 이미 학습이 완료된 모델을 다운받아 사용했다.
8. SRGAN
    - 이번엔 GAN(Generative Adversarial Networks)을 활용한 Super Resolution 과정에 대해 다뤄보겠다.
    - 학습을 시작하기 전에 GAN에 대해 가볍게 정리했다.
       1) 데이터 확률분포를 모델링 할 수 있다면, 무엇이 가능한가?
          (1) 원래 데이터와 확률분포를 정확히 공유하는 무한히 많은 새로운 데이터를 생성할 수 있다.
       2) GAN의 확습이 완료되었을 때, Generator(생성자)와 Discriminator(판별자)의 출력은 무엇인가?
          (1) Generator의 경우 원 데이터의 확률분포를 따르는 새로운 데이터를 만든다.
          (2) Discriminator의 경우 분류에 의미가 없는 0.5의 확률값을 출력한다.
       3) GAN을 경찰과 위조지폐범으로 비유했을 때, 각각은 GAN 내에서 어떤 모델에 해당하는지, 각 목표는 무엇인지?
          (1) 위조지폐범은 Generator(생성자, 생성모델)에 해당하며, 위조지폐를 잘 만들어 경찰을 속이고자 한다.
          (2) 경찰은 Discriminator(판별자, 판별모델, 분류모델)에 해당하며, 진짜 지폐와 위조지폐를 정확히 구분하여 위조지폐범을 검거하고자 한다.
    - SRGAN = Super Resolution + GAN
    - 최근 Super Resolution 분야에서 GAN은 매우 많이 활용되고 있다. 이번에는 가장 처음으로 GAN을 이용한 SRGAN을 알아본다.
    - Generator가 저해상도 이미지를 입력 받아 고해상도 이미지를 생성해 내면, Discriminator는 생성된 고해상도 이미지와 실제 고해상도 이미지 중 진짜를 판별한다.
    - Generator는 Discriminator를 속이려하고 Discriminator는 진짜를 가려내려는 학습이 진행될 수록 서로 경쟁자가 되어 둘 모두 발전한다.
    - 학습이 완료되면 최종적으로 생성자가 생성해낸 고해상도 이미지는 판별자가 진짜인지 가짜인지를 구분하기 힘들 정도로 매우 좋은 품질을 가진 고해상도 이미지가 된다.
    - SRGAN에서 사용하는 loss function은 조금 특별하다. 크게 content loss와 adverarial loss로 구성된다. 이 중 adversarial loss는 일반적으로 알고 있는 GAN의 loss이다. 특별한 부분은 content loss 부분이다.
    - content loss는 Generator를 이용해 얻어낸 고해상도 이미지를 실제 고해상도 이미지와 직접 비교하는 것이 아니라, 각 이미지를 이미지넷으로 사전 학습된(pre-trained) VGG 모델에 입력하여 나오는 feature map에서의 차이를 계산한다.
    - 즉, 이전에 학습했던 SRCNN은 생성해낸 고해상도 이미지를 원래 고해상도 이미지와 직접 비교하여 loss를 계산했지만, SRGAN에서는 생성된 고해상도 이미지와 실제 고해상도 이미지를 VGG에 입력하여 모델 중간에서 추출해낸 특징을 비교하여 loss를 계산한다.
    - SRGAN은 VGG를 이용한 content loss와 GAN을 사용함으로 발생하는 adverarial loss를 합하여 perceptual loss라 정의하고, 이를 학습에 이용한다.
9. SRGAN을 이용해 Super Resolution 도전하기
    - SRCNN과 마찬가지로 먼저 데이터를 준비하고 불러온다.
    - SRCNN은 저해상도 이미지에 대해 interpolation하여 고해상도 이미지 크기로 맞춘 후 입력으로 사용했지만, SRGAN은 그런 과정이 필요없다.
    - 다음으로 SRGAN을 구현해봤다. SRGAN의 Generator에는 skip-connection을 가지고 있는데, 이는 Sequential API로 구현할 수 없어서 Functional API를 이용했다.
    - SRCNN과 마찬가지로 맛보기로 1epochs만 해보고, 이미 학습이 완료된 모델을 다운받아서 진행했다.
10. Super Resolution 결과 평가하기
    - Super Resolution 결과가 얼마나 좋은지 정량적인 평가 척도는 몇 가지 있다. 이번에는 이에대해 간략하게 알아볼 것이다.
    - PSNR(Peak Signal-to-Noise Ratio)
       1) 영상 내 신호가 가질 수 있는 최대 신호에 대한 잡음(noise)의 비율을 나타낸다.
       2) 일반적으로 영상을 압축했을 때 화질이 얼마나 손실되었는지 평가하는 목적으로 사용된다.
       3) 데시벨(db) 단위를 사용하며, PSNR 수치가 높을수록 원본 영상에 비해 손실이 적다는 의미이다. 따라서 값이 높을수록 좋다.
       4) 상한값이 없다.
    - SSIM(Structural Similarity Index Map)
       1) 영상의 구조 정보를 고려하여 얼마나 구조 정보를 변화시키지 않았는지를 계산한다.
       2) 특정 영상에 대한 SSIM값이 높을수록 원본 영상의 품질에 가깝다는 의미이다. 따라서 값이 높을수록 좋다.
       3) 0 ~ 1 사이의 값을 가진다.
11. SRCNN 및 SRGAN 결과 비교하기
    - 위에서 배운 척도를 가지고 SRCNN 모델이 만든 이미지와 SRGAN이 만든 이미지를 평가했다. 이는 코드로 실습함.
12. 학습한 내용 정리하기
    - 지금까지 학습한 Super Resolution 방법과는 약간 다른 유형의 방법에 대해 짧게 소개했다.
    - 이전에 학습했던 Super Resolution 방법들은 세부적으로 SISR(Single Image Super Resolution) 방법에 속한다. 단어 뜻 그대로 한 장의 저해상도 이미지를 이용해 고해상도 이미지를 생성한다는 말이다.
    - RefSR(Reference-based Super Resolution)은 여러 장의 저해상도 이미지를 활용해 고해상도 이미지를 생성하면 좋겠다 라는 질문에 답이 될 수 있는 방법이다.
    - 모델이 저해상도 이미지만을 받아서 고해상도 이미지를 생성하는 것이 아니라, 해상도를 높이는 데 참고할 만한 다른 이미지를 같이 제공해준다.
    - 이런 방법에 대해 자세히 알려면 추가적으로 알아야 하는 개념이 많아서 이번에는 학습하지 않았다.
    - 추가로 인공지능이 가진 문제들 중 하나에 차별이 있다. 인공지능에 영향을 주는 요인 중 하나는 학습에 사용하는 데이터인데, 이 데이터가 편향을 담고 있다면 인공지능은 차별을 하게 될 것이다.
    - 예를 들어 검은손은 총을 들고, 하얀손은 도구를 든다고 생각 할 수 있고, 모든 사람은 피부색이 하얀색이라고 생각할 수 있다. 또한 모든 사람들의 이목구비가 서양사람의 이목구비처럼 생각 할 수 있다.
    - 학습한 내용 정리하기를 통해 앞에서 본 내용을 한번 더 짚어봤다.