업스케일링이란
업스케일링이란 사진이나 동영상의 픽셀에 새로운 픽셀을 끼워 넣어 해상도를 높혀주는 기능입니다. 쉽게 이야기 해서 구린 흐릿한 저해상도의 이미지를, 선명한 이미지로 바꿔주는 기술인거죠. 기존 기술이 발전하지 못한 상황에선 AI를 활용하지 않고 그냥 컴퓨터 알고리즘으로 보정을 시도했는데, 아무래도 사람이 다시 그리지 않고 단순 컴퓨터 계산으로 업스케일을 시도했다보니 해도 원본과 결과물의 차이가 크지 않았습니다. 내용 참고 : 나무위키
그래서 비 AI 업스케일링을 하고 포토샵 같은걸 켜서 선명하게 하거나, 노이즈 제거를 해서 후보정 하곤 했죠.
하지만 요즘은 아시겠다 싶이 AI 기술이 폭발적으로 발전하고 있는 추세입니다. 이 흐름에 따라 AI를 활용하여 이미지 업스케일링을 할 수 있게 되었고, 결과물이 잘 나오는 경우엔 사람이 다시 그린것 보다 훨씬 더 좋은 결과를 낼 수도 있게 되었습니다. [각주*물론 항상 결과물이 완벽한건 아닙니다. AI 기술로 업스케일링한 결과물은 어떻게 학습되었냐에 따라서 천차만별의 결과를 내기도 합니다. 노이즈 제거 농도를 잘 못 설정하면 이미지가 수체화처럼 뭉개지거나, 세부 디테일이 사라지며 사진 / 그림에 따라 업스케일링 하는 도구를 바꿔야 할 수도 있습니다.*]
AI 업스케일러 덕분에 아래와 같이 오래된 게임들의 영상을 선명하게 복원할 수 있게 되었고, 오래된 게임 역시 텍스쳐 같은걸 전부 이미지로 추출한 후, 4K 화질로 업스케일링 해서 선명한 화질을 얻어낼 수도 있게 되었습니다.
아래는 예시입니다.
https://www.youtube.com/watch?v=5fe0zC8M_Fs
몬스터헌터 4G 모든 컷씬 HD 화질로 업스케일링
닌텐도 3DS에서 돌아가던 게임이라 컷씬들 해상도가 매우 조악한데 어떤 분이 업스케일링 작업을 해서 선명해진 모습입니다. 다만 원본 해상도가 워낙 저화질이다 보니 선명해졌다는 느낌이 안들 수 있는데 아래서 차이를 볼 수 있습니다.
이렇게 비교하니 차이가 극명하죠? 첫 번째가 원본이고 바로 위에 보시는 모습이 보정 작업 후 입니다.
해당 링크에서 조금 더 자세히 볼 수 있습니다.
https://www.youtube.com/watch?v=ac6Vle6Wcbo&t=9s
레이튼 교수와 이상한 마을 애니메이션 FHD
예전 블로그에서도 잠깐 소개해드린 적이 있는데 waifu2x 란 것으로 2007년 닌텐도에서 출시된 레이튼 교수와 이상한 마을 애니메이션을 FHD로 업스케일링 한 모습입니다. waifu2x 의 경우 오늘 소개할 R-ESRGAN 보다 품질이 상대적으로 떨어집니다.
https://www.nexusmods.com/darksouls2/mods/1160?tab=description
여러 게임들의 HD PROJECT
이외에도 오래된 게임이나 구린 텍스쳐를 가진 게임들의 텍스쳐를 모두 추출한 다음에 업스케일링 해서 선명하게 만드는 게임 모드도 많이 나오고 있습니다. 기억 나는걸론 다크소울 2, 파판 7 리메이크, 몬스터헌터 4G 같은 게임 등등 여러 게임들이 업스케일러를 통해 선명한 화질로 작업되었습니다.
실제로 위 게임 3개 다 업스케일링 된 텍스쳐로 해봤는데 화질 체감이 매우 매우 큽니다. 아무리 오래된 하기 싫은 게임이라도 4K 화질로 선명하게 보이면 어느정도 할만해지는? 그런 느낌까지 듭니다.
어떻게 업스케일링하고 어떤 업스케일러를 써야 할까?
대충 "upscaling" 이라는 단어가 해상도를 올려주는걸 의미하면 이런 업스케일링을 해주는 도구들은 "upscaler" 라고 할 수 있겠는데요. [각주*영어에서 er이 붙으면 뭔가하는놈이 됩니다. 예를 들어 고용하는 사람, 고용주는 employ'er' 이라고 하고 고용 당하는 사람 한마디로 직원은 employ'ee' 가 됩니다.*] 아까도 말했듯이 업스케일러의 경우 컴퓨터 알고리즘을 사용한 전통적인 방법, 즉 AI를 사용하지 않는 비AI 업스케일러와 AI를 활용하여 업스케일링 하는 AI 업스케일러가 있게 되는데요. 일반적으로 전통적인 업스케일러의 경우엔 효과가 미미하기에 원본 이미지 파일이나 영상의 화질이 높은 편이고 깔끔한데, 뭔가 몇% 부족한 느낌일때 후처리 용도로 사용하는 정도로만 사용하고,
나쁜 품질의 이미지나 영상을 훨씬 좋게 업스케일링 하고 싶으면 AI 업스케일러를 사용하는 게 좋습니다.
AI 업스케일러의 종류가 꽤나 많습니다.
인터넷에 AI 그림 관련해서 찾아보면 꽤 많은 정보를 얻을 수 있는데요. 아마 좀 대중적으론 waifu 2x나 ESRGAN , CUGAN 정도가 있는 거 같습니다.
여러 AI 업스케일러의 자세한 내용에 대해선 이 블로거 분이 친절하게 설명을 해주셨으니 이 글을 읽어보시면 좋을 거 같습니다. 지금 AI 업스케일러 중에 그나마 가장 보편적이고 좋다고 생각되는건 Real-ESRGAN 이라는 업스케일링 방식입니다. 원래 ESRGAN 에 발전한 방식이라 REAL을 붙여서 표기하는 듯 한데요. Real 이라고 매번 쓰는게 귀찮으니 R-ESRGAN 이라고 표기되기도 합니다.
실제로 ESRGAN 으로 여러 게임들의 텍스쳐 업스케일링이 진행 되고 있습니다.
오늘은 R-ESRGAN을 통해서 이미지와 영상 업스케일링 하는 방법을 배워봅시다.
R-ESRGAN 작업을 위한 GUI 프로그램 받기
작업을 위해선 2가지 준비물이 필요합니다.
1. R-ESRGAN 실행 파일
2. 고성능 그래픽 카드
1번의 경우 그냥 제가 설명하는걸 받으면 되는데 인공지능의 경우 수학적으로 행렬 연산을 아주 많이 진행해야 하고 이를 위해서 고성능의 그래픽 카드가 필요합니다.
오늘 R-ESRGAN 작업을 위해선 최소 그래픽 카드가 2060s / 권장으론 3060 이상을 추천합니다. 성능이 높으면 높을 수록 좋습니다. 저는 RTX3080 12GB를 사용중인데 이미지 업스케일링 작업은 순식간에 되나 영상을 작업하는 경우 영상을 프레임 단위로 일일히 이미지로 따서 모두 업스케일링 시켜야 하기에 시간이 매우 오래걸립니다.
어쨌던 오늘 작업은 고성능 그래픽 카드가 없으면 좀 무리가 있습니다. 그래픽 카드가 내장이거나 저사양이면 그냥 안하는게 낫습니다.
그럼에도 고성능 그래픽 카드 없이 작업을 하고 싶으신 분들은
https://github.com/boomb0om/Real-ESRGAN-colab
위 처럼 Google Colab 을 활용해서 Google에서 컴퓨터 자원을 빌려서 하는 방법이 있긴 한데 이건 파이썬 프로그래밍 경험 및 리눅스 사용 경험이 어느정도 있어야 수월합니다. 이거에 대해선 나중에 다뤄볼게요.
https://github.com/xinntao/Real-ESRGAN
R-ESRGAN 으로 이미지나 영상 화질을 뻥튀기 하고 싶으면 여기 github 공식 페이지에 가서 프로그램을 받으면 되는데요. 문제점은 GUI가 아닌 CLI (=검은 도스창) 로 제공됩니다. 윈도우로 따지면 cmd를 키고 일일히 명령어를 입력해서 업스케일링을 진행해야 하는데요. 일반적으로 CLI로 하는건 개발자나 숙련된 사람들 (딱 저같은 사람) 에게나 익숙하지 일반 사용자 분들에겐 불편만 할겁니다.
그래서 오늘은 쉽게 2개! GUI로 제공되는 프로그램들이 있으므로 이걸 받으면 쉽게 딸깍 딸깍만 해도 R-ESRGAN으로 업스케일링을 해볼 수 있습니다.
이미지 업스케일링
아래에서 프로그램을 받습니다.
1. https://github.com/YukihoAA/waifu2x_snowshell/releases
2. https://github.com/tsukumijima/Real-ESRGAN-GUI/releases
저는 2개 다 해볼거라서 다 받아볼겁니다. 둘 중 하나만 받아도 되나 같은 Real-ESRGAN 으로 작업을 진행하는데도 두 프로그램의 결과가 다르게 나옵니다. (아마 Real-ESRGAN 으로 업스케일링 시에 여러 옵션을 줄 수 있는데 두 프로그램이 이 옵션을 조금 다르게 주는 듯 합니다.) 따라서 결과물을 여러 개 받고 좋은 걸 택하시고 싶으신 분들은 위 프로그램 2개를 다 받으시는걸 추천드립니다.
1번 waifu2x snowshell 의 경우 링크로 들어가서 fullpack을 받습니다. 원래 해당 프로그램은 waifu2x 라는 이름 그대로 waifu2x 업스케일링을 gui로 쉽게 하기 위해 설계한 프로그램으로 보이는데, 재미있게도 2017년부터 꾸준히 업데이트 되면서 거의 모든 AI 업스케일러를 지원하기 시작했습니다.
당연히 오늘 해볼 Real-ESRGAN 도 지원하고 REAL-CUGAN 이라는 것도 지원합니다.
2번의 경우 빨간색으로 쳐진 windows 로 끝나는 파일을 받아주세요.
프로그램 2개를 다 받았다고 가정하고 시작해보겠습니다.
오늘 업스케일링을 할 원본 사진은 이겁니다. 업스케일링을 여러 번 해본 결과 결과가 잘 나올만한건 실사보단 그림이였고 디테일이 사라지나 확인할 수 있도록 복잡한 옷무늬가 있는 사진을 가져와 봤습니다. 그리고 실사 업스케일링은 관심도 없구요
waifu2x 를 압축 풀고 waifu2x_snowshell.exe 를 실행하면 이렇게 나옵니다. 사용 방법은 별 거 없는데요 그냥 업스케일링 하고 싶은 사진을 이 창에 드래그 & 드롭 해주면 끝입니다. 그 전에 간단히 설정 몇 개를 할 겁니다.
먼저 가장 중요한 Converter 설정. RealEsrgan으로 할 거라서 선택해줍니다
어떤 파일 확장자로 내보낼 것인지 정합니다. jpg / png / webp 중에 하나를 선택해줍니다.
TTA 설정은 활성화 하면 작업이 좀 더 오래걸리는 대신 조금 더 좋은 품질의 이미지를 얻을 수 있다고 합니다. 저는 비활성화 / 활성화 한 상태 모두를 봐서 차이를 확인 해보겠습니다.
그리고 이상하게 확대 배율이 x4.0 으로 고정되네요. 제 컴퓨터가 문제인지는 잘.. 원래 Real Esrgan으로 업스케일링 시 해상도 뻥튀기를 2배, 3배, 4배 이렇게 정할 수 있는데 일단은 안되니깐 제일 높은 4배로 한 번 해보겠습니다.
다 설정했으니깐 이미지를 드래그 & 드롭 합시다. 끌어 땅겨서 프로그램 창 위로 놓아주세요.
이런 창이 뜨면 예 클릭
제대로 작동했다면 CPU 대신 그래픽카드의 로드율이 작업이 완료될때까지 100% 까지 치솟으며 작업이 수행됩니다. 저는 3080 기준으로 530x498 크기의 jpg 파일을 처리하는데 1~2초 정도만에 끝났습니다. 만약에 너무 오래걸리거나 끝이 없이 작업된다면 그래픽카드 대신 CPU가 일하고 있는 경우가 있는데, 이러면 문제가 발생한 것이므로 인터넷에서 문제를 잘 해결해봐야 합니다.
결과물은 아래와 같습니다.
차이를 보시면 알겠지만 정말 놀랍게도 선명해진걸 볼 수 있습니다. 새로 그렸다고 해도 믿겠네요. 원본 그림은 조금 흔들린 것처럼 흐릿하게 나왔는데 그것도 없이 선명해졌고 색감 전체도 보정된 모습입니다.
taa 설정을 한 것과 안 한건 여기 글에서 차이를 잘 못볼 수 있는데 직접 이미지를 받아서 비교해보면 taa로 한 결과물이 살짝 더 부드럽게 처리되면서 흐릿하게 처리되어 오히려 taa 결과물이 살짝 떨어져 보이는 결과가 나왔습니다.
또한 아쉬운 점을 꼽자면 업스케일링을 하면서 노이즈가 너무 강하게 보정이 되서 원본 사진의 옷 무늬 디테일, 뒷 배경 점무늬 디테일이 뭉개진 것을 볼 수 있습니다. 이건 AI 업스케일러의 어쩔 수 없는 단점으로 자신이 학습한대로 이미지를 유추하여 픽셀을 끼워넣기 때문에 그렇습니다.
Real-ESRGAN 업스케일링의 경우 품질은 좋으나 노이즈 줄이는 레벨 설정이 불가능해서 조금 아쉽습니다. 이런 경우 REAL-CUGAN 을 통해서도 업스케일링 해보시고 다양한 컨버터를 사용해서 업스케일링을 해보면 됩니다.
waifu2x snowshell 의 경우 사용법이 워낙 간단하니 이 정도만 설명하겠습니다.
이번엔 Real-ESRGAN-GUI 를 사용해봅시다. 압축을 풀고 안의 Real-ESRGAN-GUI.exe를 실행하면 다음과 같은 창이 나옵니다. 일본인이 만들었던데 디자인이 윈도우 프로그램 치고 안드로이드 디자인처럼 이뻐서 C# WPF 나 일렉트론 같은걸로 만든건가? 했는데 플러터로 만들었더라구요.
플러터는 앱 개발시 사용하는 도구인데 구글에서 만들어서 현재도 적극적으로 밀어주고 있는 것으로, 플러터를 배우면 안드로이드 / IOS 앱을 한 번에 만들 수 있고, 어플뿐만 아니라 웹 사이트, MacOS, 지금처럼 윈도우 프로그램 등 거의 모든 플랫폼에서 돌아가는 프로그램을 만들 수 있습니다.
저도 잠깐 배웠는데 윈도우 프로그램을 플러터로 만든건 처음봐서 꽤나 신선하네요. 이 프로그램 역시 사용 방법이 간단합니다.
이 프로그램은 R-ESRGAN 과 R-CUGAN 두 개의 처리를 지원합니다. 저는 Real-ESRGAN으로 할꺼니깐 저 빨간색 부분 클릭
이미지 파일 1개만 처리할 건지 (File Selection), 폴더 안에 있는 모든 이미지를 일괄적으로 처리할 건지 (Folder Selection) 가 있는데 이미지 파일 1개만 할것이므로 File Selection으로 둡니다.
그리고 드래그 & 드롭으로 넣는건 지원하지 않아서 Select File로 업스케일링 할 파일을 선택해줍니다.
그러면 자동으로 경로가 입력되고 Output file path 부분에도 경로가 생기는걸 볼 수 있습니다.
저기 빨간색으로 밑줄 친 부분이 업스케일링 될 파일의 이름입니다. 자동으로 원본 파일이름 + -upscale-4x 이런식으로 지어지는데 바꾸고 싶으시면 바꿔도 됩니다.
그리고 모델, 확대할 배율, 파일 확장자를 정해줘야 하는데요. Scale(배율) 은 몇 배 뻥튀기 할 건지 알아서 정하시면 되고 확장자(Format) 도 그냥 원하시는거 해주시면 됩니다.
그리고 Model 선택이 있는데 이 model을 어떻게 하냐에 따라 처리속도와 출력물이 좀 달라집니다.
기본은 realesr-animevideov3 란 것으로 되어 있는데 for illustrations 란걸로 봐서 이미지를 위한 모델이고 안정적이고 빠르다고 하네요.
눌러보면 다른 모델 2개가 더 나오는데 일러스트 파일의 경우 위 사진에 나온 animvevideo3 나 x4plus-anime 쓰면 될 거 같구요. 일러스트 파일이 아니라 일반적인 사진이나 이런 것들은 x4plus 로 선택하면 되겠습니다. 저는 기본 옵션인animevideov3 과 x4plus-anime 을 해보겠습니다.
결과물은 다음과 같습니다. 분명 같은 Real-ESRGAN인데도 waifu2x snowshell에서 수행한 R-ESRGAN 결과물과 사뭇 다르게 처리가 됐는데요.
일단 realesr-animevideo3 의 경우 아까 것과 다르게 옷과 배경의 디테일이 망가지지 않았습니다. 그러나 선명함이나 색감의 느낌은 떨어져 보이구요
realesrgan-x4-plus-anime이 아까 waifu2x 에서 한거랑 같아보입니다. 똑같이 같은 부분에서 배경, 옷무늬가 사라졌고 용량도 같네요.
정리해보자면 waifu2x snowshell 프로그램에서 처리하는 R-ESRGAN + TAA 없음 = Real-ESRGAN-GUI 에서 설정한 realesrgan-x4-plus-anime 고
나머지 TAA 설정 및 realesr-animevideo3 은 상이한 결과를 내게 됩니다.
뭐가 좋은지는 개인적으로는 조금 덜 선명해도 디테일을 남긴 realesr-animevideo3 이 더 좋다고 생각되네요. 하지만 업스케일링을 돌려보시면 알겠지만 이미지에 따라 결과가 천차만별이므로 그냥 하나하나씩 다 해보면서 괜찮은걸 하나 고르면 되겠습니다.
동영상 업스케일링
동영상 업스케일링의 경우에도 이미지 업스케일링이랑 거의 같게 하면 되는데요. 쉽게 하는 방법은 ffmpeg 이라는 프로그램으로 동영상 파일을 열어서 프레임 단위로 전부 이미지로 바꿔낸 다음에, 이 이미지를 전부 R-ESRGAN으로 업스케일링 하고 나중에 영상으로 합치는 방식인데 이렇게 하니깐 너무 느려터졌더라구요. 한 1분 30초짜리 영상을 업스케일링하는데 거의 20~25분이 걸리더군요.
https://github.com/ONdraid/reve
좀 더 빠른 방법이 없을까 했는데 이런 프로그램을 찾았습니다.
RUST로 만든 프로그램인데 이걸로 동영상을 업스케일링 하니깐 기존 동영상에서 이미지를 추출해 업스케일링 하는 방식보다 훨씬 빠르게 작업이 되는걸 확인했습니다. 방식은 대충 이미지를 추출하는건 동일한데 업스케일링하고 동영상으로 인코딩 하는 과정을 한 꺼번에 하는 거 같던데.. 뭐 정확히는 모르겠네요. 일단 이게 더 빠르면 된 거 아닐까요?
실제로 작업해보면 CPU 처리 과정과 GPU 처리를 동시에 해서 CPU랑 GPU가 풀로 갈궈집니다.
이건 gui로 만든게 아니라서 어쩔 수 없이 CLI 도스창에서 작업을 해야 합니다. 그래도 명령어가 되게 단순해서 어렵진 않을겁니다.
https://github.com/ONdraid/reve/releases/tag/v0.1.2
위 링크로 들어간 다음 빨간색으로 쳐진 압축 파일 받고 압축 풀어주세요.
압축 풀면 이렇게 많은 파일이 보이는데요. 우리가 명령어를 통해 실행해야 할 것은 reve.exe 파일 뿐입니다.
다양한 방법이 있겠지만 키보드 쉬프트를 꾹 누른 상태에서 폴더 빈 부분에 오른쪽 클릭하면 다음과 같이 "여기에 PowerShell 창 열기" 가 뜹니다. * 주의 : 쉬프트를 꾹 누르지 않고 오른쪽 클릭하면 해당 메뉴는 안뜨니 주의해주세요.
저는 편의를 위해 터미널로 열었는데요 제가 PowerShell 을 이미 꾸며놓은 상태고 터미널 프로그램이라 생긴게 조금 다를 순 있습니다만, 그냥 뜬 파란창에다가 명령어 입력만 잘 하시면 됩니다.
하지만 시작전에! 당연히 업스케일링할 원본 영상이 필요하겠죠? 파일을 제대로 받으셨다면 샘플로 이렇게 옛날 원피스 영상을 하나 줍니다. 저는 이걸로 업스케일링 해볼건데 다른 파일이 필요하다면 reve.exe 와 같은 폴더에 넣어주세요.
아래와 같은 명령어를 열린 PowerShell 창에 입력합니다.
./reve.exe -i 입력파일명 -s 배율 출력파일명
입력파일명과 출력파일명은 원하는 대로 입력하시고 배율의 경우 해상도를 몇 배 뻥튀기 할 지 인데 2,3,4 중 아무거나 원하는 값을 입력하면 됩니다.
저의 경우 같은 폴더의 onepiece_demo.mp4를 4배로 업스케일링 해볼 것이기에
./reve.exe -i onepiece_demo.mp4 -s 4 onepiece_demo_x4.mp4
이렇게 입력해주면 되겠네요. 입력 파일명과 출력 파일명, 배율만 잘 정해주시면 됩니다.
제대로 명령어를 입력했다면 다음과 같이 작업이 이루어집니다. 기다리면 됩니다.
창에 "done" 이라는 문구가 나올때까지 창을 닫지마세요.
업스케일링 할땐 GPU가 100%, 인코딩할때는 CPU가 100% 이런식으로 돌아가며 잘 컴퓨터 자원을 끌어 먹습니다.
"done" 이라고 뜨면 작업 완료입니다.
x4 라고 파일이 새로 하나 생겼고 원본과 비교해보면?
...? 어라라 뭔가 이상하네요 사용해보니깐 해상도 x2 배에서는 문제가 없는데 x3 배부턴 문제가 발생하네요.
https://github.com/ONdraid/reve/issues/9
Issue 탭에 문제가 등재되어 있고 원본 R-ESRGAN 파일도 최신 버전이라고 하는데 아마 이 프로젝트의 문제가 아닐까 싶네요. 걍 x2 배로 업스케일링한걸 보여드리겠습니다
오! 아주 깔끔하게 작업이 됐네요. 3배, 4배가 제대로 작동하지 않는게 정말 아쉽지만 제가 Rust는 배워보질 않아서 해당 프로그램을 쉽게 고치긴 어려워 보입니다.
AI 업스케일러는 만능이 아니다
지금까지 작업이 잘 된거만 보여드려서 그렇지 업스케일링에 적합하지 않은 이미지가 입력으로 들어올 경우, 예를 들면 원본 이미지 자체가 너무 저화질이라 AI가 추론으로 픽셀을 생성해내도 화질을 올리기 어려운 경우 이미지가 수체화처럼 번지고 세부 디테일이 모두 날라가버릴 수 있는 문제가 있습니다.
바로 위에서 업스케일링한 원피스 영상의 경우에도 R-ESRGAN으로 출력이 잘 나오는 영상만 데모로 따로 가져온 것입니다.
따라서 아직까진 아주 완벽한 기술은 아닙니다. 하지만 AI가 매우 빠르게 발전하고 있으므로 업스케일링의 모델 개선만 된다면 진짜 다시 그린 수준으로 복구가 되지 않을까 기대해봅니다.
본 글에선 R-ESRGAN 을 중점적으로 소개해드렸지만 Topaz Video AI 같이 AI 작업과 함께 세부 디테일을 설정할 수 있는 유료 프로그램도 있으니 잘 찾아보시길 바랍니다.
오늘 글은 여기까지 ~ 요새 너무 피곤하기도 하고 1일 1글 쓰는 블로그 초심도 잃었다보니 정보글 작성이 쉽지 않네요. 긴 글 읽어주셔서 감사합니다.
'프로그래밍 > Etc' 카테고리의 다른 글
GoingBus로 ChatGPT4(ChatGPT-4o) 싸게 써보자! 실제 사용 후기 포함 (0) | 2024.05.25 |
---|---|
이전에 작업한 SMS 웹 전송 시스템 유지 보수 (2) (0) | 2023.11.29 |
티스토리 댓글창 안열림 window.open is not a function 문제 해결 (0) | 2023.05.21 |
VS 2022 C/C++ Compiler보다 더 깐깐한 gcc/g++ Compiler! (0) | 2022.10.31 |
[Solved.ac] 새싹 100% (0) | 2022.09.30 |