[clearfix]
[1]
1. 개요
2D 그림을 업스케일링해 주는 AI 기반의 업스케일러다.이름의 뜻은 waifu를 2배로 라는 뜻. Super-Resolution Convolutional Neural Network(SRCNN)를 응용한다. 컴퓨팅에는 NVIDIA의 CUDA을 사용. 사이트에서의 서비스도 지원한다. 애니메이션, 일러스트 등 2D 기반 매체에 대해서 딥 러닝된 인공지능을 토대로, 해상도 복원 서비스를 제공하는 사이트이다. 반복된 이미지 처리 CNN 학습을 기초로 발전된 이미지 및 동영상 알고리즘을 사용하면서, 받은 이미지를 다시 리사이징해서 그린다는 표현이 더 맞을 정도로 놀라운 복원력을 자랑한다.
오랜 기간동안 근본적인 알고리즘과 성능의 향상이 사실상 없어 더 고품질의 업스케일을 원하는 사람들은 waifu2x 대신 다른 AI 업스케일러를 사용하게 되었다. 그래서 waifu2x_snowshell은 real-cugan 및 Real-ESRGAN 을 사용할 수 있도록 기본으로 포함시켜주고, waifu2x-ios는 CUGAN에 더해 커스텀 학습 모델을 사용할 수 있다.
2. 2D 복원 기술
이 복원기술은 일러스트 분야에서 더 두드러지는데, 작은 이미지를 2배 확대했을 경우 Lanczos3보다 더 깨끗한 결과물이 나온다. jpg 특유의 열화, 노이즈, 픽셀깨짐 현상이 없고, 세부 디테일이 말끔하게 복원된다. 새로 그렸다고 해도 믿을 수준이다. 더 놀라운 점은 2번째 사진[2]을 보면 펜 선의 강약 조절 또한 살아있고, 전체적인 퀄리티가 포토샵 등 프로그램보다도 우월하다는 것이다.
다만 알고리즘이 실제로 보간이라기보다 AI가 새로 그려주는 것에 가깝기 때문에, 학습한 것과 유사한 종류의 이미지가 아닌 사진등을 넣으면 마치 쌀알 필터를 쓴 것처럼 완전히 이상하게 바뀌어버린다. 제아무리 AI라고 해도 원본 단계에서 없는 정보를 만들어낼 방도는 없고, 나름대로의 추론이 가미될 수 밖에 없기 때문이다. 따라서 범용성과 신뢰도에 있어서는 전통적인 보간 알고리즘을 따라갈 수 없다.
소스 공개로 홈페이지에서 제공하는 서버판과 소스만 뿌린 PC판이 있는데, 복원 능력은 서버판보다는 PC에서 waifu2x_snowshell을 이용하는 것이 더 좋다. 기본적인 설정 상태에서도 화질이 더 좋으며 TTA 모드를 이용할 경우 화질 차이가 더 심하게 난다.[3]
서버판의 경우 유저들이 확대시킨 이미지를 통해 waifu2x 확대 신경망을 학습시킨다는 설이 퍼져 있으나 실은 그렇지 않다. 신경망 학습을 위해서는 처리한 결과물과 비교할 정답이 있어야 한다. 따라서 waifu2x 신경망 학습 과정에는 작은 이미지와 4000px 이상의 매우 큰 원본 이미지가 필요하기 때문에 유저가 넣은 이미지와 Ai가 만들어낸 결과물로는 신경망을 학습시킬 수 없다.
현존 2D 복원력은 98% 정도며 사진은 복원능력이 아직까지 미비한 상태라 복원하면 마치 수채화처럼 변해버린다. 색 공간을 맞춰놓더라도 icc profile같은 일부 메타데이터는 지원되지 않으므로 색상이 변할 수 있다.
3. 공식 버전(웹 버전)
waifu2x.net사용법은 아래와 같다.
- Image choosing을 눌러 이미지를 선택한다.
- Style의 경우 그림이나 CG, 일러스트라면 Artwork, 사진이라면 Photo를 선택한다.[4]
- Noise Reduction - 극상의 깔끔함을 원한다면 Super(tmp)를 선택. 다만 변환 작업이 다소 걸린다.
- Upscaling - 최대 2배까지 가능. 예를 들어 800x600 크기의 이미지를 넣었다면 1600x1200으로 리사이징되어 출력된다.
웹 버전은 아직까지 5MB 이상 파일은 변환이 불가능하며, 단순 노이즈 제거는 3000x3000px, 업스케일링은 1500x1500px 크기까지만 가능하다. 하지만 JPG 파일이 5MB가 넘는 경우는 드물어서 큰 문제는 아니다. 또한 용량 경량화를 많이 거쳐서 노이즈가 심하다면, 복구해도 노이즈가 많이 남아 있고, 실제와도 차이가 다소 있는 편이다.
침고로 이미지 용량과 사이즈 제한은 윈도우즈 PC판을 사용하면 해결이 가능하며 waifu2x_snowshell이나 waifu2x-caffe을 사용할 경우 여기에 더해 확대율 제한 없이 확대가 가능하다.[5]
한편 이용자가 크게 늘어 서버가 과부하 되는 현상[6]이 늘어난 것도 있었지만, 한 중국인이 waifu2x를 이용한 어플리케이션을 만들었는데 앱에 광고를 집어넣어 영리 활동을 했을 뿐만 아니라 이게 왜 잘못이냐는 둥 적반하장격 태도를 보여(#1) 2017년 7월 30일에 reCAPTCHA가 도입되었다[7]. 한 번 인증하면 되는 게 아닌 변환 시마다 일일이 인증해줘야 한다.
2018년 3월부터 8월까지 서버가 불안정해 접속이 되었다가 안 되었다 하는가 하면 10월부터 reCAPTCHA를 눌러도 계속 인증 대기 중인 상태로 돌아가는 일이 잦다. 그렇기 때문에 개인 컴퓨터 사양이 그럭저럭 괜찮다면 waifu2x_snowshell을 이용하면 빠르고 편리하게 변환할 수 있다.
또한 서버가 불안정한 이유를 밝혔는데, 설명하자면 이렇다.
waifu2x 사이트는 EC2 GPU 스팟 인스턴스에 의해 호스팅됩니다. 최근에 EC2는 GPU 인스턴스가 충분하지 않아 임의로 스팟 인스턴스를 중지합니다.
이 문제를 해결하는 방법은 On-Demand 인스턴스를 사용하는 것이지만 한 달에 1,600 달러가 필요합니다.
- #197 "Is it down?"에서 발췌
이 문제를 해결하는 방법은 On-Demand 인스턴스를 사용하는 것이지만 한 달에 1,600 달러가 필요합니다.
- #197 "Is it down?"에서 발췌
4. 파생 소프트웨어
아래의 소프트웨어는 waifu2x 공석 버전(웹 버전)을 기반으로 사용자의 CPU 및 GPU을 사용해서 인터넷 연결 없이 사용할 수 있고, CLI 환경이 익숙하지 않은 사용자들을 위해 GUI 통합 프론트엔드도 있다. 웹 버전에서의 대량 변환시 발목을 잡던 리캡차가 없고 오프라인에서도 사용이 가능하다는 것이 장점이지만 공석 버전(웹 버전)에서 서버가 대신 해주던 모든 연산을 사용자의 CPU와 GPU가 도맡아야 하기 때문에 컴퓨터의 사양이 좋지 않다면 주의할 필요가 있다. waifu2x_snowshell 기준으로 10,000px를 넘어가는 이미지를 넣으면 램을 밑도끝도없이 8GB를 넘어 가용램 한계까지 사용. 램 8GB 환경 기준으로 약 5,000px 정도까지면 무난하다.
일반적인 유저라면 waifu2x_snowshell을 추천. 사용법이 간단하고 무료이고 한국어를 지원한다. #퀘이사존 설명 상세한 옵션 설정 및 동영상 변환도 필요하면 Waifu2x-Extension-GUI도 고려할만 하다. waifu2x 외에도 수많은 엔진을 지원하나 한국어를 지원하지 않고, 무료판은 기능제한이 있다는 단점이 있다.
waifu2x_snowshell은 기본적으로 GUI만 제공하고 기본적으로 waifu2x-converter-cpp와 waifu2x-ncnn-vulkan 의존적인 프로그램이다. 기본값으로 waifu2x-ncnn-vulkan 사용. waifu2x-ncnn-vulkan는 NVIDIA 뿐만 아니라 AMD 및 Intel의 GPU도 지원하고 waifu2x-converter-cpp보다 속도도 빠르다. 다만 waifu2x-converter-cpp는 GPU 대신 CPU 연산도 선택할 수 있다. 둘다 기본적인 변환 알고리즘은 동일해서 이미지 품질 차이는 없다. waifu2x 뿐만 아니라 real-cugan 및 Real-ESRGAN도 지원한다는 장점이 있다.
waifu2x_snowshell 홈페이지에 가면 waifu2x-snowshell_v***.zip, waifu2x-snowshell_v***_with_fullpack.zip, waifu2x-snowshell_v***_with_vulkan.zip 의 3가지 버전이 있는데 일반적인 유저라면 with_vulkan을 받으면 된다. (with_vulkan은 NVIDIA, AMD, Intel GPU를 지원해 속도가 빠르기 때문) fullpack는 waifu2x-caffe 까지 포함되어 있어 용량이 너무 크서 굳이 fullpack을 받을 필요는 없다.
이름 | GPU 가속 | 특징 | 호환성 |
waifu2x_snowshell | Vulkan, CUDA, OpenCL | 간결한 GUI 인터페이스 폴더 변환 지원 TTA 모드 지원[8] 한국어 지원 real-cugan 및 Real-ESRGAN 지원 | 윈도우 64비트, 32비트[9] |
waifu2x-caffe | CUDA | CLI 및 GUI 인터페이스 폴더 변환 지원 TTA 모드 지원 한국어 지원 Nvidia GPU 전용 | 윈도우 64비트 |
Waifu2x-Extension-GUI | Vulkan, CUDA 등 | 동영상 지원 GUI 인터페이스 TTA 모드 지원 real-cugan, Real-ESRGAN, Anime4K, RTX Super Resolution 등 지원 | 윈도우 64비트 |
waifu2x-converter-cpp | OpenCV | CLI 인터페이스 C++로 포팅 CPU/GPU 둘다 지원 | 윈도우 64비트 |
waifu2x-ncnn-vulkan | Vulkan | CLI 인터페이스 폴더 변환 지원 waifu2x-converter-cpp보다 속도빠름 | 윈도우 64비트, macOS, Linux |
waifu2x-ios | CoreML, Metal | GUI 인터페이스 동영상 업스케일링 지원 Neural Engine 지원[10] | iOS, iPadOS, macOS |
5. 기초 이론
Image Super-Resolution Using Deep Convolutional Networks 논문기존의 이미지 축소 기술은 이미 포토샵이나, 그림판의 리사이징 기능을 통해 픽셀 정보를 손상시키거나 압축시키는 경우여서 간단했지만, 반대로 이미지를 확대할 경우 상당한 문제가 있었다. 축소하는 과정에서 이미 일부 픽셀의 정보가 사라져버린 것. 이걸 어떻게 살리느냐가 이미지 업계의 최대의 변수였다 보통 평소에 사용한 필터를 컴퓨터 수식으로 나타내면 부정방정식이 되어버리는데, 이 결과값의 변수가 너무 많아진다는 점이 최대의 난적이었다. 하지만 어떻게든 컴퓨터는 기존의 정보를 활용해 픽셀을 채워넣어야 했고, 이것이 초창기 딥 러닝 알고리즘의 기본 목적이 되었다.
이 기초 논문은 이 비어있는 조각을 Convolutional Neural Network(CNN)를 사용해서 픽셀 공간을 계산하겠다는 이론을 제시했고, CNN은 그림에서 점, 선, 면 등의 요소를 추출해내는 성질을 가지고 있는데, 이를 바탕으로 손실된 디테일에 원래 어떤 내용이 있어야 할지를 스스로 판단해서 복원한다는 것. 한마디로 이미지를 받았다면 확대한 만큼 딥 러닝으로 부정방정식 연산과 이미지 배치열을 통해 배운 내용으로 채워넣는 방식이다. 사실 대단히 기초적인 컨볼루션 네트워크. 일종의 denoising autoencoder라고 정의할 수 있다. Waifu2x는 이 논문에 나온 신경망보다 더 큰 신경망을 자랑한다. 또한 만화, 애니메이션 등 2D 이미지로만 학습이 되어있다. 도트 게임류를 업스케일링하는 건 2Xsai 필터와 별 차이가 없다.
6. 응용 - 동영상 고품질 확대
단순히 사진 뿐만 아니라 동영상을 확대하는 기술도 나오고 있다. 2016년에 튜토리얼까지 나온 기술이다.기본적으로 waifu2x 기반으로 진행되는 프로그램이라 CPU 혹은 윈도우나 리눅스에서는 Vulkan을 지원하는 그래픽 카드가 필요하고 애플 기기라면 Metal을 사용하여 GPU 연산을 진행할수 있다.[11] CPU를 사용하는 경우는 3분 짜리 720x480 해상도 영상도 거의 반나절을 넘게 작업해야 하니 수초 짜리 GIF 수준의 작업이 아닌 이상 메인스트림급 그래픽카드가 필수적이다.
실시간 재생은 불가능하다. 그래픽 카드와 장면에 따라 다르지만, 2~3 프레임 당 1초는 잡아야 한다. 대신 미리 4K로 업스케일링하고 볼 수 있다. 고전 애니 같이 사람이 그린 그림의 경우에는 효과가 꽤나 탁월하며 리마스터링 하기 힘든 마이너 작품을 더 좋은 품질로 볼 수 있다. 고전 드라마를 확대하면 고품질 수채화 느낌이 나서 호불호가 갈리지만 글자는 선명해지고 영상은 다시 그린 듯한 느낌이 난다는 평가가 있다. 애니메이션에 한정하면 기존의 다른 영상 업스케일링 방식과 비교했을 때 압도적[12]으로 뛰어나다. 특히 원본의 디테일이 이미 충분히 좋을 경우 거의 마법에 가까울 정도의 결과물이 나온다.
자세한 내용은 video2x 링크 참조. 이미 한국인 유튜버도 업스케일링한 작품을 다수 올려놓았다. dandere2x도 있다. dandere2x는 video2x보다 쉽게 설치, 변환할 수 있지만 대신 품질은 video2x보다 낮다. Waifu2x-Extension-GUI이라는 프로그램도 새로 나왔다. 위의 두 프로그램보다 더 나은 그래픽 유저 인터페이스를 갖췄지만, 시험삼아 작동해보는 gtx 1050 정도의 저사양 컴퓨터 유저라면 1시간 정도는 기다려야 0%에서 벗어나 업스케일이 진행되기 시작한다.
4K로 업스케일하는 것뿐 아니라 예전 시대의 저화질 영상을 풀HD수준으로 만드는 경우도 있다. 144p 애니메이션을 1080p로 업스케일한 사례
한편으로, 동영상의 모든 프레임을 PNG나 BMP, WebP등의 무손실 포맷으로 추출하고 업스케일하여 동영상으로 재전환하는 방법도 있다. 동영상을 직접 전환하는 방법이 나오기 이전부터 알음알음 전파되던 방법인데, 인코딩 툴을 크게 가리지 않고 상기한 파생 소프트웨어 중 마음에 드는 것을 골라 쓸 수도 있는 호환성 좋은 방법이라 여전히 사용하는 사람들이 있다. 단, 전환 과정에서 색공간을 정확하게[13][14] 바꾸지 않으면 컬러 쉬프트가 일어난다는 점, 하드디스크 용량이 많이 필요하다는 점[15], 아무래도 시간이 더 오래 걸린다는 점[16]이 단점이다.
오래된 작품의 DVD를 업스케일하면 경우에 따라서는 같은 작품의 블루레이에 준하거나 오히려 뛰어넘는 화질이 나오기도 한다. 16mm 필름이나 SD 화질로 디지털 촬영한 작품의 블루레이는 원본의 화질이 낮아서 더 끌어올릴 수 없는 걸 업스케일을 해서 판매하고 있을 뿐이다. 당연히 DVD를 업스케일하면 똑같은 영상이 된다는 것이며 업스케일 프로그램의 기술은 점점 발전하고 있어 나중에 나온 프로그램으로 업스케일을 하면 판매 당시보다 더 좋은 화질이 나와버리는 것이다. 소장한 고전 DVD들을 업스케일하고 싶은 사람은 꼭 한번 시도해보자.
단, 영상에 아티팩트가 있을 경우 해당 아티팩트까지[17] 같이 업스케일되므로 업스케일 전 보정은 하는 것이 좋다. 간단한 튜토리얼-ffmpeg와 waifu2x-caffe를 사용하여 영상을 확대하기
[1] 도트 하나하나를 그대로 살려 확대한건 Lanczos 쪽이다.[2] 원본은 이 그림이다.[3] 256px 이하의 작은 이미지를 2048px급으로 확대시켜 비교해 보면 다소 차이가 있다.[4] Style에 Photo가 선택되어 있으면 상단의 타이틀이 w~/a/~ifu2x로 바뀐다.[5] waifu2x-caffe github에서 설명하기로는 2배 이상 확대 시 확대를 여러 번 반복하는 식으로 작동한다고 한다. 또한 2, 4, 8배 사이로 확대 비율을 지정할 경우 큰 사이즈로 먼저 확대해서 축소하는 식으로 작동한다고 한다.[6] 다운로드 에러가 뜨거나 13바이트짜리 파일로 깨져서 출력되는 경우도 잦았고, 이용자가 너무 많이 몰린 바람에 사이트가 아예 다운되는 경우도 있었다.[7] reCAPTCHA를 도입한 이유는 무분별한 사용을 막기 위한 것도 있지만, 구글의 서비스라 중국에서는 사용이 불가능하기 때문이다.[8] Test-Time Augmentation, 8배 오래걸리지만 0.18 PSNR 정도의 품질 향상[9] 2018년 버전(v1.8.4)만 사용 가능. 일부 기능 제한[10] iPhone 11 Pro 기준 웬만한 그래픽카드를 따라잡거나 능가하는 퍼포먼스를 보여준다. M1맥은 지포스 GTX1070보다 두배 이상 빠르다. 단, SRCNN 옵션을 선택해야 하며 CUnet은 Neural Engine이 지원되지 않는다.[11] 애플의 Metal의 경우 NVIDIA의 cuDNN이나 AMD의 Vulkan과 비교해 동일 수준의 하드웨어일때 cuDNN이나 Vulkan보다 최대 20% 더 빠른 처리 속도를 보인다.[12] 인공신경망 자체는 이미 nnedi라는 디인터레이서 겸 업스케일러에서 사용되고 있었고, 업스케일러 중에 가장 좋은 평가를 받고 있었다. 하지만 그조차도 Waifu2X와 비교하면 한참 뒤떨어진다.[13] DVD의 SD 영상을 HD/FHD로 업스케일하는 예를 들면, TV Range의 YUV420 Rec.601에서 Full Range RGB24로 전환하면서 이미지를 추출한 후 이것을 업스케일한 뒤 재조립해 동영상을 만들면서 TV Range의 YUV420 Rec.709로 변환하면 된다. 소스의 색 저장 방식이 무엇이었는지, SD(Rec.601), HD/FHD(Rec.709), UHD(Rec.2020) 중 어디에서 어디로 변환하는 것인지 등에 따라서 설정값이 조금 달라지기 때문에 최소한의 기반 지식이 필요하다. WebP의 경우 YUV420 포맷을 유지하면서 이미지 추출이 가능하니 참고할 것. JPG 또한 같은 장점이 있고 이론상 무손실을 지원하지만, 근본이 손실 전용 압축이라 실제 무손실을 지원하는 인코더가 드물고, 손실 정도도 인코더에 따라 제각각 정해져 있어 통제할 수 없는 경우가 대부분이라 잘 쓰이지 않는다.[14] 제아무리 정확하게 변환한다 하더라도 동영상과 이미지의 색 저장 방식이 다르기 때문에 분명 차이가 생기기는 한다. 하지만 프레임 단위로 비교하더라도 인간이 감지할만큼 큰 변화는 일어나지 않는 모양이다. 정 불안하면 업스케일된 이미지에서는 명도값만 뽑아오고 색상값은 리사이즈한 영상에서 뽑아 합치는 방법도 있다.[15] 영상마다 조금씩 다르지만, PNG 포맷을 기준으로 24분짜리 480p 23.976fps 영상의 용량이 대략 10에서 20기가, 이것을 720p로 업스케일하면 25에서 30기가가 된다. 따라서 480p를 720p로 업스케일하려면 50기가 정도는 있어야 안전하다.[16] 프레임이 담긴 폴더를 분할한 후 동시에 업스케일을 진행하는 방법으로 속도를 조금 올릴 수는 있다.[17] 자잘한 노이즈는 나중에 잡을 수도 있겠지만, 계단 현상, 고스팅, 닷크로울링, 레인보우, 크로마 블리딩 등 따로 이름이 있고 고유의 보정 방법이 있는 아티팩트들은 대부분 업스케일되면 보정 난이도가 크게 오르거나 아예 불가능한 사태가 벌어진다.