【Intel OpenVINO?教學】如何利用 Docker 快速創建OpenVINO 開發環境

慧聰教育網 2021-06-18 18:20 來源:慧聰教育網

歐尼克斯實境互動工作室 許哲豪(OmniXRI Jack Hsu)

【Intel OpenVINO?教學】如何利用 Docker 快速創建OpenVINO 開發環境

【慧聰教育網】2012 年 Alex Krizhevsky 利用卷積神經網絡(Convolutional Neural Network, CNN) AlexNet 以 15.3% Top5 錯誤率遠甩第二名好幾條街(26.1%),贏得 ImageNet 大規模視覺識別挑戰賽(ILSVRC)首獎,從此開啟人工智能、神經網絡、深度學習的新世代。自此各個廠商也紛紛推出自家的開發工具,搶奪人工智能市場。

2018 年 5 月 INTEL 有鑒于邊緣智能(Edge AI)設備的硬件效率遠低于云端機房,且不同硬件、開發工具間存在嚴重差異,造成工程師學習上極大的困擾,因此推出開放(免費)計算機視覺推理及神經網絡(深度學習)優化工具包「OpenVINO」 (Open Visual Inference & Neural Network Optimization Toolkit)[1][2]。

OpenVINO 整合了 OpenCV, OpenCL 等開源計算機視覺及加速運算函數庫,并支持多種操作系統(Windows, Linux),輕松搭配自家各種不同硬件加速運算平臺(Inetl CPU, GPU, FPGA, VPU, GNA),且支持各種常見 AI 開發框架(TensorFlow, Caffe, MXNet, ONNX, KALDI)訓練出的模型及參數,更有提供模型的優化工具使運算效率及模型大小得到更佳的輸出,最重要的是工程師只需寫一次程序就能在不同平臺上執行,大大降低了學習及部署的負擔。

早先 OpenVINO 的版本彈性雖然較大,但安裝程序冗長,一不小心容易造成步驟缺失導致系統無法正確運行。為解決此問題,OpenVINO 還推出了 Docker 安裝方式,輕松搞定安裝及執行問題,且可有效隔離不同版本及其它開發環境。接著就簡單說明“什么是 Docker?和虛擬機 VM 有何不同?”、“如何安裝 Docker 工作環境”及“如何使用 Docker 安裝 OpenVINO”,最后再通過一個范例來說明“如 何利用公開模型 mobilenet 執行圖像分類”。

*什么是 Docker?和虛擬機 VM 有何不同?

一般大家買來的計算機上大部份都是安裝微軟的 Windows 操作系統,如果遇到要開發 Liunx 相關應用程序時,可能有人會選擇安裝兩個操作系統,在重新啟動時選擇要執行那一個。雖然這種方式可完全掌控硬件資源(如 CPU, GPU, HDD, RAM)及開發環境(相關套件、函數庫),但每次切換操作系統都要重新啟動,實在過于麻煩。

為解決這個問題,于是就有人提出在主機操作系統(Host OS)上安裝一個虛擬機 (Virtual Machine, VM)監視器(Hypervisor),如 VMWare, VirtualBox 這類工具,方便安裝其它操作系統或者多種不同的開發環境,如 Fig. 1 左圖所示。雖然這樣很方便同時使用兩種以上的操作環境,但硬件資源要和主機系統共享且額外多了一些虛擬化轉換工作,所以執行效率較差,甚至有些硬件(如 GPU)無法直接使用,導致部份應用程序無法運作。

很多在 Linux 環境下開發程序的人都知道,它的應用程序不像在 Windows 下一個執行文件(*.exe)或搭配幾個動態函數庫(*.dll)就能順利執行,各種開發工具及相關套件包常會有版本不兼容問題。本來在 Linux 上也可以執行虛擬機(VM)來區隔不同開發環境,但效率實在太差,所以便有人開發出以一種類似大船載送貨柜,貨柜裝載各種不同大小、形狀貨物的執行環境,稱為 Docker。

如 Fig. 1 中圖所示,容器(Containers)就像貨柜,是用來裝載映像(Images)這樣的貨物,再由 Docker 引擎(大船承載)執行的概念。表面上看起來和 VM 沒什么不同,但最大差別就是它很輕量,不通過虛擬化直接驅動硬件資源,共享操作系統資源,所以啟用一個容器和映像僅須數秒,這和加載一個 VM 客操作系統核心要數分鐘差異頗大。以往 Docker 只能在 Linux 上運行,近年來已有支持 Window 及 Mac OS 的版本出現了。

一般 Docker 使用上極為方便,供貨商僅需將要提供的映像(Images)推上(Push)公開映像文件倉儲(Repository / Docker Hub),用戶再去拉下(Pull)想要的映像即可執行,如 Fig. 1 右圖所示。

【Intel OpenVINO?教學】如何利用 Docker 快速創建OpenVINO 開發環境

Fig. 1 VM 和 Docker 架構差異比較圖。(OmniXRI, Jan. 2021 整理制作)

*如何安裝 Docker 工作環境

為了后面能使用 Docker 快速安裝 Intel OpenVINO 工具包及相關環境,這里先介 紹如何在 Ubuntu 18.04 / 20.04 (Linux)環境下安裝 Docker。

首先啟動終端(Terminal)進入命令行操作模式,然后要確定是否有安裝舊版的 Docker(docker, docker-engine, docker.io 等),若有,則執行下列命令進行移除,因為最新版的 Docker 名稱已經變更了。

sudo apt-get remove docker docker-engine docker.io containerd runc

接著下載官方建議的快速安裝腳本并進行安裝。

curl -fsSL https://get.docker.com -o get-docker.sh

sudo sh get-docker.sh

由于 Docker 預設只能在 root(sudo)的權限下執行,為了方便一般用戶也能直接呼叫使用,可使用下列命令創建一個 Docker 群組,并將當前用戶添加至該群組中,注銷系統后再重新登錄,后續執行 Docker 相關命令就不用再加上 sudo 了。

sudo groupadd docker

sudo uermod -aG docker $USER

重新登錄后,便可執行下列命令測試 Docker 是否正常。

docker run hello-world

由于第一次執行,本機端并沒 hello-world 這個映像,所以會自動到 Docker Hub 尋找并下載。如果成功,會看到下面畫面。

【Intel OpenVINO?教學】如何利用 Docker 快速創建OpenVINO 開發環境

Fig. 2 Docker 執行 hello-world 映像執行結果。(OmniXRI Jan. 2021 整理制作) 后續若有需要除移 Docker Engine 及手動刪除相關路徑時,則可執行下列命令。

sudo apt-get purge docker-ce docker-ce-cli containerd.io

sudo rm -rf /var/lib/docker

另外這里補充幾個 Docker 常用指令,想了解更多 Docker 操作指令,可參考官網 [3]。

#  從 Docker Hub 拉下(下載)映像[映像名稱 xxxxx]

docker pull xxxxx

#  檢查目前已下載之映像

docker images

#  檢查目前正在執行的映像

docker ps

#  開始執行映像[映像名稱 xxxxx]

docker start xxxxx

#  停止執行映像[映像名稱 xxxxx]

docker stop xxxxx

如果想要知道更多 Docker 安裝信息,可參考官網[4]。另外想在 Windows 上安裝 Docker 的人,可參考官網[5]。

*如何使用 Docker 安裝 OpenVINO

Intel OpenVINO 對應不同操作系統(Windows, Linux, macOS, RaspbianOS)提供很多種安裝方式。近年來隨著各種容器技術興起,也開始支持像 Docker 這類直接安裝映像方式,充份解決用戶不熟悉安裝步驟及滿足開發者需要不同版本或開發環境隔離需求。

Intel OpenVINO 目前在 Docker Hub 上提供了多個映像[6]讓使用者下載(pull),其中有兩組使用率較高,openvino/workbench 用戶不需編程,直接操作圖型化接口就可測試各種模型的效率,openvino/ubuntu18_dev 則提供一般 Ubuntu 18.04 (Linux) 開發環境,本次測試將以后者為例。

首先執行下列指令將映像文件 openvino/ubuntu18_dev 從 Docker Hub 拉下(下載)至本機端。由于文件數量較多且較大(解壓縮后約 7.22GByte),所以根據網絡速度可能需要等待數分鐘到數十分鐘不等。

docker pull openvino/ubuntu18_dev

若想啟動映像文件,根據不同硬件執行下列命令。

# Intel CPU

docker run -it --rm openvino/ubuntu18_dev

# Intel GPU

docker run -it --rm --device /dev/dri openvino/ubuntu18_dev

# NCS2(單個 VPU)

docker run -it --rm --device-cgroup-rule='c 189:* rmw' -v

/dev/bus/usb:/dev/bus/usb openvino/ubuntu18_dev

# HDDL(多個 VPU)

docker run -it --rm --device=/dev/ion:/dev/ion -v /var/tmp:/var/tmp openvino/ubuntu18_dev

啟動 Docker 并指定執行的映像文件后命令行提示字符會顯示目前 OpenVINO 版本,默認啟動時就會執行環境變量設定(setupvars.sh),且安裝好 Python 3.6.9 及 OpenCV 4.5.1_OpenVINO (OpenVINO 刪減版)。如果想離開 Docker,則輸入 exit 再按 Enter 鍵即可回到正常命令行狀態,如 Fig. 3 所示。若想更完整了解 Docker 在 Linux 上安裝方式,可參考官網說明[7]。而 Docker 在 Windows 上安裝方式則參考另一份官網說明[8]。

【Intel OpenVINO?教學】如何利用 Docker 快速創建OpenVINO 開發環境

Fig. 3 檢查 Docker 本地端映像,啟動及離開 Docker 環境。(OmniXRI Jan. 2021 整理制作)

若不想使用 Docker 安裝,而想直接在 Linux 上安裝 OpenVINO,則可參考另一篇官網說明[9]。

另外提醒一下,如果使用 Docker 進行推理前要注意不同操作系統有不同硬件的最低基本要求[10],可以參考 Fig. 4 所示。

【Intel OpenVINO?教學】如何利用 Docker 快速創建OpenVINO 開發環境

Fig. 4 OpenVINO 建議最低推理要求[10]。

*如何利用公開模型 MobileNet 執行圖像分類

利用 Docker 安裝好OpenVINO 工作環境后就可以開始進行推理(Inference)工作了。OpenVINO 除了提供多種預訓練好的模型外[11],另外也支持很多不同框架 (Caffe/Caffe2, PyTorch, TensorFlow, MXNet, ONNX 等)產生的公開模型[12],也稱為「Open Model Zoo」,其中包含圖像分類、對象偵測、圖像分割、人臉識別、人體 姿態、深度估測、圖像填補、風格轉移、動作識別、圖像著色、聲音分類、語音 識別、圖像翻譯等公開模型。

使用這些模型前須先下載并執行優化,最后產生 OpenVINO 推理時所需的中間表示文件(Intermediate Representation, IR),即模型描述文件(*.xml)及參數權重文件(*.bin),存放在/opt/intel/openvino/public/模型名稱/FP16(或 FP32, INT8)路徑下。接下來就舉一個 mobilenet 圖像分類的例子來說明。

#  啟動 Docker 并指定映像在 Intel CPU 上執行,以 root 身份執行,同時指令顯示器和系統共享,方便 OpenCV 執行imshow()  能正常工作

docker run -itu root:root --rm -v /tmp/.X11-unix:/tmp/.X11-unix -e

DISPLAY=$DISPLAY openvino/ubuntu18_dev

#  下載公開模型 mobilenet-v1-1.0-224

python3 \

/opt/intel/openvino/deployment_tools/tools/model_downloader/downloader.py \ --name mobilenet-v1-1.0-224

#  優化模型 mobilenet-v1-1.0-224 并產出中間表示(*.xml, *.bin)文件,FP16/FP32 格式于 /opt/intel/openvino/deployment_tools/public/模型名稱路徑下

python3 \

/opt/intel/openvino/deployment_tools/tools/model_downloader/converter.py \ --name mobilenet-v1-1.0-224

【Intel OpenVINO?教學】如何利用 Docker 快速創建OpenVINO 開發環境

Fig. 5 推理測試用圖像。

接著輸入一張汽車圖像(如 Fig. 5 所示),經 mobilenet-v1 PF16 格式推理輸出結果,Top 1 為 Car, Sport Car 0.4242045 (42.42%置信度),成功完成范例。

#  以classification_sample_async.py 進行“圖像分類”異步推論

# -m  指定 mobilenet-v1-1.0-224 模型為 FP16 格式進行推論

# -I  指定待測試之輸入影像

# --labels  指定輸出 ImageNet 1000 分類對應的標簽文件

python3 \

/opt/intel/openvino/inference_engine/samples/python/classification_sample_asy nc/classification_sample_async.py \

-m /opt/intel/openvino/public/mobilenet-v1-1.0-224/FP16/mobilenet-v1-1.0- 224.xml \

-i /opt/intel/openvino/deployment_tools/demo/car.png \

--labels /opt/intel/openvino/deployment_tools/demo/squeezenet1.1.labels

#  輸出結果(部份省略,僅顯示 Top 10 結果卷標及置信度 0.0~1.0)

[ INFO ] Top 10 results:

Image /opt/intel/openvino/deployment_tools/demo/car.png

classid probability

------- -----------

car, sport car 0.4242045

convertible0.2728052

wheel 0.1330036

wagon, station wagon, wagon, estate car, beach waggon, station waggon, wagon 0.0699500

rACE car, racing car0.0339605

radiator grille0.0263465

pickup truck0.0155464

hack, taxi, taxicab0.0127090

minivan      0.0051457

T                 0.0018786

*小結

Intel OpenVINO 目前大約每季度就會有一版更新,官方也有專門的論壇在解決大家的疑難問題,支持的公開模型也越來越多,如果再配合像 Docker 這類容器方式的安裝,新手們就更容易上手,使用上也更加方便了。所以,如果您不知道如何發揮自己的 AI 應用,還不趕快來試試。

更多 OpenVINO 相關應用可參考下方“延伸閱讀”項目。

提醒:目前 OpenVINO 最新版本為 2021.2,自 2020.4 版本后就不再支持神經運算棒(Movidius Neural Computing Stick, NCS)第一代產品,而 NCS2 第二代產品則不受影響。

參考文獻

[1] Get the Intel? Distribution of OpenVINO? Toolkit https://software.intel.com/content/www/us/en/develop/tools/openvino-toolkit/download.html

[2] OpenVINO? Toolkit Overview https://docs.openvinotoolkit.org/latest/index.html

[3] Docker docs https://docs.docker.com/

[4] Install Docker Engine on Ubuntu https://docs.docker.com/engine/install/ubuntu/

[5] Install Docker Desktop on Windows https://docs.docker.com/docker-for-windows/install/

[6] Docker Hub – openvino https://hub.docker.com/u/openvino

[7] Install Intel? Distribution of OpenVINO? toolkit for Linux* from a Docker* Image https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_docker_linux.html

[8] Install Intel? Distribution of OpenVINO? toolkit for Windows* from Docker* Image https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_docker_windows.html

[9] Install Intel? Distribution of OpenVINO? toolkit for Linux* https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_linux.html

[10] Install the DL Workbench https://docs.openvinotoolkit.org/latest/workbench_docs_Workbench_DG_Install_Workbench.html

[11] Overview of OpenVINO? Toolkit Intel's Pre-Trained Models https://docs.openvinotoolkit.org/latest/omz_models_intel_index.html

[12] Overview of OpenVINO? Toolkit Public Models https://docs.openvinotoolkit.org/latest/omz_models_public_index.htm

延伸閱讀

[A] 許哲豪,【AI_Column】運用 Intel OpenVINO 土炮自駕車視覺系統 https://omnixri.blogspot.com/2018/10/aicolumnintel-openvino.html

[B] 許哲豪,【OpenVINO?教學】土炮圖像實例分割型智能監控系統 http://omnixri.blogspot.com/2019/09/openvino.html

[C] 許哲豪,【OpenVINO?教學】土炮體感控制系統 http://omnixri.blogspot.com/2019/09/openvino_20.html

[D] 許哲豪,【課程簡報分享】20191019_2019 Intel OpenVINO? x Edge AI 創意 應用自造松_OpenVINO 平臺運用要領 https://omnixri.blogspot.com/2019/10/201910192019-intel-openvino-x-edge.html

[E] 許哲豪,【課程簡報分享】20191026_2019 Intel OpenVINO? x Edge AI 創意 應用自造松_OpenVINO 預訓模型使用及應用實例開發 http://omnixri.blogspot.com/2019/10/201910262019-intel-openvino-x-edge.html

[F] 許哲豪,OpenVINO 與 OpenCV 搭配─干計算機視覺的活一點都不累 http://omnixri.blogspot.com/2019/11/openvinoopencv.html

[G] 許哲豪,【OpenVINO?+RealSense?教學】土炮智能機器手臂之視覺系統 https://omnixri.blogspot.com/2019/12/openvinorealsense.html

[H] 許哲豪,如何在 Google Colab 上安裝執行 Intel OpenVINO 的范例 http://omnixri.blogspot.com/2020/09/google-colabintel-openvino.html

  • 聚合信息
免責聲明:凡注明來源本網的所有作品,均為本網合法擁有版權或有權使用的作品,歡迎轉載,注明出處。非本網作品均來自互聯網,轉載目的在于傳遞更多信息,并不代表本網贊同其觀點和對其真實性負責。
百度 好搜 搜狗

警告:本站禁止未滿18周歲訪客瀏覽,如果當地法律禁止請自覺離開本站!收藏本站:請使用Ctrl+D進行收藏