深層学習による超解像技術 - SRCNN から Real-ESRGAN までの進化と実践
超解像とは - 低解像度画像から高解像度を復元する技術
超解像 (Super Resolution: SR) は、低解像度 (LR) 画像から高解像度 (HR) 画像を復元・生成する技術です。従来の補間法 (バイキュービック等) では失われた高周波成分 (エッジ、テクスチャの細部) を復元できませんが、深層学習ベースの超解像は学習データから得た知識を活用して、存在しなかった細部を「幻覚」(hallucinate) として生成します。
超解像の種類:
- 単一画像超解像 (SISR): 1 枚の LR 画像から HR 画像を生成。最も一般的で研究が盛ん。
- 複数画像超解像: 同一シーンの複数フレーム (バースト撮影) から HR 画像を生成。スマートフォンの夜景モードで使用。
- 動画超解像 (VSR): 動画の時間的冗長性を利用して各フレームを高解像度化。
スケールファクター: x2 (面積 4 倍)、x4 (面積 16 倍)、x8 (面積 64 倍) が一般的です。スケールが大きいほど困難で、x4 以上では生成的なアプローチ (GAN ベース) が必要になります。
評価指標:
- PSNR: ピクセル単位の忠実度。高いほど元画像に近い。ただし知覚的品質との相関は低い。
- SSIM: 構造的類似度。PSNR より知覚に近い。
- LPIPS: 知覚的類似度。人間の判断との相関が最も高い。
- FID: 生成画像の自然さ。GAN ベース手法の評価に使用。
PSNR が高い手法は「安全だがぼけた」結果を生み、LPIPS/FID が良い手法は「シャープだが時に不正確な」結果を生む傾向があります。用途に応じた指標の選択が重要です。
SRCNN から EDSR へ - CNN ベース超解像の発展
深層学習による超解像は 2014 年の SRCNN から始まり、ネットワーク構造の改良により急速に性能が向上しました。初期の CNN ベース手法の発展を追います。
SRCNN (2014): Dong et al. が提案した最初の深層学習超解像モデルです。わずか 3 層の CNN (パッチ抽出 → 非線形マッピング → 再構成) で、従来の補間法を大幅に上回る性能を示しました。入力はバイキュービックで事前拡大した LR 画像で、残差を学習します。
構造: Conv(9x9, 64) → ReLU → Conv(1x1, 32) → ReLU → Conv(5x5, 1)
x2 超解像で PSNR 約 32.5dB (Set5 データセット)。現在の基準では低性能ですが、深層学習超解像の可能性を示した歴史的なモデルです。
VDSR (2016): 20 層の深い CNN と残差学習 (入力と出力の差分のみを学習) を導入し、SRCNN から 1.5dB 以上の改善を達成しました。深いネットワークが超解像に有効であることを実証しました。
EDSR (2017): Enhanced Deep Super-Resolution の略で、ResNet から Batch Normalization を除去し、残差ブロックを 32 層に拡張した大規模モデルです。NTIRE 2017 チャレンジで優勝し、x2 で PSNR 34.6dB を達成しました。
EDSR の設計原則: (1) BN の除去 (SR では有害)。(2) 残差スケーリング (0.1 倍) で学習安定化。(3) L1 損失関数 (L2 より鮮明な結果)。
Sub-Pixel Convolution (PixelShuffle): ESPCN (2016) で提案された効率的なアップサンプリング手法です。LR 空間で特徴マップを計算し、最後にピクセルシャッフルで HR に変換します。事前拡大が不要で計算効率が大幅に向上し、以降のほぼ全てのモデルで採用されています。
GAN ベース超解像 - SRGAN と ESRGAN
CNN ベースの超解像は PSNR は高いものの、結果が過度に滑らかで「ぼけた」印象になる問題がありました。GAN (Generative Adversarial Network) を導入することで、知覚的に自然でシャープな超解像が実現されました。
SRGAN (2017): Ledig et al. が提案した最初の GAN ベース超解像モデルです。Generator (超解像ネットワーク) と Discriminator (本物/偽物判定ネットワーク) の敵対的学習により、自然な高周波テクスチャを生成します。
損失関数の革新:
- 知覚損失 (Perceptual Loss): VGG ネットワークの中間特徴量の差分。ピクセル単位ではなく「見た目」の類似度を最適化。
- 敵対的損失 (Adversarial Loss): Discriminator を騙すための損失。自然な画像分布に近づける。
- コンテンツ損失: L1/L2 損失。構造の保持に寄与。
ESRGAN (2018): SRGAN の改良版で、以下の改善を導入しました。(1) RRDB (Residual-in-Residual Dense Block) による高性能 Generator。(2) Relativistic GAN (本物と偽物の相対的な判定)。(3) VGG の活性化前の特徴量を使用した知覚損失。PIRM 2018 チャレンジで知覚品質部門 1 位を獲得しました。
PSNR vs 知覚品質のトレードオフ: GAN ベース手法は PSNR では CNN ベース (EDSR 等) に劣りますが、人間の目には明らかに自然に見えます。これは「知覚-歪み (Perception-Distortion) トレードオフ」として知られ、両者を同時に最適化することは理論的に不可能です。用途に応じて、忠実度重視 (医療画像) か知覚品質重視 (写真、動画) かを選択します。
Real-ESRGAN - 実世界の劣化に対応する超解像
Real-ESRGAN (2021) は、実世界の複雑な劣化 (圧縮ノイズ、ぼけ、ダウンサンプリングの組み合わせ) に対応する実用的な超解像モデルです。従来モデルが理想的な劣化 (バイキュービックダウンサンプリングのみ) を前提としていたのに対し、Real-ESRGAN は現実の画像に直接適用可能です。
実世界の劣化モデル: 実際の低解像度画像は単純なダウンサンプリングではなく、以下の劣化が複合的に発生しています。
- ぼけ (レンズ収差、手ブレ、デフォーカス)
- ダウンサンプリング (様々なアルゴリズム)
- ノイズ (センサーノイズ、圧縮ノイズ)
- JPEG 圧縮アーティファクト
- リサイズの繰り返し (SNS での再圧縮)
高次劣化モデル (Second-Order Degradation): Real-ESRGAN は劣化プロセスを 2 段階で適用します。1 段目の劣化 (ぼけ → リサイズ → ノイズ → JPEG) の後に、2 段目の劣化を再度適用することで、SNS での再アップロードや複数回の編集を経た画像の劣化をシミュレートします。
ネットワーク構造: ESRGAN の RRDB をベースに、U-Net 型の Discriminator を採用しています。U-Net Discriminator は局所的な判定と大域的な判定の両方を行い、テクスチャの自然さと全体的な構造の整合性を同時に改善します。
実用性能: x4 超解像で、JPEG 品質 30 の劣化画像に対しても自然な結果を生成します。処理時間は 512 × 512入力で約 200ms (RTX 3080)、CPU では約 15 秒です。アニメ画像に特化した Real-ESRGAN-anime モデルも提供されています。
導入方法: pip install realesrgan で Python パッケージとして利用可能です。コマンドラインツール、Python API、Web UI (Automatic1111) など複数のインターフェースが提供されています。
最新動向 - Diffusion モデルと Transformer ベースの超解像
2023 年以降、拡散モデル (Diffusion Model) と Vision Transformer が超解像分野に革新をもたらしています。GAN ベースを超える品質と安定性を実現する最新手法を紹介します。
SwinIR (2021): Swin Transformer を超解像に適用したモデルです。CNN の局所的な受容野の制限を克服し、画像全体の長距離依存関係を捉えます。EDSR と同等のパラメータ数で PSNR を 0.3-0.5dB 改善し、Transformer ベース超解像の有効性を実証しました。
HAT (Hybrid Attention Transformer, 2023): チャンネルアテンションとウィンドウアテンションを組み合わせたハイブリッドモデルで、SwinIR を 0.3dB 以上上回る PSNR を達成しています。現時点で PSNR ベースの最高性能モデルの 1 つです。
StableSR (2023): Stable Diffusion の事前学習済みモデルを超解像にファインチューニングした手法です。拡散モデルの強力な画像生成能力を活用し、非常にリアルなテクスチャを生成します。ただし、元画像に存在しない細部を「幻覚」として生成するリスクがあり、忠実度が求められる用途には不向きです。
SUPIR (2024): 大規模言語モデル (LLM) と拡散モデルを組み合わせた超解像で、テキストプロンプトで復元の方向性を指示できます。「この画像は屋外の風景写真です」といったコンテキスト情報を与えることで、より適切な細部を生成します。
実務での選択指針:
- 速度重視: Real-ESRGAN (GPU 200ms)
- PSNR 重視: HAT (GPU 500ms)
- 知覚品質重視: StableSR (GPU 3-5 秒)
- バランス: SwinIR (GPU 300ms)
実務導入ガイド - モデル選択からデプロイまで
超解像技術を実務に導入する際の具体的な手順、モデル選択の判断基準、デプロイ時の注意点を解説します。
用途別モデル選択:
- E コマース商品画像: Real-ESRGAN (x2)。商品の細部を自然に復元し、JPEG 圧縮劣化にも対応。
- 監視カメラ映像: EDSR または SwinIR。忠実度が重要で、存在しない細部の生成は避けるべき。
- 古い写真の復元: Real-ESRGAN + 顔復元モデル (GFPGAN)。顔の細部は専用モデルで処理。
- アニメ・イラスト: Real-ESRGAN-anime。線画のシャープさとフラットな色面を保持。
- 医療画像: EDSR (L1 損失のみ)。GAN は使用しない。忠実度が最優先。
デプロイ時の考慮事項:
- GPU メモリ: x4 超解像で 4K 出力する場合、入力 1080p でも推論時に 4-6GB の VRAM が必要。タイル分割処理で VRAM 使用量を制御可能。
- バッチ処理: 大量画像の処理では、タイル分割 + バッチ推論で GPU 利用率を最大化。
- ONNX 変換: PyTorch モデルを ONNX に変換し、TensorRT で最適化すると推論速度が 2-3 倍向上。
タイル分割処理: 大きな画像を一度に処理するとメモリ不足になるため、重なりを持つタイルに分割して処理し、結果を合成します。重なり幅は 32-64 ピクセルが一般的で、重なり部分はフェザリングでブレンドします。
品質管理: 超解像の結果は入力画像の品質に大きく依存します。極端に劣化した画像 (JPEG 品質 10 以下、解像度 64x64 以下) では、どのモデルでも満足な結果は得られません。入力品質の下限を設定し、それ以下の画像には超解像を適用しない判断も重要です。