作者:Felix Lin
Intel OpenVINO 在今年(2022)迎來最大幅度的版本更新,除更便利開發者進行操作外,也對 API 進行優化,整題效能提升也支援 Dynamic Shape 和 Preprocessing 等(詳細改動項目可參閱 Jack 大撰寫的文章)。筆者在去年也寫過使用 Google Teachable Machine(下以 ”TM” 代稱)快速訓練模型並搭配 OpenVINO(當時版本為2021.4 LTS) 執行轉換與推論的文章。而於此時此刻若要用 OpenVINO 推論 Teachable Machine 模型又該如何呢?一起來了解看看吧!(註:筆者的開發環境為Ubuntu 20.04 + OpenVINO 2022.1,不同環境指令略有不同,但流程與操作原理都是相通的!)
STEP1: 訓練 Teachable Machine 模型
取得資料集 Dataset
為便利訓練模型,這次我們使用 TensorFlow flowers 這個小型資料集,總共有3670張影像。影像尺寸約在240×240上下,總體資料集大小為221MB,分類為以下五種類別:
- daisy (雛菊)
- dandelion (蒲公英)
- roses (玫瑰)
- sunflowers (向日葵)
- tulips (鬱金香)
在終端機使用以下指令來取得資料集,並且將其解壓縮(也可以將網址貼在瀏覽器即可自動進行下載、於視窗操作搬移與解壓縮):
# 建立工作資料夾
mkdir ~/openvino_tm
cd ~/openvino_tm
# 取得 tf_flowers dataset
wget https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz
# 解壓縮資料夾於當前目錄
tar zxvf flower_photos.tgz -C .
訓練模型Training Model
開啟瀏覽器到TM網站,選擇標準尺寸的影像分類專案,並且使用檔案新增資料的方式,將資料集內各分類的照片上傳。由於資料集檔案數量相當多,而 TM 的遷移學習模型也不需要太多的資料量,故筆者這裡選擇各分類的前 100 張照片上傳作為訓練資料,其餘的可做後續測試資料使用。

訓練 Teachable Machine 影像分類模型
依序上傳完成並將類別名稱修改為對應的花名,即可點選 “Train Model” 按鈕,約莫一分鐘的時間即可訓練完成,過程中也請避免切換瀏覽器分頁或是執行其他高耗能運算。
匯出模型 Export Model
訓練完成後到Preview階段,可以先隨機從資料集撈幾張照片丟進去測試,看是否能順利做出正確分類。須留意的是,如果照片大小並非正方形上傳後會被裁切,可能會造成影像特徵消失而失準。
確認了模型可用性後即點選 “Export Model” 按鈕,並選擇 TensorFlow 的 saved model 格式,由於 TM 使用的框架是 TensorFlow.js,這邊需要等待一段時間進行轉換。轉換完成後會自動下載一個名為 converted_savedmodel.zip 的壓縮檔,裡面就是標準 TensorFlow 2 的儲存格式了,下一步就是要將其轉換為 OpenVINO 推論所使用的 IR (Intermediate Representation) 檔。

選擇 TensorFlow savedmodel 格式匯出模型
STEP2: 轉換為 OpenVINO 模型
進入 OpenVINO Python Virtual Environment 開發環境
OpenVINO 的 Python Virtual Environment 虛擬開發開發環境的建置方式這裡就不再贅述了,有興趣可以參照OpenVINO官方文件安裝 Runtime 與 Development Tools ,一步步照著做即可完成。
操作模型優化器進行轉換
把從 TM 下載的 TensorFlow 模型檔案 converted_savedmodel.zip 移動到工作資料夾,進行解壓縮後可以得到 model.savedmodel 資料夾與 labels.txt 文字檔。可以對 labels.txt 檔案進行檢視,再次確認是否為我們要轉換的模型。接著再使用 OpenVINO 模型優化器 om 進行轉換,並給予適切的 scale、input shape、mean values等參數,完整指令如下:
mo --saved_model_dir model.savedmodel -s 127.5 --reverse_input_channels --mean_values [127.5,127.5,127.5] --input_shape [1,224,224,3]
轉換完成看到以下訊息:
...
[ SUCCESS ] Generated IR version 11 model
[ SUCCESS ] XML file: /home/felix/openvino_tm/savedmodel.xml
[ SUCCESS ] BIN file: /home/felix/openvino_tm/savedmodel.bin
[ SUCCESS ] Toltal executeion time: ...
代表已經順利得到 savedmodel.xml 和 savedmodel.bin 這兩個成對的 IR 模型中繼檔,下一步可以使用 OpenVINO 進行推論啦!
STEP3: 運行 Classification AI推論
取得範例程式進行修改
方便起見,影像分類的範例程式我們直接拿 OpenVINO 的 python sample code – hello_classifacition.py 來使用。於終端機下執行以下指令從 OpenVINO repository 取得 2022.1 版本影像分類範例程式:
wget https://raw.githubusercontent.com/openvinotoolkit/openvino/releases/2022/1/samples/python/hello_classification/hello_classification.py
使用文字編輯器開啟hello_classification.py,移動到70行將
ppp.input().model().set_layout(Layout('NCHW'))
改為
ppp.input().model().set_layout(Layout('NHWC'))
把輸入 shape 格式從 batch number, channel, height, width 調整為 batch number, height, width, channel。 同時也可以看一下 Step 4. Apply preprocessing 這一段的註解說明,在OpenVINO 2022.1版本的重大更新之一就是增加了影像前後處理模組 pre post process。開發者可以便捷的方式,在資料進推論前調整影像格式、尺寸、參數類型等,讓程式更具彈性。

下載 hello_classification.py 進行修改
執行影像分類推論
執行 hello_classification.py 並帶入模型名稱、輸入影像與運算裝置。模型名稱為剛轉換完成的 saved_model.xml,輸入影像則從 tf_flowers 資料集隨機抓取一個未丟入 TM 訓練的影像,而運算裝置可以指定為 CPU/GPU 等,因為僅是做測試驗證還不需強調最佳效能,這邊使用 CPU 即可。可以看到筆者測試的結果 ID 2 的可能性為 0.99 ,對應到前述的 labels.txt 編號 2 確實就是 roses 喔!各位也可以試看看各種不同的影像資料做測試。

執行推論的輸出結果
小結-PoC for Edge AI 的絕妙組合
對於著重於應用面的 Edge AI 工程師們,開發初期可能面臨到沒有合適的模型、情境與架構的情況,難以和團隊內外人員進行討論。而如今可以用 TM 做一個初步的樣版模型,並且輕鬆地就把模型丟到邊緣裝置上執行,短時間內即可以完成概念驗證 PoC(Proof Of Concept),提供給團隊或是客戶進行討論,有利於整體專案進程與發展。再者對於初學者而言,此也不失為一個將複雜的過程切分為數個簡單步驟切入學習的一種方案!
(責任編輯:謝涵如)
- 【開箱實測】OpenVINO榨出單板極限,實作離線LLM AI助理! - 2024/07/25
- 【Maker 玩 AI】Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型 - 2023/12/26
- 【Maker 玩 AI】Edge Impulse 搭配 XIAO ESP32-S3 實作影像分類專題 - 2023/12/04
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!
2022/09/26
mo –saved_model_dir model.savedmodel -s 127.5 –reverse_input_channels –mean_values [127.5,127.5,127.5] –input_shape [1,224,224,3]
請教 我在執行這指令,沒有找到mo指令,我應該要到執行優化? 謝謝
使用ubuntu
2022/11/28
Hi Yu-Jyun,
新版 OpneVINO 的模型優化器 mo 需要安裝開發者工具才會存在系統中。
可以參照一下官方文件當中的安裝說明,使用 pip 工具來進安裝:
https://docs.openvino.ai/latest/openvino_docs_install_guides_install_dev_tools.html
完成之後就可以順利使用囉!