AI 프로젝트 실습

[AI 실습] DeblurGANv2로 이미지 흔들림 복원하기 – PyTorch 모델 실행부터 추론까지

게임교수 2025. 4. 22. 07:48
반응형

DeblurGANv2로 이미지 흔들림 복원하기 – PyTorch 모델 실행부터 추론까지

이 글은 인공지능으로 사진 흔들림을 제거하는 실전 프로젝트의 두 번째 단계입니다. 지난 글에서는 전체 구조와 프로그램 개발 흐름을 소개했는데, 이번에는 실제로 AI 모델을 다운로드하고 흔들린 이미지를 복원해보는 실습을 진행합니다.

DeblurGANv2란 무엇인가?

DeblurGAN은 흔들린 이미지를 원래처럼 선명하게 복원하는 GAN 기반의 딥러닝 모델입니다. GAN은 생성자와 판별자가 경쟁하면서 고품질 이미지를 생성할 수 있게 하는 구조입니다. DeblurGANv2는 이전 버전에 비해 더 빠르고 정확하게 개선된 구조이며, 다양한 데이터셋에서 높은 성능을 입증했습니다.

모델 다운로드 방법

DeblurGANv2는 GitHub에서 오픈소스로 제공됩니다. 아래 명령어로 저장소를 복제하세요.

git clone https://github.com/VITA-Group/DeblurGANv2.git
cd DeblurGANv2

필요한 사전학습 모델은 다음 링크에서 받을 수 있습니다:

  • GoPro dataset용 모델 (사용 권장): https://drive.google.com/file/d/1JpZeiD3dzyx_Zk1PZn-L7xNnpln6-Qdc/view
  • 다운로드 후 weights 폴더에 저장: weights/gopro_generator.pth

환경 설정

Python 3.8 기준, 아래 패키지를 설치하세요.

pip install torch torchvision opencv-python matplotlib tqdm

DeblurGANv2에서는 CUDA GPU 환경을 권장하지만, CPU로도 실행은 가능합니다. 다만 속도는 느립니다.

입력 이미지 준비

복원 테스트를 위한 이미지 파일을 하나 준비해, 아래 폴더에 넣습니다.

DeblurGANv2/test_images/sample_blurred.jpg

참고로 여러 장의 이미지가 아니라 단일 이미지를 복원하는 방식입니다. 멀티 프레임 정합은 별도로 구현이 필요합니다.

모델 실행 코드

아래는 PyTorch를 이용해 사전학습된 DeblurGANv2 모델을 불러오고, 이미지를 복원하는 예시 코드입니다.

import torch
import torchvision.transforms as transforms
from PIL import Image
import cv2
import numpy as np
import os
from models import generator

# 모델 로드
model = generator.GPNet()
ckpt = torch.load('weights/gopro_generator.pth', map_location='cpu')
model.load_state_dict(ckpt['model_state_dict'])
model.eval()

# 이미지 로드
image = Image.open('test_images/sample_blurred.jpg').convert('RGB')
transform = transforms.Compose([
    transforms.Resize((720, 1280)),
    transforms.ToTensor()
])
input_tensor = transform(image).unsqueeze(0)

# 추론
with torch.no_grad():
    output_tensor = model(input_tensor)

# 결과 저장
output_image = output_tensor.squeeze().permute(1, 2, 0).numpy()
output_image = np.clip(output_image * 255, 0, 255).astype(np.uint8)
cv2.imwrite('test_images/output_restored.jpg', cv2.cvtColor(output_image, cv2.COLOR_RGB2BGR))

이 코드를 실행하면 test_images 폴더에 복원된 이미지가 생성됩니다.

결과 확인

실행 결과는 일반적인 흐릿한 이미지보다 확연히 선명한 결과를 확인할 수 있습니다. 모델이 한계는 있지만, 사전학습 데이터와 유사한 흔들림 조건에서는 매우 효과적으로 작동합니다.

커스터마이징 팁

  • 입력 크기 수정: transforms.Resize() 크기를 카메라 해상도에 맞게 조정
  • 멀티 프레임 입력을 위해 정합 후 평균 입력 시도
  • PyQt5와 연동하여 GUI에서 추론 결과를 바로 보여주도록 구성 가능

다음 글 예고

3편에서는 PyQt5 GUI 프로그램에 이 모델을 통합하여 사용자가 직접 이미지를 불러오고 복원할 수 있는 데스크탑 앱으로 발전시키는 과정을 다룰 예정입니다.

마무리

이번 글에서는 DeblurGANv2 모델을 다운로드하고, PyTorch로 흔들린 이미지를 복원하는 전체 과정을 살펴보았습니다. AI 모델은 그 자체로도 유용하지만, 이렇게 직접 실행해보고 결과를 확인하며 확장해나가는 과정에서 실질적인 역량이 쌓입니다. 다음 글에서 GUI와의 통합을 통해 완성도 있는 프로그램으로 발전시켜보겠습니다.

반응형