오래된 VHS나 저해상도 게임 녹화 영상은 단순히 확대하기만 하면 흐릿한 상태로 남게 된다. 기존의 바이리니어 (Bilinear)나 바이큐빅 (Bicubic) 보간법은 결여된 고주파 성분을 채울 수 없기 때문이다. 반면, GAN 기반의 초해상도 (Super-Resolution) 기술은 '실제 같은' 디테일을 생성할 수 있다. 왜 이것이 더 뛰어난가? 그리고 실제로 Real-ESRGAN을 사용하여 영상을 4K까지 끌어올리려면 무엇이 필요한가.
왜 GAN 초해상도가 보간법보다 강력한가
기존 방식은 인접 픽셀의 가중 평균으로 빈 공간을 채울 뿐이므로, 에지가 부드러워지고 텍스처가 손실된다. ESRGAN 계열은 생성기 (Generator)와 판별기 (Discriminator)의 적대적 학습 (Adversarial Learning)을 통해, 판별기가 '실제 고해상도 이미지'와 구별할 수 없는 출력을 생성하도록 생성기에 강제한다. 그 결과, 단순한 평활화(Smoothing)가 아니라 자연스러운 디테일이 복원된다.
특히 중요한 것이 인지 손실 (Perceptual Loss)이다. 픽셀 단위의 L1/L2 손실만으로는 지나치게 매끄러운 결과가 나오기 쉽다. 대신 VGG 등의 특징 추출기 (Feature Extractor) 중간층 출력을 비교함으로써 '시각적인 자연스러움'을 최적화한다. Real-ESRGAN은 이 개념을 더욱 진화시켜, 실사 열화(압축 노이즈, 흐림, JPEG 아티팩트)를 시뮬레이션한 학습 데이터로 강건성 (Robustness)을 높이고 있다.
구현 흐름과 주의할 점
실제 처리 과정은 대체로 다음과 같다.
- 프레임 분할 (ffmpeg를 사용하여 연속된 이미지로 변환)
- Real-ESRGAN으로 각 프레임을 2x~4x 처리
- 필요 시 TTA (Test-Time Augmentation) 또는 face enhance 적용
- 프레임을 재결합하고 오디오를 다시 입힘
주의해야 할 점은 세 가지가 있다. 첫째는 VRAM이다. 4K 출력을 일괄적으로 처리하면 쉽게 메모리 부족이 발생하므로, 타일 처리 (Tile size 조정)가 필수적이다. 둘째는 시간적 일관성 (Temporal Consistency)이다. 프레임마다 독립적으로 처리하면 플리커 (Flicker) 현상이 두드러진다. 간이적인 방법으로는 전후 프레임의 블렌딩(Blending)이나 전용 영상 모델을 검토할 필요가 있다. 마지막으로 색 공간 (Color Space)과 감마 (Gamma)이다. 입력이 BT.601인지 BT.709인지, 풀 레인지 (Full Range)인지 리미티드 레인지 (Limited Range)인지 맞추지 않으면 최종 출력에서 색상이 무너진다.
상용 AI 이미지 인핸서 (Enhancer)를 사용하면 이러한 조정을 거의 의식하지 않고 사용할 수 있지만, 직접 Real-ESRGAN을 구동하면 파라미터의 영향을 직접 관찰할 수 있다는 점이 크다. 특히 '어떤 열화를 어느 정도 제거할 것인가'를 제어할 수 있다는 점은 연구나 품질 검증 단계에서 유용하다.
오래된 영상을 Upscale AI 하는 작업은 단순히 해상도를 높이는 행위가 아니다. 모델의 한계와 인간의 눈이 무엇을 '자연스럽다'고 느끼는지의 경계를 탐구하는 과정이기도 하다. 구현을 통해 그 경계를 조금씩 이해해 나가는 것이 기술자에게는 재미있는 요소라고 생각한다.
Discussion