OpenVINO toolkit 2021.3 ベンチマーク

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

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

11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 
DDR4-4267 16GB
Ubuntu 20.04 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_lpr FPS Average
CPU CPU CPU 83.4
CPU CPU GPU 120.3
CPU CPU MYRIAD 84.7
CPU GPU CPU 86.1
CPU GPU GPU 118.5
CPU GPU MYRIAD 84.2
CPU MYRIAD CPU 88.1
CPU MYRIAD GPU 124.6
CPU MYRIAD MYRIAD 67.2
GPU CPU CPU 90.7
GPU CPU GPU 112.6
GPU CPU MYRIAD 78.0
GPU GPU CPU 95.4
GPU GPU GPU 98.4
GPU GPU MYRIAD 80.4
GPU MYRIAD CPU 93.6
GPU MYRIAD GPU 113.3
GPU MYRIAD MYRIAD 66.7
MYRIAD CPU CPU 30.4
MYRIAD CPU GPU 31.9
MYRIAD CPU MYRIAD 28.1
MYRIAD GPU CPU 30.6
MYRIAD GPU GPU 31.3
MYRIAD GPU MYRIAD 28.2
MYRIAD MYRIAD CPU 30.2
MYRIAD MYRIAD GPU 31.5
MYRIAD MYRIAD MYRIAD 26.3

安定して動作している様子です

OpenVINO toolkit 2021.1 ベンチマーク

TigerLake搭載機が入手できましたので設定に紆余曲折ありましたが、OpenVINO toolkit 2021.1のベンチマークを取りました
使用したアプリケーションは、security barrier c++ demoを使用しております

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

11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 
DDR4-4267 16GB
Ubuntu 20.04 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
CPUCPUCPU89.725
CPUCPUGPU123
CPUGPUCPU77.675
CPUGPUGPU108.575
GPUCPUCPU92.85
GPUCPUGPU112.55
GPUGPUCPU91.35
GPUGPUGPU105.25

MYRIADはまだ私の環境では安定していないので、設定が出来次第、ベンチマークを取る予定です。

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の動作周波数などが関係している点などが考えられます

    つづく