초해상도에 대한 짧디짧은 지식
본 글은 소이넷에서 발행하는 뉴스레터 메일인 소이뉴스에 게재했던 내용을 담고 있습니다.
메일 구독을 원하시는 분은 구독링크를 통해 신청해 주세요.
그래서 오늘은 초해상도(Super Resolution)에 대해, 언제나 그랬던 것처럼 가볍게만 알아보고 가겠습니다. ^^
초해상도(Super Resolution)
초해상도에 가장 먼저 딥러닝을 적용한 것은 CNN(Convolutional Neural Network)을 적용한 SRCNN에서였습니다. 그 전까지는 Nearest Neighbor, Bilinear, Bicubic 등의 다양한 영상 보간 알고리즘을 이용하고 있었죠.
딥러닝을 이용해서 초해상도를 수행하는 방식은 크게 2가지로 나뉩니다. 저해상도 이미지로 고해상도 이미지를 예측하는 Supervised Learning과 GAN (Generative Adversarial Network)을 이용해서 아예 고해상도 이미지를 생성하는 방식으로 말이죠. 성능을 떠나 모델의 크기, 가성비 등을 고려하면 각각의 방식이 서로 장단점이 있다고 할 수 있겠습니다. 다만, 최근 트렌드는 생성 모델을 이용하는 쪽이 더 많아지고 있는 것 같습니다. 또한 해상도만 향상 시키는 것이 아니라 화면 내 노이즈 제거나 누락된 부분을 보강하기 위해 inpainting을 함께 적용한다거나 하는 모델들도 소개되고 있습니다.
딥러닝을 이용해서 초해상도를 수행하는 방식은 크게 2가지로 나뉩니다. 저해상도 이미지로 고해상도 이미지를 예측하는 Supervised Learning과 GAN (Generative Adversarial Network)을 이용해서 아예 고해상도 이미지를 생성하는 방식으로 말이죠. 성능을 떠나 모델의 크기, 가성비 등을 고려하면 각각의 방식이 서로 장단점이 있다고 할 수 있겠습니다. 다만, 최근 트렌드는 생성 모델을 이용하는 쪽이 더 많아지고 있는 것 같습니다. 또한 해상도만 향상 시키는 것이 아니라 화면 내 노이즈 제거나 누락된 부분을 보강하기 위해 inpainting을 함께 적용한다거나 하는 모델들도 소개되고 있습니다.
Super Resolution은 어떤 분야에 활용될 수 있나요?
CCTV 카메라 영상의 경우에도 최근에는 거의 대부분 HD, FHD 급으로 해상도가 높아졌지만 수년전만 해도 320x240 수준의 해상도를 가진 열악한 곳도 있었습니다. 범죄 장면이 CCTV에 찍히긴 했지만 너무 낮은 해상도 때문에 번호판이나 범인의 얼굴을 식별을 하지 못하는 경우가 많았다는 얘기죠. 이 때문에 찍힌 영상을 알고리즘을 이용해서 해상도를 높이는 작업들이 필요 했었습니다. 카메라의 해상도가 높아지더라도 원거리에서 찍힌 작은 사물을 판별할 때는 현재도 여전히 이런 과정이 필요할 것입니다.
SR 기술은 과거에 만들어진 영상 기록물들을 고해상도로 변환하는 작업에 활용할 수 있습니다. 단적인 예로 영상기록원 등에 보관되어 있는 오래된 저해상도 영상을 고해상도로 변환할 때 활용될 수도 있습니다. 예전에 방영된 드라마나 영화를 리마스터링해서 다시 방송하는 경우가 종종 있는데 이 때에도 이런 기술이 적용되고 있을 가능성이 높습니다. 이외에도 CCTV 카메라, 드론 카메라에 찍힌 작은 물체를 식별하기 위해 변환하는 용도, 혹은 의료 헬스케어에서 저해상도로 촬영한 MRI, CT 영상을 고해상도로 변환하여 촬영에 소요되는 시간을 절감하는 용도 뭐 이렇게 다양하게 활용할 수 있죠. 에어스메디칼이라는 의료AI 업체는 초해상도 기술을 이용해서 MRI 촬영에 소요되는 시간을 획기적으로 절감할 수 있었다고 합니다.
또한 최근 나오는 TV들에는 SR을 수행하는 칩이 내장되어 있다고 합니다. 저해상도 영상 신호를 받아 TV 상에서 upscaling을 수행해서 시청자의 눈에 보일 때는 고해상도 혹은 높은 선명도의 고품질 영상으로 보일 수 있도록 하고 있다는 얘기죠. 물론 아직은 딥러닝이 아닌 영상처리 알고리즘 기반으로 동작하고 있을 것 같긴 합니다만 기술이 발전하는 속도를 생각하면 최신의 딥러닝 알고리즘이 적용되어, 시청자가 원하는 해상도로 방송을 실시간으로 변환해서 볼 수 있는 날도 머지 않을거라 생각합니다.
초해상도에 대해 좀 더 알고 싶은데 관련한 영상 같은 것은 없을까요?
역시나 유튜브에는 많은 영상 자료가 있네요. 제가 찾아본 것 몇개만 올려둡니다.
- [DMQA Open Seminar] Image Super Resolution (2021)
- Upscale your Images using DEEP SUPER RESOLUTION with ESRGAN
- 옛날 어린이들은 딥러닝 업스케일링 버전(이 영상은 아주 예전 비디오 초반에 나오던 것을 초해상도 변환한 것임)
- 저해상도를 고해상도 이미지로 만들기! Super Resolution - Python, Deep Learning (제가 좋아하는 빵형의 개발도상국 영상, 2018)
SoyNet을 이용한 초해상도 모델 실행최적화
SoyNet의 Model Market 상에는 초해상도 모델로 EDSRGAN과 IDN, GLEAN 이 등록되어 있습니다. 이 가운데 GLEAN 모델은 CVPR 2021에서 발표된 최근 모델 가운데 하나이며 아래의 링크에서 상세한 내용을 확인할 수 있습니다.
SoyNet과 PyTorch에서의 실행 속도와 GPU 메모리 사용량을 비교한 것입니다.
- 추론속도 : SoyNet이 PyTorch 대비 217% 의 처리속도
- GPU 메모리 사용량 : SoyNet이 PyTorch의 약 86% 가량 사용
- 성능 (Accuracy) : 유효숫자 4개 수준까지 동일
SoyNet에서 최적화한 GLEAN 모델은 이곳에 등록되어 있으며 gradio를 이용하여 테스트할 수 있는 코드는 여기에서 확인할 수 있습니다. 다운받아 동작시켜 보면 아래와 같은 결과물을 얻을 수 있습니다. 원본 이미지는 32x32 사이즈이며 아래 데모에서는 더 크게 확대되어 표시되었습니다.