사진 복원 Demo
아래 링크를 따라 실행하시면 ‘사진 복원된 결과'를 확인하실 수 있어요!
주제 소개
우리는 행복한 순간들을 기록하기 위해서 사진을 찍곤 합니다. (요즘에는 네 컷 사진이 굉장히 유행이죠) 선명한 핸드폰 카메라부터 셀프 사진관까지 다양한 방법으로 고화질의 추억을 남길 수 있는 지금과 달리 과거의 우리는 어땠을까요?
“요즘에 데뷔한 아이돌들은 어린 시절 사진이 고화질이래!”라는 말이 충격적(?)으로 다가오셨다면 공감하실 수 있으실 겁니다. 저희가 어렸을 때만 생각해도 필름 카메라로 사진을 찍기도 하고, 디지털카메라로 찍은 후 인화했던 기억이 나네요. 결과물을 모르는 상태로 한장 한장 소중하게 찍던 필름 카메라에서 디지털카메라가 등장했을 때 매우 큰 발전이 이루어졌다고 생각했었는데, 지금과 비교하면 많은 부족함이 느껴지지 않나요? 이렇게 찍힌 사진들을 보면, 노이즈가 많아 사진의 전반적인 선명도가 떨어지고 인화된 사진들을 보관하다 보니 찢어지거나 구겨진 경우도 많습니다.
물론, 요즘 디지털 기술의 발전으로 사진을 디지털화하여 복원할 수 있기는 하지만 수동 리터치는 힘들고 시간이 매우 오래 걸립니다. 수많은 사진을 복원하는 것은 불가능에 가깝습니다. 이러한 배경을 바탕으로 오래된 사진을 즉시 복구할 수 있는 자동 알고리즘을 설계하는 것의 필요성이 대두되었고, 다양한 모델들이 개발중에 있습니다.
다시 돌아오지 않을 어린 시절의 소중한 추억을 복원해드리기 위해, 3가지 모델을 소개합니다.
활용 코드 소개&분석
1) 사진 복원
첫 번째 모델은 딥러닝 접근 방식을 통해서 훼손되거나 손상된 오래된 사진을 복원합니다. 오래된 사진을 복원하는 것은 매우 어려운 작업입니다. 우선 오래된 사진은 다양한 훼손을 가지고 있고, 인공적인 사진과 실제 사진과의 Domain-gap이 존재합니다. 예를 들어, 딥러닝 네트워크는 인공적인 사진 복원과 실제 사진 복원을 단순히 일반화 하기 힘듭니다. 따라서 복원에는 다른 방식이 요구됩니다. 비구조적 결함 - 필름 노이즈, 흐림, 색 바램 등등은 Homogeneous filters(주변 픽셀로부터 만들어진 필터)로 복원 가능하지만 구조적인 결함(긁힘, 파임)은 그 부분에 색을 칠하기 위해 사진의 전체적인 맥락을 고려해야 합니다.
Domain-gap 문제를 해결하기 위해 해당 모델은 깨끗한 이미지와 옛날 이미지를 다른 도메인으로 다루고 서로 매핑 시키는 방법을 적용했습니다.
Restoration via latent space translation
이를 통해 오래된 사진과 합성 이미지 사이의 도메인 간격이 줄어들고, 깨끗한 이미지로의 변환은 잠재 공간에서 학습된다는 특징을 가집니다. 또한 Global Context를 활용하여 잠재 기능을 복원하는 부분적인 Non local block을 제안하여 스크래치에 대해 더 일관성 있게 칠할 수 있게 됩니다. 해당 모델은 심각하게 성능이 저하된 오래된 사진을 복원하는 데 더욱 좋은 성능을 보여줍니다.
2) 초고해상도화
두번째 모델은 화질이 낮은 사진의 해상도를 초고해상도로 바꾸어 사진을 선명하게 복원합니다. 해당 모델에서 사용하는 Vision Transformer는 오랜기간 사용되어 왔던 CNN(Convolutional Neural Network)의 두가지 단점을 해결하기 위해 등장하였습니다.
CNN의 단점
•
images와 convolutional kernels 간의 interactions이 content-independent함.
•
convolution은 long-range dependency를 효과적으로 모델링 할 수 없음
해당 논문 이전에 사용했던 Vision Transformer는 이미지를 patch 단위로 나누면서 각 patch를 독립적으로 처리하기 때문에 다른 문제들도 발생했었는데요, patch 내에서만 attention을 한다는 것이 큰 원인이기 때문에 소개해드리는 SwinIR은 local attention mechanism을 사용하여 큰 이미지도 처리할 수 있는 Swin Transformer를 기반으로 architecture를 구성합니다. (SwinIR이라는 이름도 Swin Transformer를 사용하기 때문에 붙여졌답니다.)
SwinIR은 크게 3가지의 모듈로 나눠지고, 이를 통해 진행됩니다.
•
Shallow feature extraction module : convolution layer를 사용하여 shallow feature를 extract합니다. reconstruction module에 직접 전달되어 low-frequency information이 보존됩니다.
•
Deep feature extraction module : Residual Swin Transformer blocks (RSTB)으로 이루어지며, 여러 개의 swin transformer layers를 통해 local attention과 corss-window interation으로 deep features를 extract합니다.
•
Reconstruction module : Shallow feature extraction module과 Deep feature extraction module에서 extract된 shallow와 deep features를 합쳐 최종 이미지 결과물을 출력합니다.
3) 컬러화
GAN기반 Colorizaiton
1.
RGB vs LAB
RGB
LAB(명암, A 채널, B 채널)
이미지를 컬러화하는 과제를 수행할 때 이미지를 인코딩하는 과정에서, 이미지를 (빨강, 초록, 파랑) 3차원의 데이터로 수치화하는 것보다 (L, A, B) 3차원의 데이터로 수치화하는 것이 좋습니다. L은 명암, A 채널은 초록-빨강에 대한 정보, B 채널은 노랑-파랑에 대한 정보를 담고 있습니다. 그 이유는 모델을 학습시키는 과정에서 모델에게 흑백사진이 담고 있는 L(명암) 정보를 전달할 수 있고 A,B 채널에 대해서 추론을 하도록 하기 때문입니다. 하지만 사진을 RGB로 인코딩 할 경우 컬러화된 사진을 흑백이미지로 바꾼 후, R, G, B 3가지 채널에 대해서 예측을 해야합니다. 3가지보다 2가지를 예측하는 것이 훨씬 효과적인데, 각각의 체널에 대해 256가지의 수치를 예측할 때 3가지를 예측하는 경우의 수는 1600만 정도의 경우가 가능하지만 2가지를 예측할 경우 6.5의 경우의 수밖에 없습니다.