Intel DevCloud for the Edge を使い倒す(その5)

Intel DevCloud for the Edge を使い倒す(その4)から続く記事の5回目です
今回は実際に実行ファイルをキューに入れて実行してみます
( Intel DevCloudの記事はこちら

Edge Serverでの処理をQueueに入れるところまでは、前回で行いました
次に実際の実行ファイルを実行するまでを行ってみましょう

前回使用したコマンドは下記のとおりです

Queueを扱うコマンド群
pbsnodes: 使用可能なサーバーの列挙
qsub: queueの登録
qstat: 自分が実行したqueueの状態
qdel: queueの削除

他にもありますが、これだけ覚えておくとなんとかなります
詳しくはここにあります

Development ServerとEdge ServerのストレージはNFSで接続されているので、実行時にファイルを転送したりする必要はありませんが、出力ファイルなどがある場合には、同一名は避けないといけませんので、その場合は処理が必要です

では、いつも通り、security barrier camera demo を使用してベンチマークを取ってみましょう
まずは、適当なEdge Serverを選択し、そのサーバーに対してQueueを投げてみます

#!/bin/bash
  
~/omz_demos_build/intel64/Release/security_barrier_camera_demo -m ~/models/intel/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml -m_va ~/models/intel/vehicle-attributes-recognition-barrier-0039/FP16/vehicle-attributes-recognition-barrier-0039.xml -m_lpr ~/models/intel/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.xml -i ~/car_1.bmp -no_show

こちらのスクリプトファイルを、sbcd.bashとして保存します
保存したものをDevelopment Serverで実行すると、

u41585@s099-n003:~/security_log$ bash sbcd.bash 
 [ INFO ] InferenceEngine: 0x7fbc94231030
 [ INFO ] Files were added: 1
 [ INFO ]     /home/u41585/car_1.bmp
 [ INFO ] Loading device CPU
         CPU
         MKLDNNPlugin version ……… 2.1
         Build ……….. 42025
 [ INFO ] Loading detection model to the CPU plugin
 [ INFO ] Loading Vehicle Attribs model to the CPU plugin
 [ INFO ] Loading Licence Plate Recognition (LPR) model to the CPU plugin
 [ INFO ] Number of InferRequests: 1 (detection), 3 (classification), 3 (recognition)
 [ INFO ] 10 streams for CPU
 [ INFO ] Display resolution: 1920x1080
 [ INFO ] Number of allocated frames: 3
 [ INFO ] Resizable input with support of ROI crop and auto resize is disabled
 43.6FPS for (1 / 1) frames
 Detection InferRequests usage: 100.0%
 [ INFO ] Execution successful

うまく実行できていますので、これをQueueに投げてみます
まずはi5-6500te というCPUで実行してみましょう

u41585@s099-n003:~/security_log$ qsub -l nodes=1:i5-6500te sbcd.bash 
 3418.v-qsvr-2.devcloud-edge

3418というJob名で登録されました
しばらくして、実行したフォルダを見てみると、

u41585@s099-n003:~/security_log$ ls
 sbcd.bash  sbcd.bash.e3418  sbcd.bash.o3418

と言うファイルが出来上がっています
sbcd.bash.o3418の中身を見てみると、下記のようになります

#
 Date:           Sat May  2 03:31:21 PDT 2020
 Job ID:           3418.v-qsvr-2.devcloud-edge
 User:           u41585
 Resources:           neednodes=1:i5-6500te,nodes=1:i5-6500te,walltime=01:00:00
 #
 [setupvars.sh] OpenVINO environment initialized
 [ INFO ] InferenceEngine: 0x7f5092704030
 [ INFO ] Files were added: 1
 [ INFO ]     /home/u41585/car_1.bmp
 [ INFO ] Loading device CPU
         CPU
         MKLDNNPlugin version ……… 2.1
         Build ……….. 42025
 [ INFO ] Loading detection model to the CPU plugin
 [ INFO ] Loading Vehicle Attribs model to the CPU plugin
 [ INFO ] Loading Licence Plate Recognition (LPR) model to the CPU plugin
 [ INFO ] Number of InferRequests: 1 (detection), 3 (classification), 3 (recognition)
 [ INFO ] 4 streams for CPU
 [ INFO ] Display resolution: 1920x1080
 [ INFO ] Number of allocated frames: 3
 [ INFO ] Resizable input with support of ROI crop and auto resize is disabled
 2.7FPS for (1 / 1) frames
 Detection InferRequests usage: 0.0%
 [ INFO ] Execution successful
 #
 End of output for job 3418.v-qsvr-2.devcloud-edge
 Date: Sat May  2 03:31:28 PDT 2020
 #

全ての処理をCPUで実行して、2.7FPSと言う結果が出ています
どうも遅いですが、この問題は後ほど解決するとして、これで色々なEdge Serverで実行できることが分かりました

FPSが2.7になった理由を考えてみましょう
こちらのCPUはCore i5 6500teなので、スペックを見てみると、2.3GHzからバースト時には3.3GHzまでクロックが上がります
lscpuでこちらのマシンのCPUをみてみましょう

Architecture:        x86_64
 CPU op-mode(s):      32-bit, 64-bit
 Byte Order:          Little Endian
 CPU(s):              4
 On-line CPU(s) list: 0-3
 Thread(s) per core:  1
 Core(s) per socket:  4
 Socket(s):           1
 NUMA node(s):        1
 Vendor ID:           GenuineIntel
 CPU family:          6
 Model:               94
 Model name:          Intel(R) Core(TM) i5-6500TE CPU @ 2.30GHz
 Stepping:            3
 CPU MHz:             833.403
 CPU max MHz:         3300.0000
 CPU min MHz:         800.0000
 BogoMIPS:            4608.00

3.3GHzはあっていますが、CPU min MHzの800と言うのは、Intelが発表しているものと違います
恐らくマザー側の省電力モード?が走っているのではないでしょうか

#!/bin/bash

lscpu

for nm in `seq 1 10`
do
        echo "@@@"$nm
~/omz_demos_build/intel64/Release/security_barrier_camera_demo -m ~/models/intel/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml -m_va ~/models/intel/vehicle-attributes-recognition-barrier-0039/FP16/vehicle-attributes-recognition-barrier-0039.xml -m_lpr ~/models/intel/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.xml -i ~/car_1.bmp -no_show

lscpu
done

次に、lscpuを実行時に行うようにし、10回security barrierを走らせるようにしました
結果は下記のようになります

u41585@s099-n003:~/security_log$ grep -E "@@@|FPS|CPU MHz" sbcd.bash.o3426
 CPU MHz:             800.081
 @@@1
 13.3FPS for (1 / 1) frames
 CPU MHz:             2033.078
 @@@2
 27.7FPS for (1 / 1) frames
 CPU MHz:             2998.178
 @@@3
 28.1FPS for (1 / 1) frames
 CPU MHz:             3034.077
 @@@4
 26.5FPS for (1 / 1) frames
 CPU MHz:             3017.880
 @@@5
 29.5FPS for (1 / 1) frames
 CPU MHz:             3007.795
 @@@6
 28.8FPS for (1 / 1) frames
 CPU MHz:             3029.440
 @@@7
 29.0FPS for (1 / 1) frames
 CPU MHz:             3006.187
 @@@8
 29.4FPS for (1 / 1) frames
 CPU MHz:             3013.184
 @@@9
 28.1FPS for (1 / 1) frames
 CPU MHz:             3000.330
 @@@10
 28.9FPS for (1 / 1) frames
 CPU MHz:             3002.821

やはり、と言うか一度目の実行はクロックが上がりきっていないのであまりあてになりません
ベンチマークを取るうえで、気を付けないといけないことだと思います

つづく

Intel DevCloud for the Edge を使い倒す(その4)

Intel DevCloud for the Edge を使い倒す(その3) から続く記事の4回目です
今回は実際に実行してみます
( Intel DevCloudの記事はこちら

DevCloud for Edge内でのEdge Serverでの実行は処理をQueueに入れて実行させる形式となります
こちらのQueueを取り扱うQueueサーバーも存在しますが、あまり気にする必要は無く、Queueに入れるコマンドが扱えればユーザーにとっては問題になりません

Queueを扱うコマンド群
pbsnodes: 使用可能なサーバーの列挙
qsub: queueの登録
qstat: 自分が実行したqueueの状態
qdel: queueの削除

他にもありますが、これだけ覚えておくとなんとかなります
詳しくはここにあります

勘のいい人は Development ServerとEdge Serverのデータのやり取りはどうするの?と疑問になりますが、これはストレージが共有されているので、Edge Server上ではDevelopment Serverのストレージが見えることとなります
下記のIntelからの図のリンクだとStorageは離れているように見えるのですが、Edge ServerとNFSで接続されているようです

https://devcloud.intel.com/edge/get_started/devcloud/ より

では、実際にqueueに処理を投げてみましょう、の前に処理をスクリプトにしてください
シェルスクリプトであれば、標準出力はファイルにしてくれるのであまり何も考えなくて良いと思います
まずはテストとして、test.bashというスクリプトを作成して実行してみましょう

#!/bin/bash

echo "@@@"
lscpu
echo "@@@"

下記が実際にqueueに処理を投げたところです
まず、qsub -l nodes=1:idc008u2g test.bashとして処理を投げます
nodes=1:idc008u2gはおまじないのように見えますが、idc008u2gは同じスペックのマシンに付けられた名前です
ですので、空いている idc008u2g に処理を投げることができます
他にもskylakeというようにpbsnodesで得られた文字列で実行の指定ができます

実行がqstatで3209というjobが登録されているのが分かります
しばらくすると、実行ディレクトリにtest.bash.o3209と言うファイルが生成されますので、それを見てみると、指定したスペックのマシンで実行した結果が得られます

u41585@s099-n003:~$ qsub -l nodes=1:idc008u2g test.bash
 3209.v-qsvr-2.devcloud-edge
 u41585@s099-n003:~$ qstat
 Job ID                    Name             User            Time Use S Queue
 3109.v-qsvr-2              …ub-singleuser u41585          00:00:59 R jupyterhub     
 3209.v-qsvr-2              test.bash        u41585                 0 R batch          
 u41585@s099-n003:~$ qstat
 Job ID                    Name             User            Time Use S Queue
batch          
 3109.v-qsvr-2              …ub-singleuser u41585          00:00:59 R jupyterhub     

 u41585@s099-n003:~$ less test.bash.o3209
 u41585@s099-n003:~$ cat test.bash.o3209
 #
 Date:           Fri May  1 22:08:18 PDT 2020
 Job ID:           3209.v-qsvr-2.devcloud-edge
 User:           u41585
 Resources:           neednodes=1:idc008u2g,nodes=1:idc008u2g,walltime=01:00:00
 #
 [setupvars.sh] OpenVINO environment initialized
 @@@
 Architecture:        x86_64
 CPU op-mode(s):      32-bit, 64-bit
 Byte Order:          Little Endian
 CPU(s):              4
 On-line CPU(s) list: 0-3
 Thread(s) per core:  1
 Core(s) per socket:  4
 Socket(s):           1
 NUMA node(s):        1
 Vendor ID:           GenuineIntel
 CPU family:          6
 Model:               92
 Model name:          Intel(R) Atom(TM) Processor E3950 @ 1.60GHz
 Stepping:            9
 CPU MHz:             1171.636
 CPU max MHz:         2000.0000
 CPU min MHz:         800.0000
 BogoMIPS:            3187.20
 Virtualization:      VT-x
 L1d cache:           24K
 L1i cache:           32K
 L2 cache:            1024K
 NUMA node0 CPU(s):   0-3
 Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc a
 rt arch_perfmon pebs bts rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm sse4_1 sse4_
 2 x2apic movbe popcnt tsc_deadline_timer aes xsave rdrand lahf_lm 3dnowprefetch cpuid_fault cat_l2 ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust smep erms m
 px rdt_a rdseed smap clflushopt intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts md_clear arch_capabilities
 @@@
 #
 End of output for job 3209.v-qsvr-2.devcloud-edge
 Date: Fri May  1 22:08:19 PDT 2020
 #
 skipping application metrics
 Your telemetry account is not created
 skipping telemetry
 u41585@s099-n003:~$ 

ここまできたらあとは処理をスクリプトに書いて、どんどん作成すれば良いことになります

つづく

Intel DevCloud for the Edge を使い倒す(その3)

Intel DevCloud for the Edge を使い倒す(その2) から続く記事の3回目です
今回はEdge Serverについての説明です
( Intel DevCloudの記事はこちら

Development Server上で環境が整ったところで、Edge Serverで実行するのですが、その前にまずはEdge Serverはどのような種類の環境があるかをチェックします

pbsnodes コマンドを実行すると、ずらっと環境が表示されます

このままですと、何があるかわからないので、propertiesだけ抜き出してみます

どうやら同じようなサーバーが並んでいるようです
サーバー数はこの時点で、154台あります
propertiesを元に同じスペックのものを削除していくと、

16パターンとなりました
表にすると下記のようになります

nameCPU種別CPUCPU世代option
idc008u2gintel-atome3950apollo-lakeintel-ncs2
idc010jalintel-atome3950apollo-lake
idc012ark1220lintel-atome3940apollo-lake
idc013ds580intel-atome3950apollo-lake
idc006kblintel-corei5-7500tkaby-lake
idc009jklintel-corei5-7500kaby-lake
idc001sklintel-corei5-6500teskylake
idc002mx8intel-corei5-6500teskylakeiei-mustang-v100-mx8
idc003a10intel-corei5-6500teskylakeiei-mustang-f100-a10
idc004nc2intel-corei5-6500teskylakeintel-ncs2
idc007xv5intel-xeone3-1268l-v5skylake
idc011ark2250sintel-corei5-6442eqskylake
idc099dgsintel-xeongold6138skylake
idc014upxa10fx1intel-corei7-8665uewhiskey-lakemyriadx-ma2485
idc015ai5intel-corei5-8365uewhiskey-lakemyriadx-ma2485
idc016ai7intel-corei7-8665uewhiskey-lakemyriadx-ma2485

CPUの詳細情報はコマンドラインから得ないといけないのですが、こちらに簡単にまとめておきました

nameCPU種別CPUCPU世代option世代周波数バーストコア/スレッドキャッシュ
idc008u2gintel-atome3950apollo-lakeintel-ncs2atom1.61.84C/4T2MB
idc010jalintel-atome3950apollo-lakeatom1.61.84C/4T2MB
idc012ark1220lintel-atome3940apollo-lakeatom1.624C/4T2MB
idc013ds580intel-atome3950apollo-lakeatom1.61.84C/4T2MB
idc006kblintel-corei5-7500tkaby-lake72.73.34C/4T6MB
idc009jklintel-corei5-7500kaby-lake73.43.84C/4T6MB
idc001sklintel-corei5-6500teskylake62.33.34C/4T6MB
idc002mx8intel-corei5-6500teskylakeiei-mustang-v100-mx862.33.34C/4T6MB
idc003a10intel-corei5-6500teskylakeiei-mustang-f100-a1062.33.34C/4T6MB
idc004nc2intel-corei5-6500teskylakeintel-ncs262.33.34C/4T6MB
idc007xv5intel-xeone3-1268l-v5skylake62.43.44C/8T8MB
idc011ark2250sintel-corei5-6442eqskylake61.92.74C/4T6MB
idc099dgsintel-xeongold6138skylake623.720C/40T27.5MB
idc014upxa10fx1intel-corei7-8665uewhiskey-lakemyriadx-ma248591.74.44C/8T8MB
idc015ai5intel-corei5-8365uewhiskey-lakemyriadx-ma248591.74.44C/8T8MB
idc016ai7intel-corei7-8665uewhiskey-lakemyriadx-ma248591.64.14C/8T6MB

各々の台数をまとめたのが下の表です
台数にばらつきがあるようですね

台数name
37idc001skl
13idc002mx8
14idc003a10
19idc004nc2
8idc006kbl
10idc007xv5
13idc008u2g
1idc009jkl
1idc010jal
1idc011ark2250s
1idc012ark1220l
1idc013ds580
19idc014upxa10fx1
5idc015ai5
4idc016ai7
7idc099dgs

スペックもわかったことですので、こちらのサーバーを使用しながらベンチマークを取得しましょう

つづく

Intel DevCloud for the Edge を使い倒す(その2)

Intel DevCloud for the Edge を使い倒す(その1) から続く記事の2回目です
今回はDevelopment Serverで実際に実行してみます
( Intel DevCloudの記事はこちら

前回の作業で、自分のフォルダ内にopen model zooの実行ファイルが出来ました

Pythonの場合と違い、ビルド作業が必要なので最初はopen model zooの仕組みを参考にするのが良いと思います

次にモデルのダウンロードを行います
モデルリストはopen model zooの各デモ内のフォルダに格納されていますので、こちらを利用しましょう

python3 /opt/intel/openvino/deployment_tools/tools/model_downloader/downloader.py --list /opt/intel/openvino/deployment_tools/open_model_zoo/demos/security_barrier/source
/models.lst -o ~/models/

これでホームディレクトリ内のmodelsと言うフォルダにダウンロードできましたでは入力ファイルも自分のフォルダにコピーしましょう

cp /opt/intel/openvino/deployment_tools/demo/car_1.bmp ~

これで、最初から入っている車の画像がコピーできました
JupyterLabのフォルダから画像が確認できます

Jupyter Lab上のフォルダからの画像確認

これで、実行ファイル、モデル、入力画像がコピーできましたので、Development Serverでの実行が可能です

~/omz_demos_build/intel64/Release/security_barrier_camera_demo -m ~/models/intel/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml -m_va ~/models/intel/vehicle-attributes-recognition-barrier-0039/FP16/vehicle-attributes-recognition-barrier-0039.xml -m_lpr ~/models/intel/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.xml -i ~/car_1.bmp -no_show

最後に -no_showがついているのは、実行時の画像はXwindowに出力できないからです

実行してみると、60FPSほどで実行されているようです
これでDevelopment Serverでの検証が完了しました

ここで、自分の持っている画像はどうやって、環境に入れれば良いか?と言う疑問がわきますが、アップロード機能も用意されています(上矢印部分)

では、データのダウンロードはどうするの?と言う疑問ですが、これもフォルダを右クリックすることで実現しています

これで、ベンチマークを取った時のログファイルなどのダウンロード環境が確保できました
次回はEdge Serverでの実行を行います

つづく

Instance Segmentation Demoの実行(Windows編)

OpenVINO 2020.2に入っているInstance Segmentation Demoを実行してみましょう。

デモのフォルダは以下になります。

C:\Program Files (x86)\IntelSWTools\openvino\inference_engine\demos\python_demos\instance_segmentation_demo

実行の前に

サンプルを実行する前に、READMEファイルを確認しておきましょう。オプションスイッチや実行例が記載されています。

モデル

今回は以下のモデルを利用しました。(instance_segmentation_demoフォルダにある、models.txtで利用するモデルがわかります。)

  • instance-segmentation-security-????

モデルをダウンロードします。モデルの保存先(-o)は適時読み替えてください。

cd C:\Program Files (x86)\IntelSWTools\openvino\inference_engine\demos\python_demos\instance_segmentation_demo

python downloader.py --list "C:\Program Files (x86)\IntelSWTools\openvino\inference_engine\demos\python_demos\instance_segmentation_demo\models.lst" -o C:\Users\ユーザ名\Documents\Intel\OpenVINO\openvino_models

コマンドを実行すると、ダウンロードが始まります。

Webカメラ、または、動画ファイル

今回のデモの入力は、Webカメラ、または、動画ファイル(avi)です。どちらかを用意しておきましょう。

なお、動画の変換(mp4 -> avi)はffmpegを利用しました。以下のコマンドで変換する事が出来ます。

ffmpeg -i 変換元.mp4 変換先.avi

実行

環境変数の設定をしていない場合は、コマンドラインで以下を実行します。

C:¥Program Files (x86)¥IntelSWTools¥openvino¥bin¥setupvars.bat

以下のコマンドでInstance Segmentation Demoを実行します。
モデルの格納先等は適時読み替えてください。

python instance_segmentation_demo.py -m C:\Users\ユーザ名\Documents\Intel\OpenVINO\openvino_models\intel\instance-segmentation-security-0010\FP16\instance-segmentation-security-0010.xml --labels coco_labels.txt -i 0 --delay 1

オプションとして、-m でモデル、–labels でラベル(デモフォルダ内にあるもの)、-iはカメラ0番目、–delay 1msを指定しています。

実行結果

コマンドを実行すると、ウィンドウが表示されます。–delayを指定しない場合は、何かキーを押すと動画がキャプチャされます。

Personとcarが表示されています。
猫のふーちゃんとタンタンも、それぞれcatとして表示されました。

使用モデルについて

instance-segmentation-security-0010、instance-segmentation-security-0050の2つのモデルを試してみたところ、0050のFP16-INT8、FP32-INT8が早く処理されたように見えました。動画の左上の時間に注目してみてください。

instance-segmentation-security-0050, FP16 500ms-600msくらいですね。
instance-segmentation-security-0050, FP16-Int8 400ms前半
instance-segmentation-security-0050, FP32 こちらも400ms前半

Instance Segmentation Demoの実行、如何だったでしょうか。いろいろと試してみてくださいね。

デバイス指定(-d)について

readmeやヘルプにはデバイス指定が可能とありますが、実際はCPUのみ実行可能でした。(GPU,MYRIADを指定するとエラーになりました。)

https://software.intel.com/en-us/forums/intel-distribution-of-openvino-toolkit/topic/831534

/opt/intel/openvino/deployment_tools/open_model_zoo/demos/README.md に、デモの概要とサポートしているデバイスが記載されています。ここを確認すると、instance-segmentation-security-xxxxは、CPUとHETERO:FPGA,CPUがサポートである事がわかります。

GPUやNCS2などで実行したい場合にエラーになったけど、何だか分からないなあという場合は、まずはここから確認するのも良いかもしれません。

Intel DevCloud for the Edge を使い倒す(その1)

先日、XLSoftさんの OpenVINO オンラインセミナー/ワークショップ でWebinarを受講したところ、Intel DevCloudのアカウントを一か月分頂きましたので、使い倒したいと思います

まずはJupyterLabにログインします

セミナーでは、ノートとPythonを使用してと言う感じでしたが、コンソールでサクッと試せるので、私はそちらばかり使っています

DevCloudは簡単に説明すると、ローカル環境のDevelopment Serverと様々なHWがあるEdge Computing Node Serverに分けられます
(正確には少し異なりますが、ユーザーから見える形としては上記)
最初はDevelopment Serverで実行し、Edge ServerにJobを投げる、と言う形で色々な環境で試すことになります

ローカル環境のスペックを見てみましょう

Xeon Gold 6138のようですね
では、こちらの環境でOpenVINOを走らせてみましょう

ん?OpenVINOのインストールってどうするんだ?ということになりますよね?
このサーバーはOpenVINO用ですので、すでにインストールされています
また、ログイン時にsetupvars.shが走る設定になっています
至れり尽くせりですね

コンソールでOpenVINOのディレクトリを調べてみると、
/opt/intel/openvino_2020.2.120
になっているので、すでに2020.2対応となります
古いバージョンのチェック時はどうするの?と思いますが、あくまでも最新開発環境なのでそのあたりは自分で、と言うことなんでしょうね

早速、Security Barrierのデモを動かしたいと思いますが、最初につまづくのは、ソースコードやmakeなどをどうすれば良いかと言うこと…
OpenVINOの場合、setupvars.shを一度実行していれば、自分のフォルダの中に実行ファイルを作ってくれます
まずはそれを利用しましょう

cd /opt/intel/openvino_2020.2.120/deployment_tools/open_model_zoo/demos

でopen model zooのデモフォルダに移動し、build_demos.shを実行します
この作業で、自分のフォルダ内に実行ファイルが生成されます

つづく

Image Inpainting Demoの実行(Windows編)

OpenVINO 2020.2に入っているimage inpainting demoを実行してみましょう。まずは概要の動画をご確認ください。

デモのフォルダは以下になります。

C:\Program Files (x86)\IntelSWTools\openvino\inference_engine\demos\python_demos\image_inpainting_demo

実行の前に

サンプルを実行する前に、READMEファイルを確認しておきましょう。オプションスイッチや実行例が記載されています。

モデル

今回は以下のモデルを利用しました。(image_inpainting_demoフォルダにある、models.txtで利用するモデルがわかります。)

  • gmcnn-places2-tf

モデルをダウンロードします。モデルの保存先(-o)は適時読み替えてください。

cd C:\Program Files (x86)\IntelSWTools\openvino\inference_engine\demos\python_demos\image_inpainting_demo

python downloader.py --list "C:\Program Files (x86)\IntelSWTools\openvino\inference_engine\demos\python_demos\image_inpainting_demo\models.lst" -o C:\Users\ユーザ名\Documents\Intel\OpenVINO\openvino_models

コマンドを実行すると、ダウンロードが始まります。

################|| Downloading models ||################ ========== Downloading C:\Users\ユーザ名\Documents\Intel\OpenVINO\openvino_models\public\gmcnn-places2-tf\frozen_model.pb ... 100%, 48608 KB, 3511 KB/s, 13 seconds passed ################|| Post-processing ||################

ダウンロードしたモデルを中間形式に変換します。モデルの読み込み先(-d)と保存先(-o)は適時読み替えてください。

python converter.py --list "C:\Program Files (x86)\IntelSWTools\openvino\inference_engine\demos\python_demos\image_inpainting_demo\models.lst" -d C:\Users\ユーザ名\Documents\Intel\OpenVINO\openvino_models -o C:\Users\ユーザ名\Documents\Intel\OpenVINO\openvino_models

[ SUCCESS ]が表示されて、モデルが変換されたら完了です。

画像ファイル

テスト用の画像も必要です。今回は以下の画像を用意しました。

SUZUKI BANDIT 250V

実行

環境変数の設定をしていない場合は、コマンドラインで以下を実行します。

C:¥Program Files (x86)¥IntelSWTools¥openvino¥bin¥setupvars.bat

以下のコマンドでImage Inpainting Demoを実行します。
モデルの格納先、画像の保存先フォルダは適時読み替えてください。

python image_inpainting_demo.py -m C:\Users\ユーザ名\Documents\Intel\OpenVINO\openvino_models\public\gmcnn-places2-tf\FP16\gmcnn-places2-tf.xml -i C:\Users\ユーザ名\Desktop\画像.jpg

実行結果

コマンドを実行すると、左側に元々の画像にマスクが掛かった画像、右側にマスク部分を補完した画像が表示されます。だいたい戻ってますね。

左側:マスクが掛かっている画像 ー> 右側:補完した画像

他の画像でも試してみましょう。

毎度おなじみの、ふーちゃん
まあまあ補完されていますね。少し離れれば分からないレベル。
近くの川で釣って来たヤマメ3匹
結構補完されていますね。
京都醸造さんのクラフトビール。美味しいです。
ビンの形は補完されてますね。ラベルは難しいでしょうね。

image inpainting demoの実行、如何だったでしょうか。いろいろと画像を試してみてくださいね。

Intel DevCloud for the Edge

OpenVINO toolkitを使用して、テストアプリケーションを作ったけれども、どのような環境が最適なのかテストしたい

このようなことは開発途中でよくあることです
こういう場合を想定して、IntelがIntel DevCloud for the Edgeという環境を用意してくれています

使用方法はRegister後、Intel DevCloud for the Edgeのアクセスパスワードが送られてきますので、SignInして使用します
(開発者と関係無い場合はrejectされる可能性があります)

SignIn後は、Jupyter notebookを使用して色々なサーバーがコントロールできます

Jupyter notebook
HW環境

こちらの環境には、通常のIntel CPU以外にも

こちらのようなMYRIAD x 8 のようなデバイスも用意されていますので、購入を前にテストすることが可能です

HW環境を揃えないといけないと億劫になりますが、このように環境が揃っているとベンチマーク取るにもワクワクしちゃいますね

super resolution demoで動画を変換

OpenVINO toolkit内のOpen Model Zooにはsuper resolution demoが含まれています
このデモを使用して、解像度変換を簡易動画に対して行ってみましょう
まずは、super resolutionを動作させてみましょう

cd /opt/intel/openvino/deployment_tools/open_model_zoo/demos
./build_demos.sh

上記のコマンドでホームディレクトリ内のomz_demos_buildディレクトリに~/omz_demos_build/intel64/Release/super_resolution_demo
としてビルドできます

画像のソースは、

この映像を元としました

super resolution demoは対象を静止画としていますので、この映像をffmpegコマンドで一コマずつ切り出していきます

ffmpeg -i test_video.mp4 -r 15 video%05d.png

こちらをconvertコマンドによって、1920×1080サイズに変換し、animation gifに変換します

convert video_000*.png expanded.gif

こちらがそのanimation gifとなります

次に一コマずつ超解像変換を行います

for nm in ../source_video/video_000*.png;
do
  ~/opencv_prog/test/intel64/Release/super_resolution_demo -m  ~/openvino_models/intel/single-image-super-resolution-1032/FP16/single-image-super-resolution-1032.xml -i $nm;
  mv sr_1.png  converted_basename $nm;
done
convert video_000*.png converted.gif

※モデルを読み込む時間を節約するのに複数ファイル指定も使用できます

上記のスクリプトで変換したanimation gifが下記となります

文字の周りにしっかりと変換がかかっているようです

一コマを取り出して、WinMergeで違いを見てみましょう

今回はanimation gifでの単純な変換でしたが、ソースコードを元に動画変換を行えるようにすると面白いかもしれません

OpenVINO toolkit 2020.2 ベンチマーク

OpenVINO toolkit 2020.2のベンチマークを取りました
使用したアプリケーションは、security barrier c++ demoを使用しております

また使用機材は下記となります

Intel(R) Atom(TM) Processor E3950 @ 1.60GHz
MemTotal:8012260 kB
Ubuntu 18.04.4 LTS

ベンチマーク時のオプションは下記となります

security_barrier_camera_demo -d $a -d_va $b -d_lpr $c -i car_1.bmp -m openvino_models/ir/intel/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml -m_lpr openvino_models/ir/intel/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.xml -m_va openvino_models/ir/intel/vehicle-attributes-recognition-barrier-0039/FP16/vehicle-attributes-recognition-barrier-0039.xml -no_show

まずはubuntu16.04と18.04の違いはほとんどありません

-d-d_va-d_lpr2020.1 ubuntu16.04
FPS Average
2020.1 ubuntu18.04
FPS Average
2020.2 ubuntu18.04
FPS Average
2020.1→2020.2
高速化
CPUCPUCPU7.447.269.94137%
CPUCPUGPU13.3414.0813.9499%
CPUCPUMYRIAD13.5613.9813.6698%
CPUGPUCPU7.287.79.96129%
CPUGPUGPU13.9614.314.66103%
CPUGPUMYRIAD14.7615.0815.48103%
CPUMYRIADCPU7.687.3210.02137%
CPUMYRIADGPU14.9415.2415.1499%
CPUMYRIADMYRIAD14.915.1215.34101%
GPUCPUCPU1111.3215.06133%
GPUCPUGPU27.4829.830.3102%
GPUCPUMYRIAD27.6229.3430.94105%
GPUGPUCPU10.6211.5215.14131%
GPUGPUGPU24.9825.8228.62111%
GPUGPUMYRIAD33.4234.1436.42107%
GPUMYRIADCPU10.9211.815.68133%
GPUMYRIADGPU33.836.8636.699%
GPUMYRIADMYRIAD34.3436.938.14103%
MYRIADCPUCPU10.229.912.82129%
MYRIADCPUGPU21.9821.822.1101%
MYRIADCPUMYRIAD22.2622.3221.697%
MYRIADGPUCPU9.549.2813.22142%
MYRIADGPUGPU22.3822.723.32103%
MYRIADGPUMYRIAD25.325.325.54101%
MYRIADMYRIADCPU10.3210.1613.32131%
MYRIADMYRIADGPU24.6625.124.6898%
MYRIADMYRIADMYRIAD25.8625.8425.78100%

次に高速化されている順に並び変えてみましょう
並び変えてみると、-d_lprにCPUがあるものが上位にあります
このオプションは、License Plate Recognitionをどのデバイスで行うかと言うオプションです

-d-d_va-d_lpr2020.1 ubuntu18.04
FPS Average
2020.2 ubuntu18.04
FPS Average
2020.1→2020.2
高速化
MYRIADGPUCPU9.2813.22142%
CPUCPUCPU7.269.94137%
CPUMYRIADCPU7.3210.02137%
GPUCPUCPU11.3215.06133%
GPUMYRIADCPU11.815.68133%
GPUGPUCPU11.5215.14131%
MYRIADMYRIADCPU10.1613.32131%
MYRIADCPUCPU9.912.82129%
CPUGPUCPU7.79.96129%
GPUGPUGPU25.8228.62111%
GPUGPUMYRIAD34.1436.42107%
GPUCPUMYRIAD29.3430.94105%
GPUMYRIADMYRIAD36.938.14103%
MYRIADGPUGPU22.723.32103%
CPUGPUMYRIAD15.0815.48103%
CPUGPUGPU14.314.66103%
GPUCPUGPU29.830.3102%
CPUMYRIADMYRIAD15.1215.34101%
MYRIADCPUGPU21.822.1101%
MYRIADGPUMYRIAD25.325.54101%
MYRIADMYRIADMYRIAD25.8425.78100%
CPUMYRIADGPU15.2415.1499%
GPUMYRIADGPU36.8636.699%
CPUCPUGPU14.0813.9499%
MYRIADMYRIADGPU25.124.6898%
CPUCPUMYRIAD13.9813.6698%
MYRIADCPUMYRIAD22.3221.697%

MYRIADはHWですので、基本的には違いが出ないはずです
グラフ上でも100%の値が出ています
推測ですが、並列化云々の調査は必要ですが、GPUの高速化は粛々とという感じで、今回のアップデートではCPUの高速化が大きいのではないでしょうか?