Google于2017年制作了TeachableMachine網(wǎng)頁版本的AI軟件工具,甫一推出就受到相當(dāng)好的好評與回響,原因在于這個網(wǎng)站幾乎可以不需要任何說明與敘述,就可以自行摸索搞懂原來用AI實(shí)踐計(jì)算機(jī)視覺是這么一回事!
之后更于2019年推出Teachable Machine V2,除了將原有的Image Classification(影像分類)由固定三個分類擴(kuò)充為自定義分類數(shù)量,并且增加了Audio(聲音)與Pose(人體姿勢)兩個類別的分類器,此外更支持項(xiàng)目的存盤與轉(zhuǎn)導(dǎo)出功能,不但能保留數(shù)據(jù)于日后繼續(xù)編輯,同時還能匯出Keras、TensorFlow、tf.js等不同格式的模型檔案,大幅提高了后續(xù)轉(zhuǎn)應(yīng)用的可玩性!

OpenVINO執(zhí)行模型優(yōu)化后能跨平臺布署AI推論
OpenVINO為Intel于2018年推出的AI布署工具套件,支持不同深度學(xué)習(xí)軟件框架如TensorFlow、PyTorch、Caffe等的模型輸入,并對模型進(jìn)行優(yōu)化與調(diào)教后,布署于不同操作系統(tǒng)進(jìn)行推論。其初版發(fā)布時間和Intel推出NCS2(Neural Compute Stick 2)的時間點(diǎn)相當(dāng)接近,而一直讓筆者有著「OpenVINO就是要來搭配NCS2進(jìn)行AI推論優(yōu)化」的一種錯覺。
直到后來OpenVINO版本持續(xù)更新提其高支持完整性與提高了易用性,才讓筆者確實(shí)看清,以目前Intel CPU/GPU的處理效能,已經(jīng)足以負(fù)荷多數(shù)情境的AI應(yīng)用推論了!如下方直方圖顯示著Intel的不同世代顯示芯片在的AI推論效能比較,分別以第九代iGPU與第12代iGPU執(zhí)行不同模型之間的效能差異。其中光是Gen12相比Gen9跑FP16模型推論FPS就已超過兩倍之譜,若是將模型轉(zhuǎn)換為INT8進(jìn)行推論更可以在將效能再拉升至一倍左右!若要進(jìn)一步了解OpenVINO各AI模型對應(yīng)不同處理器的效能,也可以參照OpenVINO Benchmark Result。
https://docs.openvinotoolkit.org/latest/openvino_docs_performance_benchmarks_openvino.html

Intel Gen9 與 Gen12 iGPU AI推論效能比較
在分別接觸了Teachable Machine與OpenVINO之后,不禁讓人聯(lián)想,是否能讓這兩個簡單易用的酷工具結(jié)合在一起?一個負(fù)責(zé)處理模型訓(xùn)練,另一個負(fù)責(zé)處理推論與應(yīng)用,若能成功便可讓大伙享齊人之福,把復(fù)雜事情簡單化,短時間內(nèi)即可完成應(yīng)用雛形。不啰嗦即刻來做測試!
我們先到Teachable Machine網(wǎng)站上去訓(xùn)練模型,至于要辨識的影像就直接就地取材-使用我們的雙手做手勢的分類。這里筆著做了五個手勢分類,分別為剪刀、石頭、布、贊、以及數(shù)字7的手勢,各取得約略350張的影像數(shù)據(jù)作為輸入的dataset。訓(xùn)練參數(shù)則直接用預(yù)設(shè)參數(shù):EPOCH: 50,Batch Size: 16,Learning Rate: 0.001進(jìn)行訓(xùn)練。最后我們就選擇Export Model將模型導(dǎo)出,選擇的格式為TensorFlow Savedmodel方便OpenVINO進(jìn)行轉(zhuǎn)換,順利取得converted_savedmodel.zip檔案即完成模型訓(xùn)練的步驟啦!

在Teachable Machine訓(xùn)練影像分類模型
接著我們要將從Teachable Machine取得的TensorFlow模型文件(.pb),使用OpenVINO進(jìn)行轉(zhuǎn)換。筆者的測試環(huán)為Ubuntu20.04操作系統(tǒng),OpenVINO Tookit使用2021.4 LTS版本,處理器為Intel i7-1185GRE(搭載Iris Xe顯示芯片)。要建置OpenVINO開發(fā)環(huán)境除了在原生系統(tǒng)下載安裝包執(zhí)行所有套件的安裝外,現(xiàn)在也可以使用docker快速建置環(huán)境,過程其實(shí)沒什么難度,按照官方文件指引Step by Step就可以了。
https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_linux.html
https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_docker_linux.html
為了方便建立一個名為tm的文件夾,存放teachable machine模型數(shù)據(jù),并且解壓縮得到saved_model.pb與labels.txt等檔案。
~$ mkdirtm
~$ cd tm
~/tm$unzip converted_savedmodel.zip
Archive: converted_savedmodel.zip
creating: model.savedmodel/
extracting: model.savedmodel/saved_model.pb
creating: model.savedmodel/variables/
extracting:model.savedmodel/variables/variables.data-00000-of-00001
extracting:model.savedmodel/variables/variables.index
creating: model.savedmodel/assets/
extracting: labels.txt
~/tm$
接著執(zhí)行model optimizer進(jìn)行模型優(yōu)化轉(zhuǎn)換,指定目前文件夾取得pb檔,這邊要注意input_shape參數(shù)必須指定為[1,224,224,3],其意義為[N,H,W,C]:
?N: 一次抓取多少數(shù)量的影像。
?H: 影像的高度,單位為象素。
?W: 影像的寬度,單位為象素。
?C: 通道數(shù)量。若是彩色圖像則有RGB三個通道。
上述若N為未知數(shù)值(負(fù)值)會造成轉(zhuǎn)換上的錯誤,而在TensorFlow上預(yù)設(shè)輸入的shape為[-1,224,224,3],因此要手動進(jìn)行shape調(diào)整。此外,Teachable Machine使用MobileNet神經(jīng)網(wǎng)絡(luò)架構(gòu),轉(zhuǎn)換的scale依據(jù)OpenVINO轉(zhuǎn)換TensorFlow文件得知為127.5,我們便以此數(shù)值代入。
https://docs.openvinotoolkit.org/latest/openvino_docs_MO_DG_prepare_model_convert_model_Convert_Model_From_TensorFlow.html
最后筆者希望可以得到較佳的推論速度,帶入data_type參數(shù),并指定模型權(quán)重值以FP16的數(shù)值格式進(jìn)行量化。輸入以下指令進(jìn)行模型轉(zhuǎn)換:
~/tm$ source/opt/intel/openvino_2021/bin/setupvars.sh
[setupvars.sh] OpenVINO environmentinitialized
~/tm$ mo_tf.py --saved_model_dirmodel.savedmodel/ --input_shape [1,224,224,3] -s 127.5 –data_type=FP16
執(zhí)行成功后會在當(dāng)前目錄得到IR(Intermediate Representation)檔saved_model.xml與saved_model.bin。我們就能使用這個IR模型元文件在OpenVINO上進(jìn)行推論。
推論的部分在邊緣裝置的推論我們使用OpenVINO toolkit內(nèi)建的Classification的Demo來做測試,看看實(shí)際結(jié)果如何。因影像分類Demo目前僅提供C++語言版本,我們需要先行做編譯:
~$ cd/opt/intel/openvino_2021/deployment_tools/open_model_zoo/demos/
/opt/intel/openvino_2021/deployment_tools/open_model_zoo/demos$./build_demos.sh
Settingenvironment variables for building demos...
[setupvars.sh]OpenVINO environment initialized
-- The Ccompiler identification is GNU 9.3.0
... 中間訊息省略 ...
[100%]Built target human_pose_estimation_demo
Buildcompleted, you can find binaries for all demos in the/home/openvino/omz_demos_build/intel64/Release subfolder.
/opt/intel/openvino_2021/deployment_tools/open_model_zoo/demos$
編譯完成后會看到提示訊息說明可執(zhí)行文件的路徑,同時我們將額外的手勢照片存放到~/tm/pic的路徑,讓范例程序可以用這些圖像作為測試數(shù)據(jù)。執(zhí)行下方指令啟動范例程序,相關(guān)參數(shù)說明如下:
?-i: <必要參數(shù)>,輸入影像數(shù)據(jù)的檔案路徑或文件夾路徑
?-m: <必要參數(shù)>,IR模型文件xml的檔案路徑
?-labels: <必要參數(shù)>,分類卷標(biāo)文本文件的路徑
?-d: 執(zhí)行推論的硬件裝置進(jìn)行推論,可選CPU, GPU,也可以設(shè)定MULTI:CPU,GPU同時使用CPU與GPU執(zhí)行推論。預(yù)設(shè)為CPU。
?-time: 重復(fù)執(zhí)行推論的時間,預(yù)設(shè)為-1,代表執(zhí)行到使用者中斷為止。
?-no_show: 不顯示影像推論結(jié)果。
?-nt: 取得前n個最大可能的類別,預(yù)設(shè)為5。
~$ cd~/omz_demos_build/intel64/Release
~/omz_demos_build/intel64/Release$./classification_demo -d GPU -m ~/tm/saved_model.xml -i ~/tm/pic/ -labels~/tm/labels.txt
[ INFO ]InferenceEngine: IE version......... 2021.4
Build ........... 0
[ INFO ]Parsing input parameters
[ INFO ]Reading input
[ INFO ]Files were added: 20. Too many to display each of them.
[ INFO ]Loading Inference Engine
[ INFO ]Device info:
[ INFO] GPU
clDNNPlugin version ......... 2021.4
Build ........... 0
Loadingnetwork files
[ INFO ]Batch size is forced to 1.
[ INFO ]Loading model to the device
待模型加載后會跳出一個圖形化窗口,顯示著目前進(jìn)行影像分類識別的結(jié)果。我們可以看到大部分判定的結(jié)果是符合我們的預(yù)期的,而少部分判定錯誤的圖像經(jīng)測試后是在Teachable Machine上就辨識度不佳的圖片,整體而言推論分類結(jié)果令人滿意!
左上角同時顯示著當(dāng)前的效能指針Latency與FPS,因?yàn)樾枰~外處理影像輸出的辨識結(jié)果,這會降低非常多FPS,所以此數(shù)值僅能做參考之用。若想要知道不做輸出影像的效能可以每秒幾張圖像,只要在剛剛執(zhí)行的命令后面,再加上-no_show –time 10,意思就是不輸出推論的影像,并且在模型啟動推論10秒后結(jié)束程序。當(dāng)DEMO程序返回時就會顯示Latency與FPS,筆者在僅使用GPU的情況下,效能測時得到的結(jié)果就高達(dá)654.9 FPS與7.2 ms Latency!
此外再補(bǔ)充一點(diǎn),若我們在Teachable Machine上訓(xùn)練的影像分類數(shù)量少于5個分類,在執(zhí)行DEMO程序時可能會出現(xiàn)"[ ERROR ] The model provides 2 classes, but 5 labels are requestedto be predicted"此錯誤訊息,原因在于DEMO程序默認(rèn)會去抓取可能性最高的前5個分類,而實(shí)際模型輸出的分類數(shù)量卻少于5個分類而產(chǎn)生錯誤??梢栽偌由蠀?shù)”-nt 1”指定DEMO程序只取得可能性最高的分類即可。

Image classification推論測試結(jié)果
小結(jié)
各位看過以上流程之后,是不是覺得訓(xùn)練影像分類模型并且布署在自己的裝置上執(zhí)行不再遙不可及,而且是既簡單又容易的事!藉由這類簡單工具組件幫助我們完成邊緣算的訓(xùn)練、轉(zhuǎn)換、到布署總體時間約略在半小時內(nèi)即可完成。雖然距離實(shí)際應(yīng)用可能還有一小段差距,但藉由把復(fù)雜的事情拆解成各個簡單的組件與任務(wù),短時間內(nèi)就能綜觀全局而找到對的方向努力,各位腦中是否已浮現(xiàn)出各種應(yīng)用可能性的想象了呢!?
-
處理器
+關(guān)注
關(guān)注
68文章
20144瀏覽量
246666 -
IC
+關(guān)注
關(guān)注
36文章
6243瀏覽量
184074 -
軟件
+關(guān)注
關(guān)注
69文章
5295瀏覽量
90820 -
AI
+關(guān)注
關(guān)注
89文章
38012瀏覽量
295995 -
模型
+關(guān)注
關(guān)注
1文章
3645瀏覽量
51685
原文標(biāo)題:OpenVINO結(jié)合Teachable Machine蹦出新滋味
文章出處:【微信號:易心Microbit編程,微信公眾號:易心Microbit編程】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
C#集成OpenVINO?:簡化AI模型部署
運(yùn)行時OpenVINO?找不到模型優(yōu)化器,為什么?
無法將Openvino? 2025.0與onnx運(yùn)行時Openvino? 執(zhí)行提供程序 1.16.2 結(jié)合使用,怎么處理?
【大聯(lián)大世平Intel?神經(jīng)計(jì)算棒NCS2試用申請】客戶年齡性別KIOSK廣告機(jī)AI驗(yàn)證
基于ESL方法的DSP微處理器行為模型設(shè)計(jì)
OpenVINO模型優(yōu)化實(shí)測:PC/NB當(dāng)AI辨識引擎沒問題!
將數(shù)據(jù)預(yù)處理嵌入AI模型的常見技巧
在AI愛克斯開發(fā)板上用OpenVINO?加速YOLOv8目標(biāo)檢測模型
AI愛克斯開發(fā)板上使用OpenVINO加速YOLOv8目標(biāo)檢測模型
在AI愛克斯開發(fā)板上用OpenVINO?加速YOLOv8-seg實(shí)例分割模型
在AI愛克斯開發(fā)板上用OpenVINO?加速YOLOv8-seg實(shí)例分割模型
如何快速下載OpenVINO Notebooks中的AI大模型
英特爾酷睿Ultra處理器突破500個AI模型優(yōu)化
C#中使用OpenVINO?:輕松集成AI模型!

OpenVINO各AI模型對應(yīng)不同處理器的效能
評論