
このリポジトリには、画像解像度エンハンサーをインスタンス化および展開するコードが含まれています。このモデルでは、写真と現実的な詳細を生成しながら、ピクセル化された画像を4倍アップスケールすることができます。
GANは、このGitHubリポジトリとこの研究記事に基づいています。
このモデルは、OpenImages V4データセットの600,000枚の画像でトレーニングされ、モデルファイルはIBM Cloudオブジェクトストレージでホストされています。このリポジトリのコードは、モデルをDockerコンテナ内のWebサービスとして展開します。このリポジトリは、IBM開発者モデルアセットエクスチェンジの一部として開発され、パブリックAPIはIBMクラウドを搭載しています。
| ドメイン | 応用 | 業界 | フレームワーク | トレーニングデータ | 入力データ形式 |
|---|---|---|---|---|---|
| ビジョン | 超解像度 | 一般的な | Tensorflow | OpenImages V4 | 画像(RGB/HWC) |
| set5 | 著者のsrgan | このsrgan |
|---|---|---|
| psnr | 29.40 | 29.56 |
| ssim | 0.85 | 0.85 |
| Set14 | 著者のsrgan | このsrgan |
|---|---|---|
| psnr | 26.02 | 26.25 |
| ssim | 0.74 | 0.72 |
| BSD100 | 著者のsrgan | このsrgan |
|---|---|---|
| psnr | 25.16 | 24.4 |
| ssim | 0.67 | 0.67 |
この実装のパフォーマンスは、SET5、SET14、およびBSD100の3つのデータセットで評価されました。 PSNR(ピーク信号対ノイズ比)およびSSIM(構造類似性指数)メトリックが評価されましたが、この論文では、MOS(平均意見スコア)が最も好ましいメトリックとして説明されています。本質的に、SRGAN実装は、より良いPSNRまたはSSIMスコアをトレードして、結果として人間の目に魅力的です。これは、より鮮明で現実的な詳細を備えた出力画像のコレクションにつながります。
注:紙のSRGANは350Kイメージネットサンプルで訓練されましたが、このSRGANは600K OpenImages V4写真で訓練されていました。
| 成分 | ライセンス | リンク |
|---|---|---|
| このリポジトリ | Apache 2.0 | ライセンス |
| モデルの重み | Apache 2.0 | ライセンス |
| モデルコード(サードパーティ) | mit | ライセンス |
| サンプルをテストします | CC by 2.0 | Asset Readme |
| CC0 | Asset Readme |
docker :Dockerコマンドラインインターフェイス。システムのインストール手順に従ってください。APIのサービングモデルを自動的に開始するDocker画像を実行するには、実行します。
$ docker run -it -p 5000:5000 quay.io/codait/max-image-resolution-enhancer
これにより、事前に構築された画像がquay.ioコンテナレジストリから引っ張られます(または、既にローカルでキャッシュされている場合は既存の画像を使用して)実行します。モデルをローカルでチェックアウトして構築する場合は、以下のローカルステップに従うことができます。
このチュートリアルでは、OpenShift WebコンソールまたはOpenShiftコンテナプラットフォームCLIの指示に従って、 quay.io/codait/max-image-resolution-enhancer codait/max-image-resolution-enhancerを画像名として指定することにより、モデルザーブマイクロサービスをRed Hat OpenShiftに展開できます。
Quayの最新のDocker画像を使用して、Kubernetesにモデルを展開することもできます。
Kubernetesクラスターで、次のコマンドを実行します。
$ kubectl apply -f https://github.com/IBM/max-image-resolution-enhancer/raw/master/max-image-resolution-enhancer.yaml
このモデルは、ポート5000で内部で利用可能になりますが、 NodePortから外部からアクセスすることもできます。
このMaxモデルをIBMクラウドで生産に展開する方法に関するより精巧なチュートリアルは、こちらをご覧ください。
このリポジトリをローカルにクローンします。端末で、次のコマンドを実行します。
$ git clone https://github.com/IBM/max-image-resolution-enhancer.git
ディレクトリをリポジトリベースフォルダーに変更します。
$ cd max-image-resolution-enhancer
Docker画像をローカルに構築するには、実行してください。
$ docker build -t max-image-resolution-enhancer .
必要なすべてのモデル資産は、ビルドプロセス中にダウンロードされます。現在、このDocker画像はCPUのみであることに注意してください(後でGPU画像のサポートを追加します)。
APIのサービングモデルを自動的に開始するDocker画像を実行するには、実行します。
$ docker run -it -p 5000:5000 max-image-resolution-enhancer
APIサーバーは、インタラクティブなSwaggerドキュメントページを自動的に生成します。 http://localhost:5000にアクセスしてロードします。そこから、APIを探索し、テストリクエストを作成することもできます。
model/predictエンドポイントを使用して、テスト画像をロードします( samples/test_examples/low_resolutionフォルダーのテスト画像のいずれかを使用できます)。高解像度の出力画像を返します。
理想的な入力画像は、100x100から500x500の間の解像度を持つPNGファイルであり、できればキャプチャ後の処理や派手な色がありません。このモデルは、ピクセル化された画像(低DPI)から詳細を生成することができますが、「ぼやけた」画像を修正することはできません。
左:入力画像(128×80)。右:出力画像(512×320)

たとえば、コマンドラインでテストすることもできます。
$ curl -F "image=@samples/test_examples/low_resolution/food.png" -XPOST http://localhost:5000/model/predict > food_high_res.png
上記のコマンドは、低解像度のfood.pngファイルをモデルに送信し、高解像度の出力画像をルートディレクトリのfood_high_res.pngファイルに保存します。
Flask APIアプリをデバッグモードで実行するには、 config.pyを編集して、アプリケーション設定の下でDEBUG = Trueを設定します。その後、Docker画像を再構築する必要があります(ステップ1を参照)。
生産時にモデルを実行するときは、 DEBUG = Falseを設定することを忘れないでください。
Dockerコンテナを停止するには、端末にCTRL + Cを入力します。
model/predictエンドポイントを呼び出すと、メッセージがKilledでDockerコンテナが殺されますこれは、2 GBへのDockerのメモリ割り当てのデフォルト制限のために引き起こされる可能性があります。 Dockerデスクトップアプリケーションの下の
Preferencesメニューに移動します。スライダーを使用して、利用可能なメモリを8 GBに増やし、Dockerデスクトップを再起動します。
このモデルは、基本的に「薄い空気から」詳細を生成します。何もないところから何かを作成することは、仮定をすることなく不可能です。ネットワークは、低解像度の画像の要素を認識しようとします。そこからは、現実(人間の目|超解像度)がどのように見えるかを推測できます。ピクセルのグループが、画像の内容に関連しない観察に強く似ている場合、「物理的に可能」ではない結果の観察につながる可能性があります。
たとえば、低解像度の画像の白いピクセルは雪片に変換された可能性がありますが、元の写真は砂漠で撮影された可能性があります。この例は想像上のものであり、実際には観察されていません。
一部の画像でアーティファクトを観察することは、あらゆるニューラルネットワークがトレーニングデータの技術的な制限と特性の影響を受けるため、残念ながら避けられません。
最良の結果は以下で達成されることに留意してください。
- PNG画像
- 十分にズームインされた画像。プロセス中に、ネットワークはピクセルのブロックを一緒にグループ化します。ブロックにネットワークが生成するよりも多くの詳細が含まれている場合、結果は偽りになります。
- 自然光の下で撮影された画像、フィルターなし、明るい色や派手な色はほとんどありません。ニューラルネットワークは、編集された画像で訓練されていませんでした。
- ネットワークを複数の可能性と混同しないほど十分に高解像度を持つ画像(たとえば、非常に低解像度の画像の唯一のピクセルは、車全体、人、サンドイッチを表すことができます。)
- このモデルは、ピクセル化された画像(低DPI)から詳細を生成することができますが、「ぼやけた」画像を修正することはできません。
モデル資産交換プロジェクトに貢献することに興味がある場合、またはクエリがある場合は、こちらの指示に従ってください。