話說二十多年前第一次到教練場學開車,當時是手排車,常常因換檔時離合器、排擋、油門控制不當就導致車子瞬間熄火,不然就是猛烈振動甚至暴衝,好在教練細心指導,才能讓車子平順前進。後來改開自排車後,突然覺得以前那些換擋技巧根本用不到,車子自己就會處理好這些換檔工作,我們只要會轉方向盤,會踩油門、剎車加上專心路況就能順利把車開上路到達目的地。
如今在學習AI這台大車時也遇到類似問題,需要一個好的教練指導開發AI的每個步驟和細節,不然就得換一套方便的工具,讓我們能專心在開發應用程式而不需要了解太多AI的數學和原理,而其中 Intel OpenVINO Toolkit(以下簡稱OpenVINO) [1] 就是一套不錯的AI推論(Infernece)優化工具。
一般常見的AI應用有「電腦視覺」、「自然語言處理」、「資料分析」等,通常多半需要收集大量的資料,經過訓練特定的模型(或機器學習算法、神經網路等)才能應付各式AI應用的需求。訓練過程非常繁瑣且須依靠極高算力才能完成模型巨量權重(參數)的訓練。不過好在當完成模型訓練後,只需運行一次推論就能得到結果。
如果還覺得模型太大或推論速度不夠快,此時可透過一些複雜程序來進行參數量化(如FP32變成INT8)或模型優化(如減枝、壓縮、蒸餾等),以達到又快又準的結果。而以上介紹的 OpenVINO 正是這樣的工具,它已幫大家把常用AI應用的模型都預訓練好了,如影像分類、物件偵測、人臉辨識、影像分割、姿態估測等,甚至現在流行的大型語言模型(LLM)及AI生成影像模型(AIGC),這樣大家就可輕鬆上手AI應用。
以下就以最常見的 「人臉辨識」 (只作人臉位置偵測,不作身份辨識)作為起手式,使用網頁版Python開發環境Google Colab(Jupyter Notebook環境)直接安裝最新2023.0版的OpenVINO運行其Notebooks範例,來讓大家快速體驗一下AI應用帶來的好處。
1.人臉辨識技術的演進
以電腦視覺進行「人臉辨識」已發展有數十年,如圖1所示,從最早的統計式(特徵臉)再演進到模板式(VJ聯級法)、特徵式(主動形狀模型ASM)、外觀式(主動外觀模型AAM)。但這些方式通常只能辨識較正面且大小、位置差不多,光照均勻的人臉影像,若遇到各種拍攝角度、尺寸、光照、背景、表情、化妝、眼鏡、口罩等干擾因素時,辨識率就會急速下降,變得不夠實用。更多人臉辨識相關介紹可參考[2],這裡就不多作說明。
近年來深度學習(神經網路)技術及電腦硬體算力突飛猛進,所以透過巨量的人臉資料集進行模型訓練,就能得到較穩定實用的模型。不論是人臉偵測、身份辨識、表情、性別、年齡等都有單獨對應或整合式的模型可供使用。所以在人臉辨識上,除了可設計專用模型外,亦可當成普通物件來進行偵測。
2.如何在Colab上安裝OpenVINO
OpenVINO可支援多種作業系統(如Windows, Linux, macOS),多種安裝模式(如執行檔、APK、PyPl(pip install)、自行編譯、Docker等),甚至有提供雲端免安裝的DevCloud版本。
在本文中,為了讓大家能更輕鬆的試用,只要找一台能上網的電腦,開啟文末提供的Colab範例(*.ipynb)點擊連結就能馬上安裝OpenVINO並運行人臉辨識範例。
如範例中所示,安裝OpenVINO非常簡單,只要下列指令就完成。由於預設只會安裝必要套件,所以只需40到60秒就能完成,不像以前透過APK方式安裝需要4到5分鐘。
#更新 pip
!python -m pip install –upgrade pip
# 開始安裝 OpenVINO開發者版最新版本,本文發佈時為2023.0版
!pip install openvino-dev
註:安裝後會出部份紅字錯誤訊息,如下所示
ERROR: pip’s dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. google-colab 1.0.0 requires pandas~=1.5.3, but you have pandas 1.3.5 which is incompatible.
主要是因Colab要求的套件版本和OpenVINO安裝的不同,本範例沒有使用到這些模組,可暫時忽略這項錯誤,繼續執行下面範例。
3.使用OpenVINO進行人臉辨識
在OpenVINO中已有許多預訓練好的模型和範例程式,其中以Notebooks 最為方便,只要在電腦上安裝好Python並架好一個虛擬環境,再下載 Notebooks安裝Jupyter Lab就能玩到數十種範例,完整安裝方式及範例內容可參考[3]。
不過這些範例雖然也是*.ipynb但由於很多相對路徑及設定不同,所以無法直接在Colab上運行。這裡為了方便大家快速上手,不用在本機端安裝就可測試,所以參考了Notebooks中的Hello Object Detectio [4]進行修改,使其可在Colab上運行。
另外由於不同模型輸出格式略有不同,而本範例僅適用輸出格式為[image_id, label, conf, x_min, y_min, x_max, y_max],所以目前可支援模型名稱如下所示。
.face-detection-0200
.face-detection-0202
.face-detection-adas-0001
.face-detection-retail-0004
.face-detection-retail-0005
.face-detection-retail-0044
接下來就開始說明完整執行步驟。首先要先下載及轉換模型及測試用的圖檔。模型名稱(–name)可替換成上述任一名稱。測試用的圖檔來源及名稱可自訂,但記得後續推論時輸入影像名稱要記得更換。
!omz_downloader –name face-detection-adas-0001
!omz_converter –name face-detection-adas-0001
!wget -N https://raw.githubusercontent.com/OmniXRI/OpenVINO2022_on_Colab_Samples/main/data/face_ring.jpg
接下來準備好必要的函式庫,載入及編譯模型,載入原始圖檔並轉成指定格式(尺寸、矩陣順序、色彩格式),就能進行推論。完成後會得到物件框(即人臉)的外框資訊,包含人臉數量、影像編號、標籤名稱、置信度、物件框左上角座標[image_id, label, conf, x_min, y_min, x_max, y_max]。最後再把這些資訊畫回影像上就完成。如下範例程式所示。
如果不想了解程式運作方式的朋友可直接跳過,直接享受找到人臉的結果就可以了。
人臉偵測結果如圖 2所示,可看出即使是人臉旋轉很大角度、有不同表情甚至戴墨鏡也能順利被檢出,相較傳統的 OpenCV Haar 聯級法(Cascase)只能接受小幅度的旋轉有很大改善。如果想了解OpenCV作法的朋友可以參考[5]。
本文完整範例如下連結,直接點擊就能啟動。進入Colab後,點擊選單<執行階段>中的<全部執行>就能執行範例。
https://colab.research.google.com/github/OmniXRI/OpenVINO2022_on_Colab_Samples/blob/main/OpenVINO_Face_Detection_on_Colab_2.ipynb
註:如果執行完出現結果影像一直閃爍情況,將游標移至影像上點擊一下即解決。另外如果想要備份這份範例,方便自己進行修改測試,要先登入自己的Google帳號,再點擊選單<檔案>中的<在雲端硬碟中儲存複本>,即完成備份。
小結
以上人臉辨識(物件偵測)只是AI應用的一個簡單起手式,透過本文大家可了解到如何透過簡單的Python程式加上OpenVINO的助力,就可輕鬆完成AI應用程式的開發。如果還想要測試更多的Colab + OpenVINO範例,可參考延伸閱讀[A]。相信有了這些基礎,後續學習上會更加順手。
(本文由VMAKER授權轉載;連結原文網址)
參考文獻
[1] Intel, “OpenVINO Document”
https://docs.openvino.ai/2023.0/home.html
[2] 許哲豪, “【課程簡報】Edge AI社聚#1 身份辨識防疫技術交流 ─ Edge AI人臉辨識技術剖析 “
https://omnixri.blogspot.com/2021/02/edge-ai1-edge-ai.html
[3] Intel, “Learn OpenVINO – Interactive Tutorials (Python) – OpenVINO notebooks documentation”
https://docs.openvino.ai/2023.0/notebooks/notebooks.html
[4] Intel, “OpenVINO Notebooks – Hello Object Detection”
https://docs.openvino.ai/2022.3/notebooks/004-hello-detection-with-output.html
[5] 許哲豪, “OpenCV Haar 聯級法(Cascase)人臉辨識Colab範例”
https://colab.research.google.com/github/OmniXRI/NTUST_EdgeAI_2022/blob/main/Ch7_Implementations/Ch7-3_Face_Recognition/Ch7-3-1_OpenCV_Face_Detection/OpenCV_Haar_Face_Dtection.ipynb
延伸閱讀
[A]許哲豪, “Intel OpenVINO 2022.x運行於Google Colab之範例分享”
https://omnixri.blogspot.com/2023/05/intel-openvino-2022xgoogle-colab.html