今回、出力された画像
やったこと
画像の説明文を自動生成する__Image captioningモデル__の一つに、画像全体の内容を説明する文章を生成するだけでなく、画像内の各物体(オブジェクト)に、その物体が何なのかを記述した「形容詞+名詞」形式の説明語句を重ねて表示してくれる__DenseCapモデル__があります。
画像全体の内容を説明する文も出力されるのですが、その文を構成する複数の単語が、それぞれ画像内のどの(検出された)オブジェクトに対応しているのかを、色で対応づけして視覚的に表示してくれます。
具体的には、検出されたオブジェクトを囲んだ矩形線の「色」と、画像全体の内容を説明したキャプション文を構成する各単語の「色」を揃える、という見せ方が採用されています。
( スタンフォード大学のDenseCap研究チームの公式サイトより )
今回、GitHubに公開されている__DensCapモデル__のLua実装コードを、Macbook(macOS Catalina)のCPU環境で動かしてみました。
解析対象の画像ファイルを用意
__imgsディレクトリ直下__に、DenseCapに食わせたい画像ファイルを入れます。
electron@diynoMacBook-Pro densecap % ls ./imgs
chrome_ssl_screen.png resultsfig.png test003.jpg test007.jpeg test010.jpg
elephant.jpg test001.png test005.jpg test008.jpeg unidentified_guy.png
electron@diynoMacBook-Pro densecap %
electron@diynoMacBook-Pro densecap % open ./imgs/test001.png
学習済みモデルで、好きな画像を指定して、推論を実行
デフォルトではGPUで推論が行われるので、CPU環境で実行する場合は、コマンドライン引数として、__-gpu -1__を付けないといけない。
to run in CPU only mode, simply add the flag -gpu -1.
electron@diynoMacBook-Pro densecap % th run_model.lua -input_image imgs/test001.png -gpu -1
1/1 processing image imgs/test001.png
electron@diynoMacBook-Pro densecap %
実行が終わると、__vis__ディレクトリにファイルが出力されると書いてある。
jsonファイルと画像ファイルが吐かれていた。
jsonファイルを__wc -lで行数カウントすると、何と0行。
そして、画像ファイルをopen__コマンドで開くと、入力したのと同じ画像が・・・
こりゃ、実行失敗したか?(エラーは吐かれなかった)と肩を落としていたところ、
__python -m SimpleHTTPServer 8181__でサーバを立てて、結果を見ておく気力を奮い立たせました。
This command will write results into the folder vis/data. We have provided a web-based visualizer to view these results; to use it, change to the vis directory and start a local HTTP server:
cd vis python -m SimpleHTTPServer 8181
ブラウザ(Google Chrome)のURL窓に、以下のローカルホストのポート8181番の/view_resultsを開くと、なんと、ちゃんと解析処理がされていました(安堵)
Then point your web browser to http://localhost:8181/view_results.html.
electron@diynoMacBook-Pro densecap % cd vis
electron@diynoMacBook-Pro vis % python -m SimpleHTTPServer 8181
Serving HTTP on 0.0.0.0 port 8181 ...
127.0.0.1 - - [08/Aug/2021 22:50:59] "GET /view_results.html HTTP/1.1" 200 -
127.0.0.1 - - [08/Aug/2021 22:50:59] "GET /utils.js HTTP/1.1" 200 -
127.0.0.1 - - [08/Aug/2021 22:50:59] "GET /jquery-1.8.3.min.js HTTP/1.1" 200 -
127.0.0.1 - - [08/Aug/2021 22:50:59] "GET /d3.min.js HTTP/1.1" 200 -
127.0.0.1 - - [08/Aug/2021 22:50:59] "GET /style.css HTTP/1.1" 200 -
127.0.0.1 - - [08/Aug/2021 22:50:59] "GET /data/results.json?sigh=25948 HTTP/1.1" 200 -
127.0.0.1 - - [08/Aug/2021 22:50:59] "GET /data/test001.png HTTP/1.1" 200 -
Toggleボタンを押すと、各オブジェクトの矩形線上に、オブジェクト単位のキャプション文が表示されました。
( 拡大 )
More detectionsボタンを押すと、検出された他のオブジェクトについても、矩形線と、オブジェクト単位のキャプション文の表示が、1つずつ増えていく。
他の画像も試してみる
( 入力画像 )
( 出力画像 )
More detectionsボタンを押すと、検出された他のオブジェクトについても、矩形線と、オブジェクト単位のキャプション文の表示が、1つずつ増えていく。
環境構築
(1) Luaを入れる
MacbookにLuaとluarocksを入れる。
(2)luarocks installでライブラリを入れる
MacbookにLuaとluarocksを入れたあと、必要なライブラリを入れます。
ここで、__luarocks install torch__にハマりポイントがあったので、出くわした問題を解決したやり方を下の記事に記録しました。
luarocks install torch luarocks install nn luarocks install image luarocks install lua-cjson luarocks install https://raw.githubusercontent.com/qassemoquab/stnbhwd/master/stnbhwd-scm-1.rockspec luarocks install https://raw.githubusercontent.com/jcjohnson/torch-rnn/master/torch-rnn-scm-1.rockspec
(3)DenseCapの学習済みモデルを入れる
__sh scripts/download_pretrained_model.sh__を実行する。
Pretrained model
You can download a pretrained DenseCap model by running the following script:sh scripts/download_pretrained_model.sh
(飛ばしてもOK) Luaの対話型インタプリタ環境が立ち上がるか確認
Luaが、このMacbookで問題なく動くことを確認します。
electron@diynoMacBook-Pro densecap % pwd
/Users/electron/Desktop/densecap
electron@diynoMacBook-Pro densecap %
electron@diynoMacBook-Pro densecap % th
______ __ | Torch7
/_ __/__ ________/ / | Scientific computing for Lua.
/ / / _ \/ __/ __/ _ \ | Type ? for help
/_/ \___/_/ \__/_//_/ | https://github.com/torch
| http://torch.ch
th>
[0.0000s]
th> quit
[0.0003s]
th> exit
Do you really want to exit ([y]/n)? y
electron@diynoMacBook-Pro densecap %
問題ないみたいです。