本記事ではShape from Blurと呼ばれる機械学習手法を用いて、ぼやけた画像から3Dオブジェクトを認識し鮮明化した画像を生成する方法を紹介します。
Shape from Blurとは
Shape from Blurは物体の高速な動きによってオブジェクトがぼやけた画像から、オブジェクトの3D形状、テクスチャ、及びモーションを再構築する手法です。
イメージが付きにくいと思いますので出力結果をご覧ください。
出典: rozumden/ShapeFromBlur |
上図のInputsは、ぼやけた(Blur)オブジェクトを含む画像と、オブジェクトを含まない背景画像の2画像です。
Shape from
Blurは、この2画像を入力すると、3Dオブジェクトの形状や動きテクスチャなどを再構築して画像を出力します。このGIFはフレームごとに鮮明化された画像をつなげてGIFにしたものです。
2D画像のBlur除去が一般的ですが、この手法は3Dオブジェクトを対象としており、オブジェクトの動きによるBlurを再構築する点が興味深いですね。
また、ぼやけたオブジェクトを含まない背景画像ですが準備が難しい場合があります。
その際には下記のような手法でぼやけたオブジェクトを画像から消してしまうのも一つの手かもしれません。
[Lama] 機械学習で写真から人物を消す方法
DeepLearningによる画像修復手法であるLamaを使って画像から障害物を削除する方法を紹介しています。またマスク画像の作成方法も解説しています。
Shape from Blurの導入手順
セットアップ1: conda環境構築
それでは早速、開発環境にShape from Blurをセットアップしていきます。
動作確認は下記の環境で行っています。
OS: Ubuntu 18.04.3 LTS
GPU: GeForce GTX 1080
なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。
おすすめの書籍
[初心者向け] Pythonで機械学習を始めるまでに読んだおすすめ書籍一覧
本記事では、現役機械学習エンジニアとして働く筆者が実際に読んだ書籍の中でおすすめの書籍をレベル別に紹介しています。
おすすめのオンライン講座
[初心者向け] 機械学習がゼロから分かるおすすめオンライン講座
本記事では、機械学習エンジニアとして働く筆者が、AI・機械学習をまったく知らない方でも取り組みやすいおすすめのオンライン講座をご紹介しています。
それでは、Shape from
Blurをインストールしていきます。他の機械学習環境に影響を与えないためにMinicondaの仮想環境上に構築していきます。Minicondaのインストール手順は公式ドキュメントをご参照ください。
conda環境構築手順を下記に記載します。Shape from
Blurの動作要件は下記の通りです。
- kaolin>=0.9.0
- kornia>=0.5.10
kaolinのインストールには若干注意が必要です。
こちらのGETTING STARTEDには
version1.5以上、1.7.1以下のtorchが必要と記載されていますが、公式のGithubにはversion1.5以上、1.9.0以下と記載されています。インストレーションガイドの更新が追いついていないと思われるためGithubの方を確認するようにしてください。
それではセットアップを始めていきます。
conda環境を構築し、kaolinのインストール、Shape from
Blurのインストールの順に行います。
続いてShare from Blurをインストールします。
以上で、Shape from Blurの環境構築は完了です。
Shape from Blur(鮮明化)実行
それでは、さっそく鮮明化(3DオブジェクトのBlur除去)を行います。
なお、optimize.py
を実行するとモデルをダウンロードするためProxy配下で実行する場合は、以下の通りコードを修正しておく必要があります。Proxy配下でない場合は読み飛ばして頂いて大丈夫です。
今回は以下の画像のBlur除去を行ってみます。
下図左が背景画像、下図右がBlur画像です。
下図が出力結果です。
Blur画像から、ペンが落下した画像が生成されています。
視認することすら難しいBlur画像からペンの形状や、モーションに至るまで再構築するとはなかなか驚異的です。
ちなみに下図のようなやや複雑な形状のBlur画像を生成してみました。
カメラの前で手を振って作成した画像です。こちらを試してみます。
出力結果は以下の通りです。
手が円形に丸めこまれてしまっていますね。
config.yamlのパラメータを調整してみましたが、手の形状に再構成されることはありませんでした。
現状、円形や棒状など比較的単純な形状に限定されていそうですね。
まとめ
本記事では、Shape from Blurで3DオブジェクトのBlur除去方法を紹介しました。
複雑な形状のBlur除去はこれからのものの、単純な形状であれば1枚の2次元画像から3Dオブジェクトの形状、モーション、テクスチャの再構成が可能であることを確認しました。これからも注視していきたい技術です。
また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。
また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。
参考文献
1. 論文 - Shape from Blur: Recovering Textured 3D Shape and Motion of Fast Moving Objects
0 件のコメント :
コメントを投稿