今回は、下記飯塚里志さん・シモセラ・エドガーさん・石川博さんが開発した画像補完プログラムの画像を引用しています。
AIによって、こんな画像の抜け部分を補完してくれます。皆様もぜひ試してください!
引用元:『ディープネットワークによるシーンの大域的かつ局所的な整合性を考慮した画像補完』
画像の一部分を白や灰色といった単色で塗りつぶした部分に自然な画像を保管してくれるというプログラムになっており、今回はDockerコンテナ上でこちらを実践してみたいと思います。
※1.論文は以下のURLからご覧になれます。
『ディープネットワークによるシーンの大域的かつ局所的な整合性を考慮した画像補完』
http://iizuka.cs.tsukuba.ac.jp/projects/completion/ja/
※2.本プログラムの学習済みモデル等のファイルは以下のGithubリポジトリにあります。
https://github.com/satoshiiizuka/siggraph2017_inpainting
※3.今回の検証に関して以下のサイトのやり方を参考にさせていただきました。
『SIGGRAPH論文の画像補完を試してみたら、やはりすごかった』
https://ja.takp.me/posts/great-image-completion-siggraph-paper/
※4.本検証の実行環境は以下の環境で実施しています。
OS:Windows10
CPU:Inter(R) Core(TM) i5-4300U CPU @ 1.90GHz 2.50GHz
メモリ:8.00GB
メモリは最低8GB以上の環境が望ましいです。
またCLIとして「Docker Quickstart Terminal」を使用していますが、コマンドが通らない場合はコマンドプロンプトに置き換えて実施すると上手くいく可能性があるので適宜ご検討ください。
環境を構築
まず下地となるDocker環境を構築していきます。Docker Toolboxをインストールしご自身のPC上で展開してください。
※Docker Toolboxのインストール方法に関しましては以下のURLが分かりやすいです。
https://qiita.com/osuo/items/99a2b7413ce75f8217be
インストールするとDocker Quickstart Terminal、Kitematic、VirtualBoxの三つがインストールされるかと思います。
今回使用するのはその中の「Docker Quickstart Terminal」、「VirtualBox」を使用します。
続いて、インストールしたVirtualBox内のメモリを変更します。
インストールしたVirutalBoxをダブルクリックします。
ウィンドウが出現したら「設定」、「システム」の順にクリック、メモリの項目にある下記のバーを「4096MB」に設定し「OK」を押しウィンドウを閉じます。
続いて「Docker Quickstart Terminal」をダブルクリックして起動、しばらくコンソールが動くので待ち以下のようにクジラのイメージが出現すれば起動完了です。
3つ目に以下のgithubからファイル一式をダウンロードします。
https://github.com/satoshiiizuka/siggraph2017_inpainting
右上にある緑色の「Clone or download」→「Download ZIP」の順に選択しダウンローされたzipファイルを解凍し、解凍したファイルをDockerが置いてあるユーザディレクトリ配下に移動させておきます。
例:「C:\Users\user」
Dockerイメージをpull
Dockerを正常にインストールできましたら以下のコマンドを入力します。
こちらは以下のURLにて事前にOpenCV含む必要になるイメージを作成されたものとなります。
ダウンロードに時間がかかるので待ちます。
論文コードをクローン
続いて論文のコードをクローンします。下記のgit cloneコマンドにてコードをクローンしてください。
※上記で実施できない場合は以下で試してみてください。
正常にcloneが出来ましたらcdコマンドより以下のディレクトリに移動します。
Dockerイメージを実行
「siggraph2017_inpainting」のディレクトリに移動したら以下のコマンドを打ちPullしてきたDockerイメージがあることを確認してください。(「takp/torch-opencv 」というイメージがあればOKです)
takp/torch-opencv latest 76a6895xxxxx 9 hours ago 4.61GB
イメージがあることを確認したら以下のdocker runコマンドを入力し実行します。
「# root@<コンテナIDの文字数列>:」のユーザとして遷移出来たらDockerコンテナの起動に成功です。
Dockerコンテナにコピー
続いて、ユーザディレクトリにある「download_model.sh」などをDockerコンテナ(mountディレクトリ)にコピーします。
「exit」コマンドでコンテナからログアウトし、以下のコマンドをファイルごとに入力していきます。
※以下コマンド例となります。コンテナIDはDockerコンテナを起動するたびに変更されるので適宜コピーして入力してください。
docker cp example.png d65dcd8881e9:/mount/
docker cp example_mask.png d65dcd8881e9:/mount/
docker cp inpaint.lua d65dcd8881e9:/mount/
docker cp LICENSE d65dcd8881e9:/mount/
docker cp README.md d65dcd8881e9:/mount/
docker cp teaser.png d65dcd8881e9:/mount/
docker cp utils.lua d65dcd8881e9:/mount/
docker cp completionnet_places2.t7 d65dcd8881e9:/mount/
ツールを実行
ファイルのコピーが完了しましたら再度Docker runコマンドにてコンテナを起動し以下のmountディレクトリに移動します。
bashコマンドより以下シェルスクリプトを実行します。
続いて以下のコマンドを入力し、プログラムを実行します。
イメージとしては、
この元画像に、
このマスク画像を被せて処理を行います。
以下のログが現れ最後の「Done.」が出ればOKです。
gpu : false
mask : “example_mask.png”
input : “example.png”
nopostproc : false
maxdim : 500
}
Loding model…
Inpainting…
Performing post-processing…
libdc1394 error: Failed to initialize libdc1394
Done.
Done.が出たら、docker cpコマンドコンテナにあるorg.pngをローカルに移します。
例:docker cp a855cf53a9cd:/mount/out.png C:¥users¥user¥siggraph2017_inpainting
このような画像が出力されマスクされた人の部分が補完されています。
以上が今回のプログラムの検証です。
最初にも記載しましたが、Dockerのコンソールで上手くいかない場合はコマンドプロンプトなど標準のコンソールで試してみると上手くいく可能性があります。
また処理含むメモリの消費量が膨大なので、検証用のPCなどある程度リソースが確保された端末での実施を推奨します。
ご覧いただきありがとうございました!