この記事は公開から1年以上経過しています。
先日のエントリ「PythonでGFPGANを使った写真高解像化を行う方法」の顔画像の高解像化に続いて風景等の高解像化をお手軽に試す方法を紹介します。
検証環境はLinux(Ubuntu 22)+GPU(RTX3060 12GB)+Python(3.10)です。
サンプルソースコード
モデルのダウンロードサイズが数十MBありますので、通信環境にご注意ください。
pip:
realesrgan
opencv-python
main.py
import cv2
from basicsr.archs.rrdbnet_arch import RRDBNet
from basicsr.utils import imwrite
from realesrgan import RealESRGANer
INPUT_IMG_PATH = 'input.png'
OUTPUT_IMG_PATH = 'output.png'
MODEL_PATH = 'https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth'
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64,
num_block=23, num_grow_ch=32, scale=4)
esrganer = RealESRGANer(
scale=4,
model_path=MODEL_PATH,
model=model,
tile=0,
tile_pad=0,
pre_pad=0,
half=False)
img = cv2.imread(INPUT_IMG_PATH, cv2.IMREAD_COLOR)
output_img, _ = esrganer.enhance(img)
imwrite(output_img, OUTPUT_IMG_PATH)
コードは説明するまでもないですが、入力画像、出力画像、学習済モデルを指定しているだけです。
検証結果
このモデルは過去のエントリ「Stable Diffusionをローカル環境で使用する方法」のコードを使ってStable Diffusion(safetensors)で適当に生成した架空の風景です。
【オリジナル(768×768)】
【入力画像(768×768 → 192×192)】
【出力画像(768×768)】
輪郭がシャープになって質感がザラザラした感じにはなってしまっていますが、かなり綺麗に高解像化されているのではないかと思います。
【バイキュービック補間(768×768)】
補間だけの場合は、上図のとおりピンぼけしたような画像になってしまいます。
ちなみに、上記サンプルコードは高解像を試すのに必要最低限の部分のみを抜粋していますので、あれこれやってみたい場合は参考ウェブサイトをご参照ください。
本例の事前学習済モデルは一般画像用ですが、アニメ画像用のモデルなども公開されています。
参考ウェブサイトなど
- GitHub
xinntao/Real-ESRGAN
以上です。