AI画像アップスケール完全ガイド:仕組みと必要になる場面

どの画像アップスケーラーも、同じ問題に向き合っています。元の画像にないピクセルを作らなければならないことです。幅1000ピクセルの写真を4000ピクセルに拡大すると、ピクセル数は16倍になり、16個のうち15個は新しく作る必要があります。ツールがそのピクセルをどう作るかが、甘くぼやけた拡大と、シャープに見える拡大の違いのすべてです。この記事では、昔ながらの方法がどうやっているのか、AIの超解像がどうやっているのか、私たちのようなブラウザのアップスケーラーがあなたのグラフィックボードでニューラルネットワークをどう動かしているのか、そして誰かの言葉をうのみにせずに結果をどう測るのかを、順を追って説明します。

昔ながらのリサイズ:周りのピクセルの平均

ニューラルネットワーク以前の拡大は、すべて補間の一種でした。新しいピクセルを、周りにある元のピクセルから推測する方法です。

  • ニアレストネイバーは、いちばん近い元のピクセルをコピーします。速く、くっきりした輪郭も残りますが、すべてが目に見える四角になります。ドット絵はあえてこの方法で拡大します。
  • バイリニアは、近くの4つのピクセルを混ぜます。なめらかですが、甘くなります。
  • バイキュービックは、周りの16ピクセルを使い、輪郭のコントラストを少し多めに残す曲線で計算します。ほとんどの編集ソフトやブラウザが「高画質」なリサイズで標準的に使っている方法です。
  • ランチョスは、さらに広い範囲を使って輪郭をもう少しシャープに保ちますが、強い輪郭のそばにうっすら波のような模様が出ます。

どの方法にも共通の限界があります。見ているのは数字だけで、その数字が何を表しているかは見ていないことです。暗いまつげと明るい肌の境目も、バイキュービック補間にとっては値が急に変わる場所にすぎず、できることといえば、その段差をなだらかな坂でつなぐことくらいです。その坂こそ、拡大した写真で必ず目にするぼやけです。どう調整しても直りません。正しい場所にシャープな輪郭を描くための情報は、周りのピクセルには入っていないからです。

超解像:細部がどう見えるかを学ぶ

AIによるアップスケール、正式には単一画像超解像と呼ばれる方法は、別のやり方をとります。決まった式の代わりに、たくさんの例となる画像から、低解像度の画像にはふつうどんな細部があるのかを学んだニューラルネットワークを使います。

学習の考え方はシンプルです。研究者は高解像度の写真を大量に集め、1枚ずつ縮小して、小さい版から元の写真を再現するようネットワークに求めます。間違えるたびに、内部のパラメーターが少しずつよい答えのほうへ調整されます。何百万もの例を経て、ネットワークはパターンを身につけます。輪郭がどう続くか、髪や葉や文字を近くで見るとどうなっているか、2色の間のぼやけた段差がふつうどんなシャープな境目になるか、といったことです。

この研究の流れの主な節目をいくつか挙げます。

  • SRCNN(2014年)は、小さな畳み込みネットワークが、一般的なベンチマークでバイキュービック補間をはっきり上回れることを示しました。
  • ESRGAN(2018年)は、学習中にもう1つのネットワークを加えました。本物の写真と拡大された写真を見分けようとする「識別器」です。アップスケーラーは識別器をだませたときに評価されるので、無難でなめらかな平均ではなく、リアルな質感を作る方向へ結果が押しやられます。
  • Real-ESRGAN(2021年)は、ぼかし、ノイズ、JPEG圧縮、繰り返しのリサイズといった、現実的な劣化を同時にいくつも加えた画像で学習しました。そのため、人工的に縮小しただけのきれいな画像よりも、実際の写真にうまく対応できます。Upscaylのようなデスクトップアプリが使っているのは、このモデルのファミリーです。

識別器という考え方が、今のアップスケーラーの強みと、いちばんのクセの両方を説明しています。そう学習したので、それらしい質感を作れます。でも、それらしいことと本当であることは違います。元の画像に十分な情報がないとき、ネットワークはその穴を、似た画像にふつうあるもので埋めます。それらしい肌、それらしい布、それらしい葉です。

「2倍」「4倍」のモデルとは

超解像ネットワークは、たいてい決まった倍率で学習されます。4倍モデルは入力の4倍の幅と高さを、2倍モデルは2倍を必ず出力します。別のサイズにしたいときは、いちばん近いモデルで処理してから結果をリサイズします。私たちのアップスケーラーが2倍と4倍だけを用意しているのはそのためです。それぞれが対応するモデル(ESRGAN-slimの2倍または4倍)の1回の処理にあたり、正確なサイズに合わせるための小さな調整は、そのあとの普通のリサイズで行います。

4倍の結果をもう一度4倍モデルにかけても、ほとんど効果がないのも同じ理由です。2回目の処理は、1回目で作り出した質感を本物の入力として扱い、その上にさらに作り出してしまいます。

ブラウザでニューラルネットワークを動かす

サーバーで処理するアップスケーラーは、専用のグラフィックボードでモデルを動かします。ブラウザのアップスケーラーは、訪れた人がたまたま使っているパソコンで、Webの標準技術を使って動かなければなりません。私たちのものは、3つの要素でできています。

  • モデル:ESRGANのコンパクト版であるESRGAN-slim。UpscalerJSライブラリで配布されていて、一度ダウンロードすればブラウザのキャッシュに残せるほど小さなものです。
  • エンジン:TensorFlow.js。WebGLを通じて、ネットワークの計算をグラフィックボードで行います。
  • タイル分割:画像を、数ピクセルずつ重なる128×128ピクセルの小片に切り分け、1つずつ拡大してから、つなぎ合わせます。こうするとグラフィックスメモリの使用量がふつうのノートパソコンでも足りるほど小さく収まり、重なりがあるので継ぎ目も見えません。

処理時間が倍率ではなく元の画像の大きさに応じて増えるのは、このタイル分割のためです。テストでは、モデルの読み込み後、480ピクセルの画像の4倍拡大は3〜6秒、170万画素の写真の2倍拡大は約20秒でした。その回の最初の処理は、モデルのダウンロードと「ウォームアップ」があるので遅くなります。

ブラウザには、デスクトップアプリにはない制限もあります。モバイルブラウザはWebページにモデルを動かせるだけのグラフィックスメモリを与えないので、スマホやタブレットでは、私たちのツールはクラシックエンジン(段階的な高画質リサイズと補正スライダー)を使います。パソコンでは、AIで処理できる元画像は約1000万画素まで、仕上がりは最大4Kを想定しています。一般的なパソコンのブラウザでも安定して扱えるサイズです。

違いを測る

「シャープになった」と言うのは簡単です。私たちは測りました。ポートレートを、古い低解像度の写真の代わりとして480×480ピクセルに縮小し、2つの方法で4倍の1920×1920に拡大しました。ブラウザ自身の高画質なリサイズと、AIモデルです。そして両方の、顔の同じ480×480の範囲で、ラプラシアンの分散(画像に細かい輪郭のコントラストがどれだけあるかを表す、よく使われる指標)を使って輪郭の細部を測りました。

普通のリサイズは3.0、AIの結果は34.7で、輪郭の細部が約11倍でした。画像を見れば数字の意味がわかります。まつげは再び1本ずつに分かれ、歯の輪郭はきれいで、髪の生え際はぼんやりしたしみではなく質感を持っていました。一方でクセも見えました。肌は本物の高解像度写真よりなめらかで、軽くレタッチしたような印象でした。

緑の森の中の滝。左は低解像度でぼやけた状態、右はくっきりした状態

測り方について一言。研究論文では、元の画像にピクセル単位でどれだけ近いかを評価するPSNRという数字がよく使われます。識別器を使って学習したモデルは、人の目にはよく見えても、なめらかなモデルよりPSNRが少し低くなるのがふつうです。少しずれた場所にあるリアルな質感は、無難なぼやけより点数を大きく下げるからです。そのため私たちは、1つのベンチマークの数字ではなく、輪郭の細部と画像そのものを見ました。

写真によって結果が大きく違う理由

  • モデルがよく知っている内容(顔、髪、文字、身近な物、自然の質感)は、いちばんきれいに仕上がります。
  • 圧縮による劣化はモデルを混乱させます。JPEGのブロックも「細部」なので、そのまま拡大されてしまうことがあります。どんな設定よりも、いちばんきれいなコピーから始めることが大事です。
  • ぼやけは解像度の不足ではなく、情報の不足です。ピンぼけの写真を拡大すれば、大きなピンぼけの写真になります。
  • ごく小さな被写体は、モデルが手がかりにできる情報が少なすぎるので、出てくるのはほとんどがモデル自身の推測です。
  • 透過には特別な扱いが必要です。モデルは色しか見ないからです。テスト中、私たちのアップスケーラーが透過背景を黒くしてしまうことがわかりました。今は、拡大の前に空白の部分をいちばん近い輪郭の色で埋め、拡大後に元の透明度を戻しています。

なぜ目がだまされるのか

最後に、そもそもなぜこれがうまくいくのかについて。私たちの目は、シャープさを主に輪郭、つまり明るいところと暗いところの境目で判断しています。輪郭がくっきりしていて質感が単純な画像はシャープに見え、質感は正確でも輪郭が甘い画像はぼやけて見えます。超解像モデルはこの性質を利用しています。人が見るところに力を注ぐので、AIの結果は、含まれている情報から厳密に言えるよりもシャープに見えることがあるのです。

実際に使うときは

仕組みがわかると、いくつかの実用的な習慣が見えてきます。いちばんきれいで大きな元の写真をモデルに渡すこと。必要なサイズに届く倍率を選ぶこと。倍率を1段上げるごとに増えるのは作り話で、真実ではありません。最初はシャープネスを0のままにすること。モデルがすでに輪郭を作り直しているからです。大事な部分を100%で確認すること。そして写真はJPGかWebPで保存すること。テストでは、2倍の結果がPNGで6.85MB、WebPで337KBで、見た目の違いはありませんでした。

具体的な用途については、ガイドでさらに詳しく説明しています。印刷用に画像の解像度を上げる方法、画面用に画像を4Kにアップスケールする方法、そして拡大と補正の違いです。試してみたいなら、AI画像アップスケーラーはすべてブラウザの中で動き、写真はどこにもアップロードされません。

よくある質問

普通のリサイズで画像がぼやけるのはなぜ?

補間は新しいピクセルを周りのピクセルから推測するので、くっきりした輪郭が2つの値の間のなだらかな坂になってしまいます。輪郭をシャープに描くための情報は、周りのピクセルにはないのです。

AIによる拡大は本物の細部ですか?

学習にもとづく推定です。輪郭や形は説得力をもって作り直されますが、毛穴や砂利のような細かくランダムな質感は、取り戻されるのではなく、それらしく作り出されます。

ブラウザのアップスケーラーがタイルに分けて処理するのはなぜ?

画像を少しずつ重なる128×128ピクセルの小片に分けて処理することで、ふつうのノートパソコンでもグラフィックスメモリが足り、重なりがあるので継ぎ目も見えません。

← 記事一覧

ブラウザで使える無料の画像ツール

高画質化、背景削除、メタデータ削除、トリミング、圧縮、QRコード作成。アップロード不要、登録不要、透かしなし。