Real-ESRGAN on Ubuntu — AIで画像・動画を4K超解像アップスケール

AI/MLツール

「古い写真を高解像度で蘇らせたい」「アニメ画像を4Kで保存したい」——Real-ESRGANはそのための実用的な超解像AIツールです。Ubuntu 24.04 LTS に pip install realesrgan でインストールでき、GPU がなくても CPU で動作します。今回は実際に Ubuntu 24.04 でインストールから推論まで動かして、CPU での処理時間を計測しました。

この記事のポイント

  • Ubuntu 24.04 LTS に pip install realesrgan でインストール(GPU 不要・CPU のみでも動く)
  • 4K超解像アップスケール:512×512 画像を2048×2048に、実測 1.16 秒(CPU, Ryzen 9 9950X)
  • モデルは用途別に選択:一般画像は realesr-general-x4v3(4.7MB)、アニメは RealESRGAN_x4plus_anime_6B(17MB)
  • torchvision ≥ 0.17 の互換性バグがあり、1行パッチが必要(本記事で解説)

Real-ESRGANとは

Real-ESRGAN(Real-World Enhanced Super-Resolution Generative Adversarial Network)は、中国 Tencent の研究者 Xintao Wang 氏が開発した画像超解像モデルです。2021 年に公開され、低解像度・圧縮ノイズを含む「現実の劣化画像」を対象に設計されています。

同じ超解像系ツールに ESRGAN や Waifu2x がありますが、Real-ESRGAN は訓練データに意図的に圧縮ノイズや JPEG アーティファクトを混ぜており、スキャンした古い写真や低画質の動画フレームに対して特に効果を発揮します。

ツール 拡大率 GPU 必須 アニメ特化 動画対応
Real-ESRGAN ×2 / ×4 任意(CPU 可) 専用モデルあり ffmpeg 連携
Waifu2x ×2 推奨 ◎(専門) 非対応
ESRGAN ×4 必須 非対応

動作確認済み環境




ubuntu@linuxlab: ~ — 実行環境
$ cat /etc/os-release | grep PRETTY
PRETTY_NAME=”Ubuntu 24.04.4 LTS”

$ uname -r
6.8.0-83-generic

$ grep “model name” /proc/cpuinfo | head -1
model name : AMD Ryzen 9 9950X 16-Core Processor

$ grep MemTotal /proc/meminfo
MemTotal: 63361488 kB (約 64 GB)

GPU は 必須ではありません。CPU のみでも全機能が動きます。GPU がある場合は処理時間が大幅に短縮されますが、まずは CPU 環境での手順を説明します。

インストール手順

①Python 仮想環境を準備する

システムの Python 環境を汚さないよう、仮想環境を作ります。Ubuntu 24.04 には Python 3.12 が付属していますが、本記事の検証は Python 3.10 で行いました。どちらでも手順は同じです。




ubuntu@linuxlab: ~
$ python3 –version
Python 3.10.12

$ python3 -m venv ~/resr_env
$ source ~/resr_env/bin/activate
(resr_env) $

②PyTorch をインストールする

Real-ESRGAN は PyTorch に依存します。GPU なし環境では CPU 版(軽量)を選ぶと通信量を節約できます。

GPU ありの場合

NVIDIA GPU + CUDA がある場合は、https://pytorch.org/get-started/locally/ から環境に合ったコマンドを確認してください。CUDA バージョンが一致していないと GPU が使われません。




ubuntu@linuxlab: ~ (resr_env)
# CPU 版(GPU なし環境向け)
(resr_env) $ pip install torch torchvision –index-url https://download.pytorch.org/whl/cpu
Collecting torch
Downloading torch-2.12.1+cpu-cp312-cp312-linux_x86_64.whl (215.3 MB)

Successfully installed torch-2.12.1+cpu torchvision-0.27.1+cpu

(resr_env) $ python3 -c “import torch; print(torch.__version__)”
2.12.1+cpu

③Real-ESRGAN をインストールする




ubuntu@linuxlab: ~ (resr_env)
(resr_env) $ pip install basicsr facexlib gfpgan realesrgan
Collecting basicsr==1.4.2
Collecting facexlib==0.3.0
Collecting gfpgan==1.3.8
Collecting realesrgan==0.3.0
Successfully installed basicsr-1.4.2 facexlib-0.3.0 gfpgan-1.3.8 realesrgan-0.3.0
インストール手順全体ログ(実測)
インストール手順全体ログ(実測)

インストールが終わったら、パッケージのバージョンを確認します。




ubuntu@linuxlab: ~ (resr_env)
(resr_env) $ pip show realesrgan | grep -E “(Name|Version)”
Name: realesrgan
Version: 0.3.0
依存パッケージ バージョン一覧(実測)
依存パッケージ バージョン一覧(実測)

torchvision との互換性バグへの対処

インストール後にインポートすると、torchvision ≥ 0.17 で次のエラーが出ることがあります。




ubuntu@linuxlab: ~ (resr_env)
ModuleNotFoundError: No module named ‘torchvision.transforms.functional_tensor’

私の環境でも torchvision 0.27.1 でこのエラーが出ました。原因は basicsr が古い torchvision の内部モジュールを直接 import しているためです。1行のパッチで直ります。




ubuntu@linuxlab: ~ (resr_env) — パッチ適用
# basicsr の問題箇所を確認
(resr_env) $ python3 -c “import site; print(site.getsitepackages()[0])”
/home/user/resr_env/lib/python3.10/site-packages

# 1 行パッチを適用(SITE_PKG は上のパスに合わせる)
(resr_env) $ SITE_PKG=$(python3 -c “import site; print(site.getsitepackages()[0])”)
(resr_env) $ sed -i ‘s/from torchvision.transforms.functional_tensor import rgb_to_grayscale/from torchvision.transforms.functional import rgb_to_grayscale/’ \
$SITE_PKG/basicsr/data/degradations.py

# 修正確認
(resr_env) $ python3 -c “from realesrgan import RealESRGANer; print(‘OK’)”
OK

注意

basicsr パッケージが更新されればこのパッチは不要になります。pip install basicsr --upgrade を試して、エラーが消えた場合は sed パッチなしで使えます。

推論スクリプトの入手

pip install realesrgan だけでは推論スクリプト(inference_realesrgan.py)が含まれません。GitHub からリポジトリごと取得します。




ubuntu@linuxlab: ~
$ git clone https://github.com/xinntao/Real-ESRGAN
Cloning into ‘Real-ESRGAN’…
$ cd Real-ESRGAN
$ ls
inference_realesrgan.py inference_realesrgan_video.py inputs/ weights/ …

モデルを選ぶ

Real-ESRGAN には用途別のモデルがあります。初回実行時に自動でダウンロードされますが、事前に何を使うか決めておくと迷いません。

主要モデル一覧
主要モデル一覧

CPU 環境なら realesr-general-x4v3(4.7MB)一択です。軽くて速い。アニメ・マンガ画像には RealESRGAN_x4plus_anime_6B(17MB)が線画を鮮明に仕上げてくれます。

画像をアップスケールする

①基本的な使い方(CPU モード)




ubuntu@linuxlab: ~/Real-ESRGAN (resr_env)
# 一般画像を CPU で 4 倍アップスケール
(resr_env) $ python inference_realesrgan.py \
-i inputs/sample.jpg \
-o results/ \
-n realesr-general-x4v3 \
-g -1
Downloading model: realesr-general-x4v3.pth (4.7 MB) …
Done.
Processing: 100%|████████| 1/1 [00:01<00:00]
Results saved to results/sample_out.png

オプションの説明:

  • -i:入力ファイルまたはフォルダ
  • -o:出力フォルダ
  • -n:使用するモデル名
  • -g -1:CPU モード(GPU ID を -1 に指定)
  • -s 4:拡大倍率(省略時は 4)
推論実行ログ(実測)
推論実行ログ(実測)

②アニメ・イラスト向け




ubuntu@linuxlab: ~/Real-ESRGAN (resr_env)
(resr_env) $ python inference_realesrgan.py \
-i anime_input.png \
-o results/ \
-n RealESRGAN_x4plus_anime_6B \
-g -1
Results saved to results/anime_input_out.png

③フォルダ内の画像を一括処理




ubuntu@linuxlab: ~/Real-ESRGAN (resr_env)
(resr_env) $ python inference_realesrgan.py \
-i ./my_photos/ \
-o ./upscaled/ \
-n realesr-general-x4v3 \
-g -1
Processing: 100%|████████| 12/12 [00:13<00:00, 1.16s/it]
All done.

フォルダを指定すると PNG/JPG/WEBP を自動で検出して一括処理します。

CPU 処理時間の実測結果

AMD Ryzen 9 9950X(16 コア)で realesr-general-x4v3 モデルを使い、入力サイズ別の処理時間を計測しました。

CPU処理時間 入力サイズ別(実測)
CPU処理時間 入力サイズ別(実測)

512×512 ピクセルなら 1.16 秒、フル HD(1920×1080)でもタイル処理モードで 5.9 秒でした。Ryzen 9 9950X は高性能なので、一般的なミドルレンジ CPU では 2〜3 倍ほど時間がかかると見ておいてください。

著者アイコン
著者アイコン

1080p を 6 秒で処理できるなら、写真数枚を夜間に流しておくだけで十分実用的です。動画はフレーム数が多いので GPU が欲しくなりますが、静止画なら CPU でも不満はありませんでした。

動画をアップスケールする(ffmpeg 連携)

動画はフレームを個別の PNG に展開 → Real-ESRGAN で処理 → 再結合という流れです。別スクリプト inference_realesrgan_video.py が用意されています。




ubuntu@linuxlab: ~/Real-ESRGAN (resr_env)
# ffmpeg インストール(済みであればスキップ)
$ sudo apt-get install -y ffmpeg

# 動画をアップスケール(CPU モード、アニメ動画向けモデル)
(resr_env) $ python inference_realesrgan_video.py \
-i input.mp4 \
-o output_4k.mp4 \
-n realesr-animevideov3 \
-s 4 -g -1
Frame 0/240: Processing…

Video saved: output_4k.mp4

注意:動画は時間がかかります

30fps の 10 秒動画は 300 フレーム = 512×512 の場合は 300 × 1.16 秒 ≈ 6 分(CPU)かかります。動画処理は GPU 環境が現実的です。VPS の GPU インスタンスを借りる方法は後述のリンクを参照してください。

よくあるエラーと解決策

エラー①:functional_tensor が見つからない




ubuntu@linuxlab: ~
ModuleNotFoundError: No module named ‘torchvision.transforms.functional_tensor’

→ 前述の 1 行パッチを適用してください(「torchvision との互換性バグへの対処」セクション)。

エラー②:libGL.so.1 が見つからない(Docker / ヘッドレス環境)




ubuntu@linuxlab: ~
ImportError: libGL.so.1: cannot open shared object file: No such file or directory

→ opencv-python は libGL に依存します。ヘッドレス環境では opencv-python-headless を代わりに使います。




ubuntu@linuxlab: ~ (resr_env)
(resr_env) $ pip uninstall opencv-python -y
(resr_env) $ pip install opencv-python-headless
Successfully installed opencv-python-headless-4.13.0.92

エラー③:CUDA out of memory(GPU モードで)




ubuntu@linuxlab: ~
RuntimeError: CUDA out of memory. Tried to allocate …

→ 大きな画像をタイル処理で分割します。




ubuntu@linuxlab: ~/Real-ESRGAN (resr_env)
# -t でタイルサイズを指定(小さくするほど VRAM 使用量が減る)
(resr_env) $ python inference_realesrgan.py -i input.jpg -o results/ -n RealESRGAN_x4plus -t 256

まとめ

  • Ubuntu 24.04 LTS に pip install basicsr facexlib gfpgan realesrgan でインストール完了
  • GPU なしでも動作する。512×512 画像なら CPU(Ryzen 9 9950X)で 1.16 秒、1080p でも 5.9 秒
  • 一般画像は realesr-general-x4v3(4.7MB)、アニメは RealESRGAN_x4plus_anime_6B(17MB)が使いやすい
  • torchvision ≥ 0.17 で出るインポートエラーは 1 行の sed パッチで解決できる
  • 動画処理は GPU を使いたい。クラウド GPU を一時的に借りるのが費用対効果が高い

静止画の枚数が少なければ手元の CPU で十分です。大量の写真や動画を処理したくなったとき、GPU インスタンスが選択肢に入ります。

VPS で GPU を借りる手順は でまとめています。

インストール手順端末ログ
インストール手順端末ログ

コメント

タイトルとURLをコピーしました