Labellioを用いて作成した画像認識モデルを利用するための環境構築とコマンドライン上における利用方法
皆様、こんにちは。
本エントリーでは、エンジニアの皆様を対象にLabellio(https://www.labell.io/)を用いて作成した画像認識モデルを利用するための環境構築としてAmazon Web Services(AWS)上にAMIを用いて環境をセットアップする方法と、より幅広い環境で利用可能なDockerを用いた環境のセットアップ方法を説明します。また、環境をセットアップしたあとに、Labellio CLIを用いてどのように画像の分析をコマンドライン上で行うかをStep by Stepで説明します。
なお、Labellioのリリースはこちらをご参照ください:
Deep Learningによる画像認識を可能にする最も簡単なWebプラットフォーム「Labellio」のリリースのお知らせ - Alpaca JP Blog
Labellioを用いて作成した画像認識モデルを自分のプロダクトに利用するのに最も手軽な方法は、AWSにGPU付きインスタンスを立ち上げ、そのサーバに対して画像をクエリとして送信、判定結果をJsonなどで取得する、いわゆるWeb APIサーバを構築する方法です。AWSをおすすめする理由は機能の充実はもとより、GPU付きサーバが提供されており、高速な計算が可能となるためです。
このエントリーで説明された基本的な手順さえ理解すれば、自分でAPIサーバを構築する方法は、それほどむずかしくはありません。次回のエントリーではAPIサーバの構築方法までを説明したいと思いますが、本エントリーではより基本的な環境のセットアップとコマンドラインの利用方法にフォーカスします。
AWS上にAMIを利用して環境のセットアップをする方法
- AWSにログインします。AWSアカウントがない人は作成してください。 https://aws.amazon.com/jp/
- Alpacaが提供するAMIは北カルフォルニアリージョン(N. California)で提供されていますので、右端にあるリージョン選択ボックスから「北カルフォルニア」(N. California)を選択してください。
- 各種サービスが並んだ画面で「EC2」を選択します。
- 「インスタンスの作成」(Launch Instance)を選択します。
- AMIの選択画面になりますので、「コミュニティAMI」(Community AMIs)を選択し、検索ボックスに「ami-9fe512db」を入力してください。Step 2できちんと北カルフォルニアリージョンが選択されていれば、labellio_caffe_imageが見つかりますので、これを選択してください。
- インスタンスタイプの選択画面になりますので、GPUインスタンスを選択してください。6/30現時点のGPUインスタンスはg2.2xlargeとg2.8xlargeです。通常のテスト用途であれば、g2.2xlargeで充分な性能が期待できます。GPUインスタンスを作成したら「確認と作成」ボタンをクリックしてください。
- インスタンス作成の画面になります。「セキュリティグループ」の設定は、本テスト用途であればSSH接続が可能であればそれで充分です。それ以外の用途がある場合、適宜HTTPなど用途に応じた設定を行ってください。設定が完了したら、「作成」ボタンをクリックしてください。
- インスタンスを起動します。インスタンス起動後にSSHでログインします。SSHを使用した接続は以下の公式ドキュメントなどを参考に行ってください。 http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html
- SSHでログインできたら、後述の「コマンドラインからの利用方法」が整ったことになります。
Nvidia GPUが装着されているPCのDocker上にLinux環境をセットアップする方法
コマンドラインに登場するsudoは必要に応じてつけてください。dockerの設定次第ではsudoが不要の場合もあります。また、Dockerの操作に慣れていない場合は、各種のステップで予期せぬ問題に遭遇する可能性もあるため、Docker/CUDA Toolkitなどのインストールが難しい場合は上述のAWSの利用をご検討ください。
1.Nvidia GPUが装着されているPCを用意してください。また、環境に下記のソフトウェアがあらかじめインストールされているものとします。
- Python 2.7(ほとんどのLinux OSに標準でインストールされています)
- Docker 1.4 or later (https://docs.docker.com/installation/ubuntulinux/)
- CUDA Toolkit 7.0 (https://developer.nvidia.com/cuda-downloads)
- make (“sudo apt-get install make”などを実行してインストール)
2.dockerイメージを下記コマンドを実行しダウンロードします。
$ sudo docker pull alpacadb/labellio-caffe-image
3.イメージが登録されていることを確認します。alpacadb/labellio-caffe-imageが存在することがわかります。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZ
alpacadb/labellio-caffe-image latest 4bba1de016cb 9 days ago 3.661 GB
4.Docker上で、CUDAを利用するには、ホスト側のドライバがインストールされ、メモリにロードされている必要があります。ドライバがロードされているか確認しましょう。 通常、以下の様な出力になるはずです。この状態ではドライバはロードされていません。
$ lsmod | grep nvidia nvidia 8370760 0 drm 303102 4 ttm,drm_kms_helper,cirrus,nvidia
5.ドライバをロードします。ロードするには、CUDAを利用する適当なプログラムを起動します。今回は、CUDA Toolkit付属のdeviceQueryコマンドを使います。deviceQueryコマンドは、以下のようにしてビルドします。
$ cd NVIDIA_CUDA-7.0_Samples/1_Utilities/deviceQuery
$ make
6.deviceQueryを起動します。
$ ./deviceQuery
7.ドライバがロードされたことを確認します。nvidia_uvmという行が増えていることでロードを確認可能です。
$ lsmod | grep nvidia nvidia_uvm 67139 0 nvidia 8370760 1 nvidia_uvm drm 303102 1 nvidia
8.下記dockerコマンドを用いてalpacadb/labellio-caffe-imageを起動します。起動する際は--privilegedオプションを忘れずに付けてください。
$ sudo docker run -ti --privileged -v /dev/null:/dev/raw1394 alpacadb/labellio-caffe-image:latest /bin/bash
[補足] -v /dev/null:/dev/raw1394は、必須ではありませんが、付けない場合に”libdc1394 error: Failed to initialize libdc1394”というエラーが出力されます。このエラー自体で問題は発生しないようですが、ここでは出力されない対策の意味でオプションをつけています。
9.これでdocker環境で後述の「コマンドラインからの利用方法」が整ったことになります。
コマンドラインツールによる画像認識モデルの利用
下記の手順はSSHを用いてAWS環境にログインした状況でのコマンドラインを想定しています。Docker環境の場合は、適宜docker execコマンドを用いて実行する必要があります。
1.Labellioを利用して、画像認識に利用するCaffe Modeファイルを用意します。本件では、Labellioを用いて「gorilla」(ゴリラ)、「alpaca」(アルパカ)、「sheep」(羊)が認識可能なモデルを作成した前提ですすめます。
2.Caffe ModelファイルをLabellioからダウンロードします。モデル作成が終わっている場合、モデルのページの「Download Model」から「Caffe Mode」がダウンロードします。6db79d9b4e6552ef15586ab3ddd08c15fe260892.tar.gz(前半の英数字はモデルによってかわります)のような名前のファイルがダウンロードされます。ファイルをダウンロードしたら”tar xzf”コマンドなどで解凍し、ディレクトリ名をmodelに変更します。
$ tar xzf [自分でダウンロードしたモデルのファイル名] $ mv [解凍後に作成されたディレクトリ] model
3.認識に利用するテスト用画像を用意します。ここでは、下記の商用用途も利用可能な画像を利用させていただきます。それぞれ以下の名前で作業ディレクトリのimgディレクトリにダウンロードします。
- alpaca.jpg https://pixabay.com/en/alpaca-ande-animal-cute-499875/
- gorilla.jpg https://pixabay.com/en/silver-back-gorilla-male-fur-beast-707327/
- sheep.jpg https://pixabay.com/en/sheep-dike-sky-clouds-meadow-759816/
4.labellio_classifyを実行する前に必ず下記コマンドを実行して下さい。
$ source /opt/caffe/caffe.bashrc
5.labellio_classifyがOSにすでにインストール済みですので、最新版のlabellio_cilにアップデートした上で、下記コマンドを実行してください。
$ sudo pip install -U labellio_cli $ labellio_classify model img
6.実行後、以下のようなアウトプットが出力されます。
img/alpaca.jpg alpaca [ 0.66606939 0.07539421 0.25853643] img/sheep.jpg sheep [ 7.81783648e-03 3.10965086e-04 9.91871238e-01] img/gorilla.jpg gorilla [ 0.00264297 0.99490935 0.00244769]
出力は左から順にファイル名、識別結果、識別スコアです。識別スコアの配列のどの位置がどのカテゴリに対応するかは、モデルディレクトリ中の、labels.jsonに記載されています。この場合、alpacaが配列の最初の数字、gorillaが2番目、sheepが3番目の数字です。
$ cat model/labels.json && echo {"sheep": 2, "gorilla": 1, "alpaca": 0}