OpenVINO toolkit 2020.4 ベンチマーク

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

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

Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz 
DDR4-3733 16GB
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
-d-d_va-d_lprFPS Average
CPUCPUCPU82.48
CPUCPUGPU111.6
CPUCPUMYRIAD70.59
CPUGPUCPU89.32
CPUGPUGPU102.11
CPUGPUMYRIAD71.13
CPUMYRIADCPU86.83
CPUMYRIADGPU108.92
CPUMYRIADMYRIAD56.42
GPUCPUCPU88.29
GPUCPUGPU102.68
GPUCPUMYRIAD67.85
GPUGPUCPU86.64
GPUGPUGPU90.75
GPUGPUMYRIAD69.08
GPUMYRIADCPU85.07
GPUMYRIADGPU68.77
GPUMYRIADMYRIAD58.34
MYRIADCPUCPU22.15
MYRIADCPUGPU23.03
MYRIADCPUMYRIAD19.88
MYRIADGPUCPU22.24
MYRIADGPUGPU21.67
MYRIADGPUMYRIAD20.27
MYRIADMYRIADCPU18.93
MYRIADMYRIADGPU18.58
MYRIADMYRIADMYRIAD14.32

いつも使用しているATOMマシンで比較してみます

Intel(R) Atom(TM) Processor E3950 @ 1.60GHz
MemTotal:8012260 kB
Ubuntu 18.04.4 LTS
-d-d_va-d_lpr2020.3 FPS Average2020.4 FPS Average比較
CPUCPUCPU8.7210115%
CPUCPUGPU14.1214.06100%
CPUCPUMYRIAD14.0413.6697%
CPUGPUCPU9.969.94100%
CPUGPUGPU14.6414.2898%
CPUGPUMYRIAD15.5215.0297%
CPUMYRIADCPU10.069.9299%
CPUMYRIADGPU15.1215.1100%
CPUMYRIADMYRIAD15.314.6296%
GPUCPUCPU14.6815.4105%
GPUCPUGPU30.1831.34104%
GPUCPUMYRIAD30.4431.14102%
GPUGPUCPU15.1415.16100%
GPUGPUGPU29.4829.0298%
GPUGPUMYRIAD36.0836.68102%
GPUMYRIADCPU15.0815.34102%
GPUMYRIADGPU36.1437.16103%
GPUMYRIADMYRIAD35.4638.66109%
MYRIADCPUCPU13.112.8498%
MYRIADCPUGPU21.9222.02100%
MYRIADCPUMYRIAD21.8822.16101%
MYRIADGPUCPU13.0212.999%
MYRIADGPUGPU23.8823.8100%
MYRIADGPUMYRIAD26.2225.999%
MYRIADMYRIADCPU13.1813.36101%
MYRIADMYRIADGPU25.3625.199%
MYRIADMYRIADMYRIAD25.7825.4699%

若干違いが出ているものもありますが、極端に変わるものはありませんでした

最初のCPUのみの値は15%アップになっていますが、恐らくクロックが安定していなかったためだと思われます
今後は値が最大、最小を省いて平均値を出します

全体的に見てベンチマークが変わらず、ブラッシュアップされているのは良いことだと思います

環境構築(apt ubutu18.04編)

OpenVINO toolkitのインストールはGUIでやらないといけないのかなと思っていたのですが、aptで取得できることに気づきましたので…
やってみてわかったのですが、これが一番簡単なインストール方法かもしれません

インストールの前に

  • インターネット環境

インストールされるコンポーネント

コンポーネント説明
Model OptimizerThis tool imports, converts, and optimizes models, which were trained in popular frameworks, to a format usable by Intel tools, especially the Inference Engine.
Popular frameworks include Caffe*, TensorFlow*, MXNet*, and ONNX*.
Inference Engine
ディープラーニングエンジン
アプリケーション組み込みライブラリ
Drivers and runtimes for OpenCL™ version 2.1Enables OpenCL on the GPU/CPU for Intel® processors
Intel® Media SDKOffers access to hardware accelerated video codecs and frame processing
OpenCVIntel Hardware用にコンパイルされたOpenCV
Sample Applications推論エンジンを使用するためのコンソールデモアプリケーション
DemosA set of console applications that demonstrate how you can use the Inference Engine in your applications to solve specific use-cases
Additional ToolsA set of tools to work with your models
Documentation for PreTrained ModelsDocumentation for the pre-trained models available in the Open Model Zoo repo

プラットフォーム

ハードウェアの制限

  • 6th-10th Generation Intel® Core™
  • Intel® Xeon® v5 family
  • Intel® Xeon® v6 family
  • Intel® Neural Compute Stick 2

OS

  • Ubuntu 18.04.x long-term support (LTS), 64-bit
  • CentOS 7.4, 64-bit (for target only)
  • Yocto Project v3.0, 64-bit (for target only and requires modifications)

ソフトウェアのインストール

今回はUbuntu18.04にOpenVINO toolkit 2020.3をaptを使用してセットアップします

必要なソフトウェア

  • 特になし

OpenVINO Toolkit のインストール

wget -O GPG_KEY https://apt.repos.intel.com/openvino/2020/GPG-PUB-KEY-INTEL-OPENVINO-2020?elq_cid=6195740&erpm_id=9311153

sudo apt-key add GPG_KEY 
echo "deb https://apt.repos.intel.com/openvino/2020 all main" | sudo tee /etc/apt/sources.list.d/intel-openvino-2020.list
sudo apt update
sudo apt-get install intel-openvino-dev-ubuntu18-2020.3.194
cd /opt/intel/openvino/deployment_tools/demo/ 

ここから先は通常のインストールと同じになります

外部依存ソフトウェアのインストール

openvino@ubuntu$ cd /opt/intel/openvino/install_dependencies/
openvino@ubuntu$ sudo -E ./install_openvino_dependencies.sh 
 

 This script installs the following OpenVINO 3rd-party dependencies:
   1. GTK+, FFmpeg and GStreamer libraries used by OpenCV
   2. libusb library required for Myriad plugin for Inference Engine
   3. build dependencies for OpenVINO samples
   4. build dependencies for GStreamer Plugins
  
環境により異なりますが、上記ライブラリが自動的にインストールされます

環境変数の設定

openvino@ubuntu$ source /opt/intel/openvino/bin/setupvars.sh

#ログイン時に環境変数を有効にする場合
vi <user_directory>/.bashrc
#最終行に下記を追加
source /opt/intel/openvino/bin/setupvars.sh 

Model Optimizer の設定

openvino@ubuntu$ cd /opt/intel/openvino/deployment_tools/model_optimizer/install_prerequisites
 openvino@ubuntu$ sudo ./install_prerequisites.sh

インストールのチェック

openvino@ubuntu$ cd /opt/intel/openvino/deployment_tools/demo
openvino@ubuntu$ ./demo_squeezenet_download_convert_run.sh 

Demo check

openvino@ubuntu$ cd /opt/intel/openvino/deployment_tools/demo
openvino@ubuntu$ ./demo_security_barrier_camera.sh

GPU関連モジュールインストール

openvino@ubuntu$ cd /opt/intel/openvino/install_dependencies/
openvino@ubuntu$ sudo -E su
root@ubuntu# ./install_NEO_OCL_driver.sh

Neural Compute Stick2 の使用

#usersグループにカレントユーザーを加えます 
$ sudo usermod -a -G users "$(whoami)"

#NCS2用のルールをコピーし、リブートします
$ sudo cp /opt/intel/openvino/inference_engine/external/97-myriad-usbboot.rules /etc/udev/rules.d/
$ sudo udevadm control --reload-rules
$ sudo udevadm trigger
$ sudo ldconfig 

aptでインストールすると楽ですね

ビデオ会議でのwebカメラのオン・オフユースケース(姿勢推定編)

OpenVINOを実際に使用したユースケースを想定し、プログラムを作成しているシリーズ。

前回は顔認識を使用して、自分以外の顔が写り込む、または、退席した時(誰も居なくなった)場合に、ビデオ会議のカメラをオフにするという内容でした。今回も引き続きビデオ会議を取り上げてみます。

きっかけ・ゴール

テレビ会議が一気に普及し、自宅仕事が増えてる状況ですね。暑くなってきましたし、上だけフォーマルな人も増えているのは分かります。自分も今は短パンです。YouTubeで「Luke Ming Flanagan underwear speech」とか「Reporter Caught With No Pants Live on Air」とかで検索すると、ウッカリさんが面白ニュースとしていじられていますね。気持ちは分かりますよ。暑いですもん。

このようなウッカリさんの事故を防ぐためには、「ビデオ会議にはちゃんとした格好で出ましょう」みたいなルールを作るのも良いかもしれませんが、それではつまらないルールが増えていくばかり。失敗学でも言われているように個人に依存せず、システム的に防止する事が必要だなあ。と思っていたら、作っている方がいらっしゃいました。

https://www.hackster.io/nickbild/safe-meeting-b66324

記事を読んでいると、「Safe Meeting prevents embarrassing and unprofessional situations by stopping your video stream if certain attire that’s inappropriate for business is detected.」だそうです。”ビジネスに相応しくない”というところが気になりますね。いろんなパンツとかどうやって検出しているんでしょう。謎です。セクスウィなパンツや、逆に派手なスーツやドレスもちゃんと判定してくれるのでしょうか。

という訳で、今回のユースケースではもっと単純化して「姿勢推定で腰より下が映ったら、ビデオ会議側のカメラをオフにする」というゴールにしたいと思います。

環境について

本ユースケースの実行環境はWindows10(以降、Win10)です。
  • Windows 10
  • Logicool c270 x 2台
  • ELECOM U3H-A408SBK
  • Jitsiはクラウドサービスを利用(https://meet.jit.si)
  • モデル:human-pose-estimation-001
  • 言語 :c++, powershell, bat
  • webカメラは2台使います。1台はビデオ会議用、1台は顔認識用です。今回はc270を使いました。webカメラも価格が高騰しているようですね。Win10で使えればお手元のカメラで問題無いと思います。

    Webカメラ2台、キーボード、マウスをWin10に挿すと、ハードにもよりますが、バスパワーが不足する状況になるかもしれません。そこで、セルフパワーのUSBハブの出番です。未だお持ちでない方はぜひ購入ください。USB3.0対応の方が良いですね。(Amazonの手先ではありません)

    今回利用したビデオ会議システムはオープンソースのjitsi(https://meet.jit.si)です。jitsiはもっと普及しても良いと思うOSSです。なお、理論上は他のビデオ会議でも本記事は使用可能です。

    姿勢推定について

    姿勢推定はOpenVINOに含まれている、human_pose_estimation_demo(c++)を流用しました。モデルはhuman-pose-estimation-001となります。まず、OpenVINOのドキュメントを確認しました。

    https://docs.openvinotoolkit.org/latest/_models_intel_human_pose_estimation_0001_description_human_pose_estimation_0001.html

    This is a multi-person 2D pose estimation network (based on the OpenPose approach) with tuned MobileNet v1 as a feature extractor. For every person in an image, the network detects a human pose: a body skeleton consisting of keypoints and connections between them. The pose may contain up to 18 keypoints: ears, eyes, nose, neck, shoulders, elbows, wrists, hips, knees, and ankles.

    とあります。キーポイントとして18箇所を判定するんですね。腰は何番だろうと思ったら、8番と11番でした。つまり、姿勢推定の結果、8番と11番に値が存在すると、腰が写っちゃっているという事になりますね。

    WebカメラのOnOffについて

    上記のとおり、姿勢推定の結果、腰が写った場合(8番と11番に値がある)にWebカメラをオフにすると良さそうだ。という事が分かりました。

    ”カメラをオフ”を手動で行う方法は、[コンピュータの管理]-[デバイスマネージャー]-[イメージングデバイス]から対象のカメラを右クリックして「デバイスを無効にする」という手順になります。これをDevConかPowerShellのどちらかで行います。

    DevCon

    https://docs.microsoft.com/ja-jp/windows-hardware/drivers/devtest/devcon-exampleshttps://docs.microsoft.com/ja-jp/windows-hardware/drivers/devtest/devcon-examples?fbclid=IwAR3tbimojRY0lercRto08y6QfQPQLMKoPAc52Y2tua1w3KA4TsVj8aJYWxo#ddk_example_30_disable_devices_by_an_id_pattern_tools

    PowerShell

    https://docs.microsoft.com/en-us/powershell/module/pnpdevice/enable-pnpdevice?view=win10-ps

    ここで注意なのは、どちらも管理者権限で実行する必要があるという事です。管理者権限で呼び出す方法は以下のページが参考になりそうですが、ここでは面倒だったので時間優先でUACを無効にしてダイアログが出るのを回避しました。正式に物を作る際は綺麗なお作法でお願いします。

    https://qiita.com/zetamatta/items/d41552c383605b24a8c2

    実行のようす

    最後に

    前回はRasPi4/Python/顔認証で、今回はWin10/C++/姿勢推定で、ビデオ会議のカメラの制御を実装しました。実現したい事やエンジニアが使える言語に応じて、モデルや言語を変えて貰えば良いと思います。OpenVINOでいろいろ挑戦してみてください。

    ビデオ会議でのwebカメラのオン・オフユースケース(顔認識編)

    OpenVINOを実際に使用したユースケースを想定し、プログラムを作成しているシリーズ。今回はビデオ会議を取り上げてみます。

    みなさんご存知の通り、新型コロナの影響でビデオ会議の導入・利用が一気に進みました。また、ビジネス利用だけで無く、”宅飲み”など、普段使いのツールとして利用されている方も多いと思います。

    ビデオ会議あるあるとして、家族が写り込んだり、離席した場合に部屋を映したく無いという状況があると思います。みなさんどうされていますか?この解決手段を考えてみます。まずはYouTubeの動画をご覧ください。

    環境について

    本ユースケースの実行環境はRaspberryPi 4(以降、RasPi)です。
  • RaspberryPi 4
  • intel Neural Compute Stick 2
  • Logicool c270 x 2台
  • ELECOM U3H-A408SBK
  • Jitsi(on ubuntu 18.04)
  • モデル:face-detection-retail-0004
  • 言語 :python
  • 宝島社 もっとひょっこりはんをさがせ!
  • RasPiは安くて便利な環境です。私が講師を担当していた小学5、6年生対象のプログラミング・ロボット講座でもRasPiを配布し、みんな楽しく使っていました。(小学生がLinux使う世の中なんて、いい意味で想定外ですよ)

    RasPi4、USBハブ、intel Neural Compute Stick2

    webカメラは2台使います。1台はビデオ会議用、1台は顔認識用です。今回はc270を使いました。webカメラも価格が高騰しているようですね。RasPiで使えればお手元のカメラで問題無いと思います。

    RasPiでOpenVINOを使うには、Intel Neural Compute Stick 2(以降、NCS2) が必須です。Amazonで1万円程度で購入出来ますので、未だお持ちでない方はぜひ購入ください。

    Webカメラ2台とNCS2、キーボード、マウスをRasPiに挿すと、バスパワーが不足するという状況になります。ssh,VNCで接続してもキーボード・マウスだけが回避出来るので心もと無いです。そこで、セルフパワーのUSBハブの出番です。未だお持ちでない方はぜひ購入ください。USB3.0対応の方が良いですね。(Amazonの手先ではありません)

    今回利用したビデオ会議システムはオープンソースのjitsi(https://jitsi.org)です。ubutu server 18.04 上に構築済のローカルjitsiを利用しました。jitsiはもっと普及しても良いと思うOSSです。なお、理論上は他のビデオ会議でも本記事は使用可能です。

    RasPiのモデル利用について

    実際の顔認識用のデモアプリは流用するとして、ここでは実行時に注意する点についてご案内します。以下のようにモデル利用時にエラーが出る場合、まずはモデルを疑ってください。忘れていると1日くらい損します。

    [ INFO ] 2020-06-05 11:14:48,240 Loading models [ INFO ] 2020-06-05 11:14:48,241 Loading the model from '/home/pi/openvino/models/face-detection-retail-0004/FP16/face-detection-retail-0004.xml' face_recognition_demo.py:177: DeprecationWarning: Reading network using constructor is deprecated. Please, use IECore.read_network() method instead model = IENetwork(model_description_path, model_weights_path) Traceback (most recent call last): File "face_recognition_demo.py", line 446, in main() File "face_recognition_demo.py", line 441, in main visualizer = Visualizer(args) File "face_recognition_demo.py", line 240, in __init__ self.frame_processor = FrameProcessor(args) File "face_recognition_demo.py", line 131, in __init__ face_detector_net = self.load_model(args.m_fd) File "face_recognition_demo.py", line 177, in load_model model = IENetwork(model_description_path, model_weights_path) File "ie_api.pyx", line 1099, in openvino.inference_engine.ie_api.IENetwork.__cinit__ RuntimeError: fc7_mbox_priorbox/naked_not_unsqueezed has zero dimension that is not allowable

    このようなエラーが出る場合は、2019R3のモデルをダウンロードして使ってみてください。(他のエラーパターンもあるので基本的には2019R3で良いかもしれません) https://download.01.org/opencv/2019/open_model_zoo/R3/20190905_163000_models_bin/

    なお、本ユースケースでは、face-detection-retail-0004を利用しました。

    WebカメラのOnOffについて

    基本的に、顔認識用カメラ側でnot(自分の顔認識がされた)場合に、web会議側のカメラをオフにする動作となります。以下のページが参考になりました。ありがとうございます。

    https://www.raspberrypi.org/forums/viewtopic.php?t=242059

    https://artfinex.co.jp/wp/wp-content/uploads/2019/03/afx_RaspberryPiRaspbianUSB_Reset_UHF.pdf

    最後に

    ビデオ会議ではいろんな事故がありますが、割と下半身をぽんぽんすーにしている人も多いのがびっくりです。今後は、下半身を検出してカメラをオフにする仕組みを作りたいと思います。

    高負荷環境でのベンチマーク

    一般的にOpenVINOやその他のAI toolkitを一般用途で使用する場合は、24時間365日運用が前提だと思います
    また、処理は常に高負荷がかかった状態だと思います
    このような状況を想像して、CPU,GPU,NCS2を使用した場合の変化を実験してみました

    実験環境を用意します
    今回はOpenVINOが走るマシンと3つのSSHを接続し、1つ目はOpenVINOのベンチマークソフト、2つ目はCPUのクロック確認、3つ目はCPU負荷用のベンチマークソフト実行を行いました
    ウィンドウは下記のようになります

    まずは何も負荷をかけずに、CPU,GPU,NCS2(MYRIAD)を指定したベンチマークを実行します
    実行時のオプションは下記の通り

    inference_engine_cpp_samples_build/intel64/Release/benchmark_app -i test_images -m ~/openvino_models/intel/vehicle-detection-adas-0002/FP16/vehicle-detection-adas-0002.xml
    (test_imagesにはcar.pngのみを入れています)

    このコマンドにそれぞれ-d CPU, -d GPU, -d MYRIADを指定して、ベンチマークを取得します

    今回のHW環境ですが、
    CPUスペックは、Intel(R) Atom(TM) Processor E3950 @ 1.60GHz
    OSはubuntu18.04を使用し、Xwindowなどの画面出力は行っていません

    負荷なし、CPUでの実行(11.02FPS)
    負荷なし、GPUでの実行(36.57FPS)
    負荷なし、NCS2での実行(25.01FPS)
    高負荷時、CPUでの実行(5.45FPS)
    高負荷時、GPUでの実行(31.10FPS)
    高負荷時、NCS2での実行(25.16FPS)

    下記は無負荷、高負荷時のFPSを表にしたものです

    無負荷高負荷増減率
    CPU11.02FPS5.45FPS49%
    GPU36.57FPS31.10FPS85%
    NCS225.01FPS25.16FPS101%

    CPUに負荷がかかっている場合は、半分以下のFPSとなります
    アプリケーションのプライオリティにも関係しますが、高負荷時に推論を実行する場合はこのような問題が発生します
    一方、GPUでの実行は85%となっています。これはキャッシュへのアクセスなどがCPU内で行われていますので、このような減少率になっていると思いますが、細かな点は別の機会に書くことにします
    最後に、NCS2(MYRIAD)での実行は、増減がありませんでした
    NCS2の場合は、外部HWに処理を流しますので、使用メモリが少ない場合は有利に働く可能性が大きいです

    組み込み機器にOpenVINOなどを組みこむ場合は、CPUの負荷の見積もりなどを考え、うまくGPU,NCS2に処理を流してあげることにより、低価格でシステムが実現できるのではないでしょうか

    環境構築(ubuntu18.04編)

    インストールの前に

    • インターネット環境

    ※2020.06.04追記:OpenVINO 2020.3 LTS Release も同様の手順で入る事を確認済です
    ※2020.07.21追記:OpenVINO 2020.4 Release も同様の手順で入る事を確認済です

    インストールされるコンポーネント

    コンポーネント説明
    Model OptimizerThis tool imports, converts, and optimizes models, which were trained in popular frameworks, to a format usable by Intel tools, especially the Inference Engine.
    Popular frameworks include Caffe*, TensorFlow*, MXNet*, and ONNX*.
    Inference Engine
    ディープラーニングエンジン
    アプリケーション組み込みライブラリ
    Drivers and runtimes for OpenCL™ version 2.1Enables OpenCL on the GPU/CPU for Intel® processors
    Intel® Media SDKOffers access to hardware accelerated video codecs and frame processing
    OpenCVIntel Hardware用にコンパイルされたOpenCV
    Sample Applications推論エンジンを使用するためのコンソールデモアプリケーション
    DemosA set of console applications that demonstrate how you can use the Inference Engine in your applications to solve specific use-cases
    Additional ToolsA set of tools to work with your models
    Documentation for PreTrained ModelsDocumentation for the pre-trained models available in the Open Model Zoo repo

    プラットフォーム

    ハードウェアの制限

    • 6th-10th Generation Intel® Core™
    • Intel® Xeon® v5 family
    • Intel® Xeon® v6 family
    • Intel® Neural Compute Stick 2

    OS

    • Ubuntu 18.04.x long-term support (LTS), 64-bit
    • CentOS 7.4, 64-bit (for target only)
    • Yocto Project v3.0, 64-bit (for target only and requires modifications)

    ソフトウェアのインストール

    今回はUbuntu18.04にOpenVINO toolkit 2020.2をセットアップします
    CPUスペックは、Intel(R) Atom(TM) Processor E3950 @ 1.60GHzとなります

    必要なソフトウェア

    • CMake 3.4 or higher
    • Python 3.5 or higher

    OpenVINO ToolKIT のダウンロード

    こちらから登録を行い、ダウンロードして下さい

    OpenVINO Toolkit のインストール

    openvino@ubuntu$ ls l_openvino_toolkit_p_2020.2.120.tgz
    
    openvino@ubuntu$ tar -xvzf l_openvino_toolkit_p_2020.2.120.tgz
    
    openvino@ubuntu$ cd l_openvino_toolkit_p_2020.2.120/
    
    #コマンドラインインストール
    openvino@ubuntu$ sudo ./install.sh
     Welcome
     --------------------------------------------------------------------------------
     Welcome to the Intel® Distribution of OpenVINO™ toolkit 2020.2 for Linux*
     --------------------------------------------------------------------------------
     The Intel installation wizard will install the Intel® Distribution of OpenVINO™
     toolkit 2020.2 for Linux* to your system.
     
    
     The Intel® Distribution of OpenVINO™ toolkit quickly deploys applications and
     solutions that emulate human vision. Based on Convolutional Neural Networks
     (CNN), the toolkit extends computer vision (CV) workloads across Intel®
     hardware, maximizing performance. The Intel Distribution of OpenVINO toolkit
     includes the Intel® Deep Learning Deployment Toolkit (Intel® DLDT).
     
    
     Before installation please check system requirements:
     https://docs.openvinotoolkit.org/2020.2/_docs_install_guides_installing_openvino
     _linux.html#system_requirements
     and run following script to install external software dependencies:
     
    
     sudo -E ./install_openvino_dependencies.sh
     
    
     Please note that after the installation is complete, additional configuration
     steps are still required.
     
    
     For the complete installation procedure, refer to the Installation guide:
     https://docs.openvinotoolkit.org/2020.2/_docs_install_guides_installing_openvino
     _linux.html.
     
    
     You will complete the following steps:
        1.  Welcome
        2.  End User License Agreement
        3.  Prerequisites
        4.  Configuration
        5.  Installation
        6.  First Part of Installation is Complete
     
    
     --------------------------------------------------------------------------------
     Press "Enter" key to continue or "q" to quit:  

    基本的には、Enterで進めていくとインストールされます
    途中で、必要なアプリケーションなどのチェックが入りますので、
    もし不足している場合は、画面に従いインストールが必要になります

    #必要であればここで別端末を利用してソフトウェアをインストールします
    openvino@ubuntu$ sudo apt-get install cmake
    defaultのまま設定をすすめていくと、
    
     First Part of Installation is Complete
     --------------------------------------------------------------------------------
     The first part of Intel® Distribution of OpenVINO™ toolkit 2020.2 for Linux*
     has been successfully installed in 
     /opt/intel/openvino_2020.2.120.
     
    
     ADDITIONAL STEPS STILL REQUIRED: 
     
    
     Open the Installation guide at:
      https://docs.openvinotoolkit.org/2020.2/_docs_install_guides_installing_openvin
     o_linux.html 
     and follow the guide instructions to complete the remaining tasks listed below:
     
    
      • Set Environment variables 
      • Configure Model Optimizer 
      • Run the Verification Scripts to Verify Installation and Compile Samples
     
    
     --------------------------------------------------------------------------------
     Press "Enter" key to quit:  

    インストール完了です

    外部依存ソフトウェアのインストール

    openvino@ubuntu$ cd /opt/intel/openvino/install_dependencies/
    openvino@ubuntu$ sudo -E ./install_openvino_dependencies.sh 
     
    
     This script installs the following OpenVINO 3rd-party dependencies:
       1. GTK+, FFmpeg and GStreamer libraries used by OpenCV
       2. libusb library required for Myriad plugin for Inference Engine
       3. build dependencies for OpenVINO samples
       4. build dependencies for GStreamer Plugins
      
    環境により異なりますが、上記ライブラリが自動的にインストールされます

    環境変数の設定

    openvino@ubuntu$ source /opt/intel/openvino/bin/setupvars.sh
    
    #ログイン時に環境変数を有効にする場合
    vi <user_directory>/.bashrc
    #最終行に下記を追加
    source /opt/intel/openvino/bin/setupvars.sh 
    

    Model Optimizer の設定

    openvino@ubuntu$ cd /opt/intel/openvino/deployment_tools/model_optimizer/install_prerequisites
     openvino@ubuntu$ sudo ./install_prerequisites.sh

    インストールのチェック

    openvino@ubuntu$ cd /opt/intel/openvino/deployment_tools/demo
    openvino@ubuntu$ ./demo_squeezenet_download_convert_run.sh 

    Demo check

    openvino@ubuntu$ cd /opt/intel/openvino/deployment_tools/demo
    openvino@ubuntu$ ./demo_security_barrier_camera.sh

    2020.1リリースよりも若干早くなっているようです

    GPU関連モジュールインストール

    openvino@ubuntu$ cd /opt/intel/openvino/install_dependencies/
    openvino@ubuntu$ sudo -E su
    root@ubuntu# ./install_NEO_OCL_driver.sh

    ここで過去にOpenVINOをインストールしていた場合、依存関係で下記のようなエラーが発生します

     dpkg: dependency problems prevent removal of intel-igc-core:
      intel-igc-opencl depends on intel-igc-core (= 1.0.2597).
     
    
     dpkg: error processing package intel-igc-core (--purge):
      dependency problems - not removing
     Errors were encountered while processing:
      intel-igc-core
     ERROR: unable to remove intel-igc-core
            please resolve it manually and try to launch the script again. 

    intel-igc-openclがintel-igc-coreに依存関係があるためで、この場合は手動でintel-igc-openclを削除しましょう(下記コマンド参照)

    dpkg -r intel-igc-opencl

    Demo check

    openvino@ubuntu$ cd /opt/intel/openvino/deployment_tools/demo
    openvino@ubuntu$ ./demo_security_barrier_camera.sh -d GPU

    CPUと比較して3倍弱のスピードが出ています

    Neural Compute Stick2 の使用

    #usersグループにカレントユーザーを加えます 
    $ sudo usermod -a -G users "$(whoami)"
    
    #NCS2用のルールをコピーし、リブートします
    $ sudo cp /opt/intel/openvino/inference_engine/external/97-myriad-usbboot.rules /etc/udev/rules.d/
    $ sudo udevadm control --reload-rules
    $ sudo udevadm trigger
    $ sudo ldconfig 

    2020.1と同様にGPUと同等程度の速さとなりました

    お疲れ様でした
    インストールはこれで完了です

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

    Intel DevCloud for the Edge を使い倒す(その6) から続く記事の7回目です
    今回が最終回となります
    ( Intel DevCloudの記事はこちら

    いくつかのEdge Serverに処理を投げることはできるようになりましたので、これで環境は揃いました
    自分の必要な環境を調べて実行することが可能となったことと思います

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

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

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

    下記のようにpbsnodesコマンドを使用すると、サーバーリストが表示されます

    u41585@s099-n004:~/security_log$ pbsnodes| grep properties | grep ncs
          properties = idc004nc2,compnode,iei,tank-870,openvino2020.2,intel-core,i5-6500te,skylake,intel-hd-530,ram8gb,net1gbe,ncs,intel-ncs2
          properties = idc004nc2,compnode,iei,tank-870,openvino2020.2,intel-core,i5-6500te,skylake,intel-hd-530,ram8gb,net1gbe,ncs,intel-ncs2
          properties = idc008u2g,compnode,up-squared,grove,openvino2020.2,intel-atom,e3950,apollo-lake,intel-hd-505,ram4gb,net1gbe,ncs,intel-ncs2
          properties = idc008u2g,compnode,up-squared,grove,openvino2020.2,intel-atom,e3950,apollo-lake,intel-hd-505,ram4gb,net1gbe,ncs,intel-ncs2
          properties = idc008u2g,compnode,up-squared,grove,openvino2020.2,intel-atom,e3950,apollo-lake,intel-hd-505,ram4gb,net1gbe,ncs,intel-ncs2

    上記の結果から、Intel Neural Compute Stickを使用したい場合は、idc004nc2, idc008u2gを使用すれば良いことが分かります
    これを利用して、いつものようにベンチマークを走らせます

    for nm in idc004nc2, idc008u2g;
    do
      qsub -l nodes=1:$nm security2.bash ;
    done

    このようにすれば自動的にベンチマーク結果が得られます
    いつ終わるかをチェックするためには、下記のようにwatchコマンドを使うと便利です

    Every 2.0s: qstat                                                                                                                     s099-n004: Sun May  3 06:30:48 2020
     Job ID                    Name             User            Time Use S Queue
     
     4036.v-qsvr-2              …ub-singleuser u41585          00:00:07 R jupyterhub
     4050.v-qsvr-2              security2.bash   u41585                 0 R batch
     4051.v-qsvr-2              security2.bash   u41585                 0 R batch
     4052.v-qsvr-2              security2.bash   u41585                 0 R batch

    または、下記のようにスクリプトによるループでも構いません

    for ((;;));
    do
      qstat;
      #if条件など
      sleep 3;
    done

    もしqueueに入れたまま動かないJobがある場合は、
    qdel job番号
    でqueueからjobを削除することが可能です

    これでDevCloud for the Edgeの説明は終わりですが、まだまだ説明しきれていない部分はあります
    ぜひ便利な機能を見つけてください

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

    Intel DevCloud for the Edge を使い倒す(その5) から続く記事の6回目です
    今回は実行ファイルをいろいろなサーバーで実行してみます
    ( Intel DevCloudの記事はこちら

    Edge Serverで実行ファイルを実行することはすでにその5で行いましたので、色々なサーバーを使用して実行ファイルを走らせてみます

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

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

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

    まずは実行したいサーバーをピックアップします
    例えば、Skylake, Kabylake, Whiskeylakeの各CPUで実行したいのであれば、
    リストから、skylake, kaby-lake, whiskye-lake を選択してみます
    これらのマシンに一度に処理を投げるために下記のスクリプトで実行します

    for nm in skylake kaby-lake whiskey-lake;
    do
      qsub -l nodes=1:$nm security2.bash ;
    done

    サーバーによっては時間制限があるかもしれませんし、他の方に迷惑がかかるかもしれませんので、あまり処理の長いスクリプトは書かないようにしましょう

    security barrier camera demoのそれぞれのserverでの結果が得られました
    結果は下記のようにJobの番号ごとに出力されます

    u41585@s099-n004:~/security_log$ ls security2.bash.*
     security2.bash.e3571  security2.bash.e3708  security2.bash.e3792  security2.bash.o3572  security2.bash.o3735
     security2.bash.e3572  security2.bash.e3735  security2.bash.o3571  security2.bash.o3708  security2.bash.o3792

    この結果をもとにFPSを抜き出すと、サーバーごとの結果が集計できました

    世代周波数バーストコア/スレッドキャッシュ-d-d_va-d_lprAverage FPS
    idc001skli5-6500teskylake62.33.34C/4T6MBCPUCPUCPU28.975
    idc006kbli5-7500tkaby-lake72.73.34C/4T6MBCPUCPUCPU28.825
    idc016ai7i7-8665uewhiskey-lakemyriadx-ma248591.74.44C/8T8MBCPUCPUCPU31.275

    CPUで処理しているので、順当な結果になっているようです
    このサーバーでの処理一回目を見てみると、下記のように非常に低い値となっています
    省電力モードに入っていたのでしょうね

    一回目 FPS
    idc001skl9.6
    idc006kbl8.6
    idc016ai77.5

    続いて、GPUでの処理を見てみましょう

    世代周波数バーストコア/スレッドキャッシュ-d-d_va-d_lprAverage FPS
    idc001skli5-6500teskylake62.33.34C/4T6MBGPUGPUGPU78.825インテル® HD グラフィックス 530
    idc006kbli5-7500tkaby-lake72.73.34C/4T6MBGPUGPUGPU89.525インテル® HD グラフィックス 630
    idc016ai7i7-8665uewhiskey-lakemyriadx-ma248591.74.44C/8T8MBGPUGPUGPU81.075インテル® UHD グラフィックス 620

    GPUでの処理は、ばらつきがあります
    skylakeとkabylakeの処理で10%以上の開きがあります
    またwhiskeylakeはskylakeと大差ありません
    これらのCPUに搭載されているGPUはskylakeのものがHD graphics 530, kabylakeがHD graphics 630, whiskeylakeがUHD graphics 620となり、530がGen9, 620,630がGen9.5になりますが、基本的な構成は変わっていません

    推測ですが、何度か数値測定を行わないといけない点、GPUの動作周波数などが関係している点などが考えられます

    つづく

    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:~$ 

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

    つづく