2020/05/12
「AI CORE XスターターキットとOpenVINO™ですぐに始めるディープラーニング推論」シリーズのAppendix記事です。
このシリーズは、「ディープラーニングとは何か」から始まり、「各種ツールの使い方」「プログラミング基礎」「プログラミング応用・実践」までをステップバイステップでじっくり学び、自分で理解してオリジナルのAIアプリケーションが作れるようになることを目指しています。
ここでは、UbuntuやOpenVINO及びPythonに関するTIPSをご紹介します。
主に中級者向けの内容ですので、初心者の方は理解できなくても問題ありません。
AI CORE Xスターターキットを他のPCからリモートで操作したい人向けの情報
以下のコマンドでインストールすればOK
sudo apt-get install ssh
インストールしてないとPC側からの接続時にConnection refused
が起きる
SSH向けのアプリは色々あるが、chromeの拡張機能で出来る以下のアプリが便利
Secure Shell App
黄色の線の部分は任意の文字列、赤線の2箇所のみ記入してEnterキーで接続
パスワードを求められるので入力する
もしうまく接続出来ない場合はホスト名UP-APL01
の代わりにAI CORE XスターターキットのIPアドレス(例:192.168.11.1)を使う
AI CORE XスターターキットのIPアドレスは以下のコマンドで分かる
hostname -I
SSHにてPythonプログラムを実行する際、OpenCVなどWindow画面表示を伴うものはエラーが生じる。例えば、以下のようなエラー表示になる
Unable to init server: Could not connect: Connection refused: Gtk-WARNING **: 14:05:07.417: cannot open display:
まず、AI CORE Xスターターキット側で以下のコマンドを打ってdisplay番号を確認
※PC側ではなくAI CORE Xスターターキット側であることに注意
echo $DISPLAY
:0
などと番号が表示されるので、その番号に合わせてPC側から以下のコマンドを打てばOK
export DISPLAY=:0
これはSSHでログインしなおす度に必要なので注意
(ディスプレイ番号は基本的に変わらないはずなので、PC側のコマンドだけで良い)
SSHにてscpコマンド等を使えば、ファイルのやり取りは可能だが、少し不便
GUI操作のできるFTPを使った方がやりやすい。PC側は例えばFFFTPなどを使う。
まず以下のコマンドでインストールを行う
sudo apt-get install vsftpd
これだけでアクセスやダウンロードは可能になるが、PC側からアップロードが出来ない(permission denied)ため、書き込み権限を有効にする
書き込み権限を有効にするには/etc/vsftpd.conf
ファイルの中を少し編集する必要がある。
ここではnano
エディタを使った編集方法を紹介
まず以下のコマンドを打つ
sudo nano /etc/vsftpd.conf
パスワードを求められたら入力する
以下の箇所を見つけて
#write_enable=YES
の#
を削除する
キーボードにて Ctrl + O で保存、Ctrl + X で終了
再起動
sudo service vsftpd restart
これでOK
PC側のエディタ(例:VSCodeやAtomなど)を使ってコーディングする場合、編集後にPC側からAI CORE Xスターターキット側へ毎回アップロードするのは面倒。
Cyberduckを使ってFTPでアクセスし、右クリックでエディタで編集
から開いた状態で編集すると、保存時に自動的にアップロードされるので便利。FFFTPの場合だと、保存してもAI CORE Xスターターキット側へは反映されないので注意。
ちなみに、Windows10 PCでCyberduckを使ってFTPでファイルのアップロードやダウンロードを使うと遅いので、エディタ編集はCyberduck、ファイル転送はFFFTPと分けて使っている。
Inference Engineで登場するこちらのコードについての解説
input_blob =out_blob =
これはnet.inputs
と net.outputs
のキーワード
を取り出すためのコードで、Iterator(イテレータ)を使っている。イテレータとはざっくり言うと要素を1つずつ順番に取り出すオブジェクト。
イテレータにするための関数がiter
で、イテレータから要素を取り出すのがnext
以下はリストをイテレータ化して要素を取り出している例next
で取り出すと、次の取り出しはその続きになっているのがポイント
# リストa =# リストをイテレータ化b =# イテレータから要素取り出しc =print(c)# イテレータから要素取り出しc =print(c)# イテレータから要素取り出しc =print(c)# 実行結果# 10# 20# 30
辞書にも適用できる。辞書に適用した場合はnext
で得られるのはキーワード
のみ
# 辞書a =# 辞書をイテレータ化b =# イテレータから要素取り出しc =print(c)# イテレータから要素取り出しc =print(c)# イテレータから要素取り出しc =print(c)# 実行結果# apple# banana# orange
なお、上記の例では順番通りに取り出せているが、辞書の取り出し順は必ず順番通りと限らないので注意。
Inference Engineを使ったコードでnet.inputs
とnet.outputs
の中身を表示してみると辞書形式であることが分かる。また、要素は1つしかないので、順番を気にする必要がない。
# importfrom openvino.inference_engine import IENetwork, IEPlugin# モデルの読み込みnet =# モデルの中身を表示してみるprint(net.inputs)print(net.outputs)# 実行結果# {'input.1': <openvino.inference_engine.ie_api.DataPtr object at 0x7fa434602c10>}# {'527': <openvino.inference_engine.ie_api.DataPtr object at 0x7fa434602c10>}
Inference Engineでは最初のキーワードだけが取り出せれば良いので、iter
とnext
を一気に書いて処理している。
input_blob =out_blob =print(input_blob)print(out_blob)# 実行結果# input.1# 527
以下に、その他の書き方も紹介する。これらと比べてイテレータを使った方がシンプルで分かりやすい
keys()
を使うことにより辞書から全てのキー
を取り出すことが可能
ただし、出力される型はdict_keys
という型なのでリストとして取り出せない
そのため、さらにリスト化してから取り出すということが必要
input_blob =out_blob =
今まで何気なく使ってきたfor in
であるが、これがまさにイテレータと同じ動き。最後の要素が取り出されるまでnext
を繰り返している。net.inputs
とnet.outputs
には要素が1つしかないため即終了する
見やすいが、コード行が少し長くなる
for key in net.inputs:input_blob = keyfor key in net.outputs:out_blob = key
辞書をリスト化するとキーワードのみが取得される
シンプルさだけに注目すれば、こちらの書き方の方が良いかもしれない
input_blob =out_blob =
以上、「AI CORE Xスターターキット TIPS」でした。