AI 이미지 업스케일링 완벽 가이드: 원리와 필요한 경우

모든 이미지 업스케일러는 같은 문제를 마주합니다. 원본에 없는 픽셀을 만들어야 한다는 겁니다. 너비 1000픽셀 사진을 4000픽셀로 키우면 픽셀은 16배가 되고, 16개 중 15개는 새로 만들어야 합니다. 도구가 그 픽셀을 어떻게 만드느냐가 흐릿하게 뭉개진 확대와 선명해 보이는 확대의 차이 전부입니다. 이 글에서는 전통적인 방법이 어떻게 하는지, AI 초해상도가 어떻게 하는지, 저희 같은 브라우저 업스케일러가 내 그래픽 카드에서 신경망을 어떻게 돌리는지, 그리고 누군가의 말을 믿는 대신 결과를 어떻게 측정하는지 차근차근 설명합니다.

전통적인 크기 조절: 이웃 픽셀의 평균

신경망 이전의 확대는 모두 보간의 한 형태였습니다. 새 픽셀을 주변의 원래 픽셀로부터 추정하는 방식입니다.

  • 최근접 이웃은 가장 가까운 원래 픽셀을 복사합니다. 빠르고 딱딱한 윤곽도 유지되지만, 모든 게 눈에 보이는 네모가 됩니다. 픽셀 아트는 일부러 이 방식으로 키웁니다.
  • 바이리니어는 가장 가까운 픽셀 네 개를 섞습니다. 부드럽지만 흐릿합니다.
  • 바이큐빅은 주변 16개 픽셀을 쓰고, 윤곽 대비를 조금 더 살리는 곡선으로 계산합니다. 대부분의 편집 프로그램과 브라우저가 '고화질' 크기 조절에 기본으로 쓰는 방식입니다.
  • 란초스는 더 넓은 범위를 써서 윤곽을 조금 더 선명하게 유지하지만, 강한 윤곽 옆에 희미한 물결무늬가 생깁니다.

모두 공통된 한계가 있습니다. 숫자만 볼 뿐, 그 숫자가 무엇을 나타내는지는 보지 않는다는 점입니다. 어두운 속눈썹과 밝은 피부 사이의 경계도 바이큐빅 보간에게는 값이 갑자기 바뀌는 곳일 뿐이라, 할 수 있는 최선은 그 틈을 완만한 경사로 잇는 것입니다. 그 경사가 바로 확대한 사진마다 보이는 흐림입니다. 아무리 조정해도 고쳐지지 않습니다. 올바른 자리에 선명한 윤곽을 그리는 데 필요한 정보가 이웃 픽셀에는 없기 때문입니다.

초해상도: 디테일이 어떻게 생겼는지 배우기

AI 업스케일링, 정확히는 단일 이미지 초해상도는 다른 길을 갑니다. 정해진 공식 대신, 수많은 예시 이미지로부터 저해상도 이미지에는 보통 어떤 미세한 디테일이 있는지를 배운 신경망을 씁니다.

학습은 개념적으로 간단합니다. 연구자들은 고해상도 사진을 대량으로 모아 하나씩 줄인 뒤, 작은 버전으로 원본을 다시 만들어 보라고 신경망에 요구합니다. 틀릴 때마다 내부 매개변수가 더 나은 답 쪽으로 조금씩 조정됩니다. 수백만 개의 예시를 거치면 신경망은 패턴을 익힙니다. 윤곽이 어떻게 이어지는지, 머리카락과 나뭇잎과 글자가 가까이서 어떻게 생겼는지, 두 색 사이의 흐릿한 계단이 보통 어떤 선명한 경계로 바뀌는지 같은 것들입니다.

이 연구 흐름의 주요 이정표 몇 가지입니다.

  • SRCNN(2014)은 작은 합성곱 신경망이 일반적인 벤치마크에서 바이큐빅 보간을 확실히 앞설 수 있음을 보였습니다.
  • ESRGAN(2018)은 학습할 때 두 번째 신경망을 더했습니다. 진짜 사진과 확대한 사진을 구별하려는 '판별자'입니다. 업스케일러는 판별자를 속일 때 보상을 받아서, 안전하고 매끄러운 평균이 아니라 사실적인 질감 쪽으로 결과가 밀려갑니다.
  • Real-ESRGAN(2021)은 흐림, 노이즈, JPEG 압축, 반복된 크기 조절 같은 현실적인 손상을 여러 개 동시에 가한 이미지로 학습해서, 인위적으로 줄인 깨끗한 이미지보다 실제 사진을 더 잘 다룹니다. Upscayl 같은 데스크톱 앱이 쓰는 모델 계열입니다.

판별자라는 아이디어가 요즘 업스케일러의 강점과 가장 큰 특징을 모두 설명합니다. 그렇게 학습했으니 그럴듯한 질감을 만들어 냅니다. 하지만 그럴듯한 것과 사실인 것은 다릅니다. 입력에 정보가 충분하지 않으면 신경망은 비슷한 이미지에 보통 있는 것으로 빈틈을 채웁니다. 그럴듯한 피부, 그럴듯한 옷감, 그럴듯한 나뭇잎입니다.

'2배'와 '4배' 모델의 의미

초해상도 신경망은 대개 정해진 배율로 학습합니다. 4배 모델은 언제나 입력의 4배 너비와 높이를, 2배 모델은 2배를 출력합니다. 다른 크기가 필요하면 도구는 가장 가까운 모델로 처리한 뒤 결과의 크기를 조절합니다. 저희 업스케일러가 정확히 2배와 4배만 제공하는 이유입니다. 각각이 맞는 모델(ESRGAN-slim 2배 또는 4배)의 한 번 처리에 해당하고, 정확한 목표 크기에 맞추는 작은 조정은 그 뒤에 일반 크기 조절로 합니다.

4배 결과를 다시 4배 모델에 넣어도 효과가 거의 없는 것도 같은 이유입니다. 두 번째 처리는 첫 번째에서 만들어 낸 질감을 진짜 입력으로 여기고 그 위에 또 만들어 냅니다.

브라우저에서 신경망 돌리기

서버 업스케일러는 전용 그래픽 카드에서 모델을 돌립니다. 브라우저 업스케일러는 방문자가 가진 컴퓨터가 무엇이든 웹 표준만으로 돌아가야 합니다. 저희 도구는 세 가지로 이루어져 있습니다.

  • 모델: ESRGAN의 작은 버전인 ESRGAN-slim입니다. UpscalerJS 라이브러리로 배포되며, 한 번 내려받아 브라우저 캐시에 둘 수 있을 만큼 작습니다.
  • 엔진: TensorFlow.js입니다. WebGL을 통해 신경망의 계산을 그래픽 카드에서 처리합니다.
  • 타일: 이미지를 몇 픽셀씩 겹치는 128 × 128픽셀 조각으로 나눠 하나씩 키운 뒤 다시 이어 붙입니다. 이렇게 하면 그래픽 메모리 사용량이 보통 노트북에서도 충분할 만큼 작아지고, 겹치는 부분 덕분에 이음매가 보이지 않습니다.

처리 시간이 배율이 아니라 입력 크기에 따라 늘어나는 건 타일 때문입니다. 테스트에서 모델을 불러온 뒤 480픽셀 이미지를 4배로 키우는 데 3~6초, 170만 화소 사진을 2배로 키우는 데 약 20초가 걸렸습니다. 그날 첫 처리는 모델을 내려받고 '예열'해야 해서 더 느립니다.

브라우저에는 데스크톱 앱에 없는 제한이 있습니다. 모바일 브라우저는 웹페이지에 모델을 돌릴 만큼의 그래픽 메모리를 주지 않아서, 휴대폰과 태블릿에서는 저희 도구가 클래식 엔진(단계적 고화질 크기 조절과 보정 슬라이더)을 씁니다. 컴퓨터에서는 AI가 약 1000만 화소까지의 원본을 처리하고, 결과물은 최대 4K를 기준으로 합니다. 일반 컴퓨터의 브라우저에서도 안정적으로 다룰 수 있는 크기입니다.

차이 측정하기

'더 선명하다'고 말하기는 쉽습니다. 저희는 측정했습니다. 인물 사진을 오래된 저해상도 사진 대신으로 480 × 480픽셀로 줄이고, 두 가지 방법으로 4배인 1920 × 1920으로 키웠습니다. 브라우저 자체의 고화질 크기 조절과 AI 모델입니다. 그리고 두 결과에서 얼굴의 같은 480 × 480 영역의 윤곽 디테일을 라플라시안 분산(이미지에 미세한 윤곽 대비가 얼마나 있는지 나타내는 흔한 지표)으로 쟀습니다.

일반 크기 조절은 3.0, AI 결과는 34.7로 윤곽 디테일이 약 11배였습니다. 이미지를 보면 숫자가 이해됩니다. 속눈썹이 다시 한 올 한 올 나뉘었고, 치아의 윤곽이 깔끔했고, 머리선에 흐릿한 얼룩 대신 질감이 있었습니다. 특징도 드러났습니다. 피부가 실제 고해상도 사진보다 매끄러워서 가볍게 보정한 느낌이었습니다.

초록 숲속의 폭포. 왼쪽은 저해상도로 흐릿하고 오른쪽은 선명한 모습

측정에 대해 덧붙이면, 연구 논문에서는 원본과 픽셀 단위로 얼마나 가까운지를 평가하는 PSNR이라는 숫자를 흔히 씁니다. 판별자로 학습한 모델은 사람 눈에는 더 좋아 보여도 매끄러운 모델보다 PSNR이 조금 낮은 경우가 많습니다. 살짝 엉뚱한 자리에 있는 사실적인 질감이 안전한 흐림보다 점수를 더 깎기 때문입니다. 그래서 저희는 벤치마크 숫자 하나가 아니라 윤곽 디테일과 이미지 자체를 봤습니다.

사진마다 결과가 크게 다른 이유

  • 모델이 잘 아는 내용(얼굴, 머리카락, 글자, 흔한 물건, 자연스러운 질감)이 가장 잘 나옵니다.
  • 압축 손상은 모델을 헷갈리게 합니다. JPEG 블록도 '디테일'이라 그대로 커질 수 있습니다. 어떤 설정보다 가장 깨끗한 사본에서 시작하는 게 중요합니다.
  • 흐림은 해상도가 부족한 게 아니라 정보가 부족한 겁니다. 초점이 나간 사진을 키우면 더 큰 초점 나간 사진이 됩니다.
  • 아주 작은 피사체는 모델에게 주는 정보가 너무 적어서, 나오는 결과는 대부분 모델 자신의 추측입니다.
  • 투명은 특별한 처리가 필요합니다. 모델은 색만 보기 때문입니다. 테스트 중에 저희 업스케일러가 투명 배경을 검게 만든다는 걸 발견했고, 지금은 확대 전에 빈 부분을 가장 가까운 윤곽 색으로 채우고 확대 후에 원래 투명도를 되돌립니다.

왜 눈이 속을까

마지막으로, 이게 애초에 왜 통하는지에 대해. 우리 눈은 선명함을 주로 윤곽, 즉 밝은 곳과 어두운 곳의 경계로 판단합니다. 윤곽이 또렷하고 질감이 단순한 그림은 선명해 보이고, 질감이 정확해도 윤곽이 흐린 그림은 흐려 보입니다. 초해상도 모델은 이 점을 이용합니다. 사람이 보는 곳에 힘을 쏟기 때문에, AI 결과는 담긴 정보로 엄밀히 따질 수 있는 것보다 더 선명해 보일 수 있습니다.

실제로 쓸 때

원리를 알면 몇 가지 실용적인 습관이 생깁니다. 가장 깨끗하고 큰 원본을 모델에 주세요. 필요한 크기에 닿는 배율을 고르세요. 배율을 한 단계 올릴 때마다 늘어나는 건 지어낸 것이지 사실이 아닙니다. 처음에는 선명도를 0으로 두세요. 모델이 이미 윤곽을 다시 만듭니다. 중요한 부분을 100%로 확인하세요. 그리고 사진은 JPG나 WebP로 저장하세요. 테스트에서 2배 결과가 PNG로 6.85MB, WebP로 337KB였고 눈에 띄는 차이는 없었습니다.

구체적인 작업은 가이드에서 더 자세히 다룹니다. 인쇄용으로 이미지 해상도 높이는 방법, 화면용으로 이미지를 4K로 업스케일하는 방법, 그리고 확대와 보정의 차이입니다. 직접 써 보고 싶다면 AI 이미지 업스케일러는 전부 브라우저 안에서 돌아가고, 사진은 어디에도 업로드되지 않습니다.

자주 묻는 질문

일반 크기 조절로 이미지가 흐려지는 이유는?

보간은 새 픽셀을 이웃 픽셀로부터 추정하기 때문에, 선명한 윤곽이 두 값 사이의 완만한 경사가 됩니다. 윤곽을 선명하게 그릴 정보는 이웃 픽셀에 없습니다.

AI 확대는 진짜 디테일인가요?

학습에 기반한 추정입니다. 윤곽과 형태는 설득력 있게 다시 만들어지지만, 모공이나 자갈 같은 미세하고 불규칙한 질감은 되살아나는 게 아니라 그럴듯하게 만들어집니다.

브라우저 업스케일러가 타일로 나눠 처리하는 이유는?

이미지를 조금씩 겹치는 128 × 128픽셀 조각으로 나눠 처리해야 보통 노트북에서도 그래픽 메모리가 충분하고, 겹치는 부분 덕분에 이음매가 보이지 않습니다.

← 전체 글

브라우저에서 바로 쓰는 무료 이미지 도구

업스케일링, 배경 제거, 메타데이터 삭제, 자르기, 압축, QR 코드 만들기. 업로드, 가입, 워터마크 없음.