単一画像超解像におけるディープラーニングの応用: SRCNN、知覚損失、SRResNet

単一画像超解像におけるディープラーニングの応用: SRCNN、知覚損失、SRResNet

[[209375]]

単一画像の超解像度では、品質の低下を最小限に抑えながら小さな画像のサイズを拡大します。この技術は、衛星や航空宇宙の画像分析、医療画像処理、圧縮画像/ビデオの強化、その他のアプリケーションなど、幅広い用途に使用されています。この記事では、3 つのディープラーニング モデルを使用してこの問題に対処し、その限界と開発の方向性について説明します。

開発結果は Web アプリケーションの形式で展開され、この記事で紹介した方法のほとんどをカスタム イメージでテストできます。また、次の例もご覧ください: http://104.155.157.132:3000/。

単一画像超解像:問題の説明

私たちの目標は、低解像度の画像を撮影し、対応する高解像度の画像の評価を作成することです。単一画像の超解像度は逆の問題です。つまり、同じ低解像度画像から複数の高解像度画像を生成できます。たとえば、縦縞または横縞を含む 2×2 ピクセルのサブイメージがあるとします (図 1)。ストライプの向きに関係なく、これらの 4 つのピクセルは、解像度が 4 分の 1 に低減された画像内の 1 つのピクセルに対応します。現実のリアルな画像では、人は多数の類似した問題を解決する必要があり、その作業は困難になります。

図 1: 左から右へ: 真の HR 画像、対応する LR 画像、および MSE 損失を最小化するようにトレーニングされたモデルの予測。

まず、モデルを評価および比較するための定量的な品質チェックを見てみましょう。実装されたモデルごとに、非可逆圧縮コーデックの再構成品質を測定するために一般的に使用される、ピーク信号対雑音比 (PSNR) と呼ばれるメトリックを計算します。このメトリックは、超解像度研究で使用される事実上の標準です。歪んだ画像が元の高品質な画像からどれだけ逸脱しているかを測定します。この論文では、PSNR は、画像の最大可能ピクセル値 (信号強度) と、元の画像とその評価バージョン (ノイズ強度) 間の最大平均二乗誤差 (MSE) の対数比です。

PSNR 値が大きいほど再構成効果は高くなるため、PSNR を最大化すると目的関数の MSE は自然に最小化されます。このアプローチは 3 つのモデルのうち 2 つに使用しました。私たちの実験では、入力画像の解像度(幅と高さ)を 4 倍にするようにモデルをトレーニングします。この要因に加えて、小さな画像の解像度を上げることさえ困難になります。たとえば、解像度が 8 倍の画像には 64 倍のピクセルがあるため、元の形式で保存するには 64 倍のメモリが必要になり、これはトレーニング中に実行されます。私たちは、文献で一般的に使用されている Set5、Set14、BSD100 ベンチマークでモデルをテストしました。これらの論文では、これらのデータセットでテストされたモデルの結果を引用しており、その結果を以前の著者の結果と比較することができます。

これらのモデルは PyTorch (http://pytorch.org/) に実装されています。

なぜディープラーニングを選ぶのか?

画像の解像度を上げる最も一般的な手法の 1 つは補間です。この方法は実装が簡単ですが、視覚的な品質の点ではまだ多くの欠点があります。たとえば、多くの詳細 (鋭いエッジなど) は保持できません。

図 2: 最も一般的な補間方法によって生成されたぼやけた画像。上から順に、最近傍補間、双線形補間、双三次補間です。画像の解像度が4倍に向上しました。

より洗練されたアプローチでは、特定の画像の内部類似性を活用したり、低解像度の画像とそれに対応する高品質画像のデータセットを使用して、2 つの画像間のマッピングを効果的に学習したりします。インスタンスベースの SR アルゴリズムの中で、スパース コーディング法は最も人気のある方法の 1 つです。

このアプローチでは、低解像度の画像を中間スパース表現にマッピングできる辞書を見つける必要があります。さらに、HR辞書を学習し、高解像度画像の評価を保存できるようになりました。このプロセスには通常、複数のステップが含まれますが、すべてを最適化できるわけではありません。理想的には、これらのステップを 1 つに統合して、すべての部分を最適化できるようにしたいと考えています。この効果は、スパースコーディングにヒントを得たアーキテクチャを持つニューラル ネットワークを使用することで実現できます。

詳細については、http://www.irisa.fr/prive/kadi/Gribonval/SuperResolution.pdf を参照してください。

SRCNN

SRCNN は、従来の手法を超える初のディープラーニング手法です。これは、画像パッチの抽出と表現、非線形マッピング、最終的な再構築の 3 つの畳み込み層で構成される畳み込みニューラル ネットワークです。

画像は、ネットワークに送られる前にバイキュービック補間によってアップサンプリングされる必要があり、その後 YCbCr カラー スペースに変換されますが、ネットワークは輝度チャネル (Y) のみを使用します。次に、ネットワークの出力は補間された CbCr チャネルと結合され、最終的なカラー画像が出力されます。このステップを選択するのは、色の変化 (CbCr チャネルに保存されている情報) ではなく、明るさ (Y チャネル) のみに関心があるためです。基本的な理由は、人間の視覚は色の違いよりも明るさの変化に敏感だからです。

SRCNN のトレーニングは難しいことがわかりました。これはハイパーパラメータの変化に非常に敏感であり、論文で提示された設定 (最初の 2 つのレイヤーの学習率は 10-4、最後の 2 つのレイヤーの学習率は 10-5、SGD オプティマイザーを使用) では、PyTorch 実装で最適ではない結果になります。学習率が異なると、出力に若干の変化が見られます。最終的に、各レイヤーの学習率を 10-5 にし、Adam オプティマイザーを使用すると、パフォーマンスが大幅に向上する設定であることがわかりました。最終的なネットワークは、元の論文と同じデータセット(91 枚の画像)からの 14,000 枚の 32×32 サブ画像でトレーニングされます。

図 3: 左上: バイキュービック補間、右上: SRCNN、左下: 知覚損失、右下: SRResNet。 SRCNN、知覚損失、SRResNet 画像は、対応するモデルによって出力されます。

知覚の喪失

SRCNN は標準的な方法よりも優れていますが、まだ改善の余地は大きく残っています。前述したように、ネットワークは不安定なので、MSE 向けに最適化することが最善の選択肢ではないのではないかと考えるかもしれません。

MSE を最小化することで得られた画像が滑らかすぎることは明らかです。 (MSEは高解像度画像と同様の方法で画像を出力するため、低解像度画像が生成されます[図1])。 MSE は、モデル出力と実際の画像間の知覚的な違いを捉えることができません。 2 枚の画像のうち 2 枚目は 1 枚目と同じコピーですが、いくつかのピクセルが変更されているとします。人間にとって、レプリカはオリジナルとほとんど区別がつきませんが、このようなわずかな変更でも PSNR が大幅に低下する可能性があります。

特定の画像の知覚コンテンツをどのように保存するか? 同様の問題がニューラル スタイル転送でも発生し、知覚損失が解決策の 1 つです。 MSE を最適化しますが、モデル出力を使用する代わりに、事前トレーニング済みの畳み込みニューラル ネットワークから抽出された高レベルの画像特徴表現を使用できます (詳細については、https://github.com/pytorch/vision/blob/master/torchvision/models/vgg.py#L81 を参照してください)。この方法の基礎は、画像分類ネットワーク (VGG など) がオブジェクトの詳細に関する情報を特徴マップに格納することです。私たちは、強化された画像内のオブジェクトを可能な限りリアルにしたいと考えています。

損失関数を変更するだけでなく、ネットワーク アーキテクチャも再構築する必要があります。このモデルは SRCNN よりも深く、残差ブロックを使用し、ほとんどの処理を低解像度の画像で実行します (トレーニングと推論を高速化します)。プロモーションもネットワーク内で行われます。この論文 (https://arxiv.org/abs/1603.08155) では、転置畳み込み (逆畳み込みとも呼ばれる)、3×3 畳み込みカーネル、ストライド 2 を使用しています。このモデルによって出力される「偽の」画像は、チェッカーボード フィルター効果に似ています。この影響を軽減するために、4×4 畳み込みによる逆畳み込み、最近傍補間、ストライド 1 の 3×3 畳み込み層も試しました。最終的には後者が最良の結果を達成しましたが、それでも「偽の」画像を完全には削除できませんでした。

論文で説明されているプロセスと同様に、私たちのトレーニング パイプラインは、MS-COCO の約 1 万枚の画像からランダムにサンプリングされた数枚の 288×288 画像からなるデータセットで構成されています。学習率を 10-3 に設定し、Adam オプティマイザーを使用します。上記の論文とは異なり、後処理(ヒストグラムのマッチング)は改善をもたらさないため省略します。

SRResNet

PSNR パフォーマンスを最大化するために、標準ベンチマークで最先端の結果を達成する SRResNet ネットワークを実装することにしました。元の論文 (https://arxiv.org/abs/1609.04802) では、より高周波の詳細を修復できる拡張方法について言及されています。

上記の残差ネットワークと同様に、SRResNet の残差ブロック アーキテクチャは、この記事 (http://torch.ch/blog/2016/02/04/resnets.html) に基づいています。小さな変更点が 2 つあります。1 つは、SRResNet が ReLU の代わりに Parametric ReLU を使用し、ReLU が一部の負の係数を適応的に学習できるように学習可能なパラメーターを導入していることです。もう 1 つの違いは、SRResNet が画像アップサンプリング メソッドを使用し、SRResNet がサブピクセル畳み込みレイヤーを使用していることです。詳細については、https://arxiv.org/abs/1609.07009 を参照してください。

SRResNet によって生成された画像は、論文で提示された結果とほとんど区別がつきません。トレーニングには 2 日間かかり、その間、学習率 10-4 の Adam オプティマイザーを使用しました。使用されるデータセットは、知覚損失ネットワークと同様に、MS-COCO からの 96×96 のランダム画像で構成されています。

今後の仕事

単一画像の超解像には他にも有望なディープラーニング手法がいくつかありますが、時間の制約によりすべてをテストすることはできませんでした。

この最近の論文 (https://arxiv.org/abs/1707.02921) では、修正された SRResNet アーキテクチャを使用することで非常に優れた PSNR 結果が得られたことが述べられています。著者らは残差ネットワークからバッチ正規化を削除し、残差層の数を 16 から 32 に増やしました。その後、ネットワークは NVIDIA Titan Xs で 7 日間トレーニングされました。 SRResNet を 2 日間トレーニングし、より高速な反復とより効率的なハイパーパラメータ調整を通じて結果を得ましたが、上記のアイデアを実現することはできませんでした。

私たちの知覚損失実験は、PSNR が超解像ネットワークを評価するための適切な指標ではない可能性があることを示しています。さまざまな種類の知覚損失についてさらに研究する必要があると考えています。いくつかの論文を調べましたが、ネットワーク出力の VGG 特徴マップ表現と真の値の間の単純な MSE しか見つかりませんでした。この場合、なぜ MSE (ピクセル単位の損失) が適切な選択であるかは明らかではありません。

もう一つの有望な方向性は、生成的敵対ネットワークです。この論文 (https://arxiv.org/abs/1609.04802) では、SRResNet を SRGAN アーキテクチャの一部として使用して拡張しています。ネットワークによって生成された画像には、動物の毛皮などの高頻度の詳細が含まれています。これらの画像はよりリアルに見えますが、PSNR 評価データはあまり良くありません。

図4: 上から下へ: SRResNet実装によって生成された画像、SRResNet拡張機能によって生成された画像、元の画像

結論は

この記事では、単一画像の超解像のための 3 つの異なる畳み込みニューラル ネットワークを使用した実験について説明します。下の図は結果をまとめたものです。

図5: この記事で議論したモデルの長所と短所

標準的なベンチマーク データセットで PSNR を使用して測定した場合、単純な 3 層 SRCNN でも、ほとんどの非機械学習手法よりも優れています。知覚損失のテストにより、このメトリックはモデルのパフォーマンスを評価するのに適していないことが判明しました。見栄えの良い画像を出力できますが、PSNR を使用して評価すると、バイキュービック補間アルゴリズムによって出力された画像よりも劣ります。最後に、SRResNet を再実装し、ベンチマーク データセットで現在の最先端の結果を再現しました。

<<:  Python の高レベル自然言語処理ライブラリである SpaCy は、世界最速の構文解析ツールとして知られています。

>>:  ビッグデータの時代では、ソフトウェアエンジニアは徐々に減少し、アルゴリズムエンジニアが増加しています。

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

女性用メイクアップムスク!超楽しいモデルStyleCLIPがオープンソースになりました。急いで自分の顔を変えてみましょう

[[421561]]マスク氏は科学研究に本当に多大な貢献をしてきました!最近、イスラエルの研究者が新...

8 クイーン問題を解く C# アルゴリズムの簡単な分析

8つのクイーンの問題の説明: 8 クイーン問題は古くからある有名な問題であり、バックトラッキング ア...

[文字列処理アルゴリズム] 入力文字列の各単語の順序を逆にするアルゴリズム設計とCコード実装

1. 要件の説明文字列を入力し、文字列内の単語を逆順に組み立てて出力するプログラムを作成します。たと...

人工知能は物流の自動化の方法を変え、労働集約型産業に革新をもたらすだろう

自動化はテクノロジーを利用して、人間がより多くのタスクを完了できるようにします。物流においては、自動...

...

TensorFlow レビュー: 最高のディープラーニング ライブラリ、そして今も進化中

[51CTO.com クイック翻訳] バージョン r1.5 のリリースにより、Google のオープ...

ソフトウェア配信における機械学習の活用方法

現代のほとんどのソフトウェア チームにとって、ソフトウェアの配信は継続的なプロセスです。ソフトウェア...

新しいAIシステムが地震を正確に予測できるようになりました

科学者たちは地震を正確に予測できる人工知能(AI)システムを開発した。これは自然災害に備え、人命を救...

2019年、AI技術は製造業が小さな努力で大きな成果を達成するのを助けるだろう

[[251579]] 2019 年には、新世代の人工知能 (AI) ソリューションが注目を集めるでし...

...

Alibaba DAMO Academyが2019年のトップ10テクノロジートレンドを発表:AI、ブロックチェーンなど

Alibaba DAMO Academy は、2019 年のトップ 10 テクノロジー トレンド予測...

Go-OpenAI を使用して ChatGPT を簡単に呼び出し、無限の創造性を解き放ちましょう。

今日は、go-openai を使用して chatGPT を呼び出すという興味深いトピックを皆さんと共...

ほんの数行の Python コードで、将来の子供がどのような外見になるかを予測できますか?強力な人工知能

今回はBaidu Smart Cloudの顔認識機能とPythonを組み合わせて実験してみました。結...

1つのモデルで8つの視覚タスクを処理し、1つの文で画像と動画を生成できます。

[[437247]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitA...