从零开始搭建AI应用
原創:晏茜
資料來源:邱丹
1. intel 開發工具及實驗平臺介紹
1.1 Intel? OpenVINO?工具包
定義
Intel? OpenVINO? 工具包是為了讓英特爾的硬件平臺最大的發揮它的算力出來而誕生的工具套件。Open 代表開源的。V 代表 Visual,說明它是基于計算機視覺應用的,N 代表的是 Network,O 代表的是 Optimization,網絡優化。所以,Intel? OpenVINO? 工具包是開源的用于優化計算機視覺應用以及模型性能的一套工具包。
特點
Intel? OpenVINO? 工具包的顯著特點是它能夠給硬件平臺帶來指數級的性能提升。這個工具包像是一個智能路由器,基于這個工具包去做開發,運行的硬件平臺無論是6代酷睿,還是至強處理器,都是可以的,因為 OpenVINO 會自動的匹配這些硬件平臺,這也是它能簡化開發的意義所在。
組成
Intel? OpenVINO? 工具包包含兩個模塊,第一個模塊是模型優化器,第二個模塊是搜索引擎。
模型優化器 (Model Optimizer)
- 一個基于python的工具,用于導入訓練好的模型并將其轉換為中間表示
- 通過模型拓撲轉換優化性能及存儲空間
- 硬件無關的優化
推理引擎 (Inference Engine)
- 高層級的 C/C++ 和 Python,推理運行時API
- 為不同的硬件提供統一接口,每個硬件類型以動態加載插件的方式實現接口
- 為不同硬件類型提供最佳性能,無需用戶實現和維護多個代碼路徑
工作流
為什么 OpenVINO 工具包可以做到優化,原因可以通過它的工作流體現出來。第一步是模型的構建,TensorFlow,ONNX 等,這些大廠的系統學習框架,訓練出來的模型,經過 OpenVINO 之后,首先進行第一個層次的優化,也就是通過模型優化器,它會把這些模型進行轉換,轉換的過程中對模型進行簡化,之后輸出一個優化過后的模型。優化過后的模型同時又會經過第二重優化,第二重優化是由推理引擎來完成的,推理引擎像是一個智能路由,它可以導航,如果你在英特爾的 CPU 上面做你的深度學習,那么它就會自動的去調用 CPU 相關的優化。同理,如果你在英特爾的其他硬件平臺上面做你的深度學習,例如集成顯卡,或者計算棒,它就會去調集成顯卡,或是計算棒對應的一些優化。所以,推理引擎已經提供了一些優化。當我們在做開發的時候,只要調用這一層 API,就可以達到硬件的最佳性能。
總的來說,第一層優化的模型優化器加上第二層優化的推理引擎,這兩層優化的復合效用會使 OpenVINO 最后的輸出結果達到很好的效果。
1.2 英特爾? DevCloud for the Edge 概述
英特爾? DevCloud for the Edge 是 intel 自家的一個云,它的特點是,第一,它是可以免費申請的,第二,云環境上面首先除了提供給你一個自己的空間之外,它還額外提供了很多 intel 的其它算力,包括 intel 最新的 CPU 或者是最新的設備,都會放在這上面,也就是說,如果你注冊了英特爾? DevCloud for the Edge,你可以免費獲取到當下比較熱門的英特爾的所有的算力設備。
我們為什么要使用英特爾的算力呢?
英特爾的算力有其優點。首先,英特爾作為一個 CPU 大廠,它對于 CPU 的優化是毋庸置疑的。 CPU 是無處不在的,只要有 CPU,就可以做 AI 計算。所以它可以降低你的 AI 準入門檻,你不一定需要去花錢買很昂貴的設備;第二,英特爾的產品線非常豐富,它的 CPU 有多種型號,可以提供很多的選擇空間。在具體的應用場景上,比如,一個智慧門店,如果這個門店很小,只有兩平米,你完全無需花大價錢去購買一個昂貴的配置,相反,如果這個門店很大,有二十平米,你就必須得去花錢買相對昂貴的配置,這是一種資源的合理配置;第三,簡化,你可以通過構建一個優化的 AI 平臺來減少“移動部件”,也就是說只要是 intel 的硬件,都可以通過 OpenVINO 把它們連接到一起,這就是一種簡化;第四,領先,我們在選擇框架時,一般會選用主流框架,這是因為一些小眾的框架不能長久的保留其使用價值。而英特爾的軟件亦或其硬件,質量都是有保證的,并且其使用價值具有可持續性。
英特爾? DevCloud for the Edge注冊鏈接如下:
https://www.intel.com/content/www/us/en/developer/tools/devcloud/overview.html
1.3 Open Model Zoo
Open Model Zoo 是 Github 上的資源倉庫,其中包括預訓練模型,演示代碼,以及相關的輔助工具。它包含的模型可分為三個種類,第一個種類是計算機視覺的模型,第二個種類是自然語言處理的模型,第三個種類是一些其它模型,比如強化學習的模型。除了眾多模型之外,Open Model Zoo 還包含對應的演示代碼,并且它的模型和代碼都是非常容易搭建的。
2. intel 在 AI 項目中的工作流程
本部分主要介紹了 intel 在 AI 項目開發的各個階段中的工作流程。
上圖是一個 AI 項目開發的生命周期,總共分為六個階段。
第一階段,問題的定位和分析?,F階段 AI 的應用案例是很多的,但其實在過去的很長一段時間,AI 相關項目是門檻相對高的,現在,隨著 AI 產業的發展,在各行各業中紛紛涌現出大量的 AI 相關產品。比如,一些傳統行業,比如像紡織業,過去檢查布匹的瑕疵是依賴于肉眼的,現在如果想運用 AI 技術來解決這個問題,其實是可以使用計算機視覺的方式來解決的,可以進行目標的檢測,把布匹的瑕疵檢測出來。在農業方面,比如,可以運用 AI 技術,去收集植物作物生長的數據,然后利用這些數據,去調控濕度,溫度等指標至適宜作物生長的環境。在我們日常的學習和生活當中,可以打破局限,當遇到問題的時候,去思考如何從人工智能的角度去解決它,有了這樣一些想法之后,再嘗試去實現你的想法。
在計算機視覺中,有兩種任務,一是目標分類,比如一個可愛的小狗,如果我的程序識別出這是一個 Dog,那表示對它做了分類,二是目標檢測,如果我不僅知道這是一個 Dog,還能把 Dog 的位置框出來,返回 Dog 的坐標,那表示對它做了檢測。
事實上,如果我們能夠把實際生活中遇到的問題與這樣的例子進行對照,那么你可能就會產生一些新的想法。
第二階段,獲取樣本數據和數據集。通常來講,我們出于學習的目的,在網絡上獲取數據集是很容易的。
第三階段,數據的清洗和分析。
以上是關于泰坦尼克的數據集,用來預測泰坦尼克號上乘客的存活率,根據姓名,性別,年齡等特征值,去預測這個乘客是否存活。這是一個普通的數據集,而應用于機器視覺的數據集并不是以這種形式來呈現的,它其實是由大量的圖片和圖片的標注數據共同組成的。在非計算機視覺領域中,數據集的主要作用是去重,填補缺失值,去除不需要的字段,去除不合理值等。而這些動作在計算機視覺的圖片處理上也是同樣適用的。
針對李雷、韓梅梅、Lily 和 Lucy 的數據集如何進行數據的清洗和分析呢?第一行,李雷他的年齡是 200 歲,這是不合理的數據。第二行和第三行有各有一個韓梅梅,其實韓梅梅的名字是一樣的,只不過第三行名字中有其他的字符,所以這兩行是重復的數據,第五行中,Lucy 的年齡是空缺的,而 Lucy 和 Lily 是一對雙胞,所以可推測 Lucy 的年齡也應該是 18 歲,此處是填補缺失值。
對于普通的數據集的數據清洗方式與在計算機視覺領域中運用的數據清洗方式是非常類似的。比方說,為了能夠得到更好的訓練結果,或是預測的結果,我們需要對圖片來進行處理,可能是灰階的處理,或者是需要把這個圖片進行縮放。清洗方法本質上是類似的。
第四階段,模型的獲取和訓練。對于學生而言,模型的獲取途徑通常是一些先進的論文,獲取之后,再去復現模型的結構。但實際上,在真正的產業中,復現論文的做法并不普遍,大家多數還是去獲取已有的成熟的一些模型,例如YOLO, MobileNet,其原因是學術與產業的不對等關系,產業往往會滯后學術若干時間,所以模型的獲取多數情況下都是選擇開源的,經典的,并且容易獲取的模型,再將它做重新的訓練。
第五階段,模型的評價。
模型的獲取和訓練做完了之后,我們需要做模型的評價,這個評價相信大家比較熟悉的肯定是前面的這一部分,也就是 Precision,Recall 和 F1 Score,這里不去專門的講解,因為這三個評價指標是非常常用的,也是在我們模型訓練的時候一定會用到的。下面提到的這兩個指標,Latency 和 FPS,筆者會去解釋,因為這兩個指標相對來說,與工程部署的關系更大。
因為模型的訓練通常是在實驗室的環境里面進行的,當前三個指標訓練好了之后,并真正將其投入到生產環境里面去部署是,其實并不會 100 % 得到想要的結果。因為生產環境與實驗室的環境是不盡相同的,所以,即使你在實驗室做出一個非常完美的算法,當真正投入到生產環境里面去部署它時,產生的的問題也會是很多的。舉例來說,你可能只考慮到了一些高價的設備,但是你沒有考慮到一些低性能的設備等等。
那么,這里解釋一下后面這兩個參數,第一個參數是 Latency,也就是延時,這個延時通常是拿來衡量一個模型,它推理一次需要的耗時的,它的單位通常是毫秒。Latency 是越小越好的,越小代表你的模型處理起來是越快的,尤其是在工業的一些需要實時響應的場景中,其耗時是非常小的,甚至可以達到微秒級別。第二個參數是 FPS,即 Frame Per Second,也就是一秒鐘可以處理的幀數,它的另一個名字叫做吞吐量。
第六階段,模型的部署。模型的部署是最復雜的,也是 OpenVINO 和 DevCloud 重點想解決的問題。
如上圖所示,分別給出了三個不同的工作負載端。第一個工作負載是手機,第二個工作負載是電腦終端,第三個工作負載是在云端。傳統來說,模型的部署在整個 AI 應用的生產環節中是最耗費資源的。不同的工作負載,它的生產環境是不一樣的。由于現在 AI 的發展趨勢是降低 AI 的使用門檻,讓整個 AI 開發變得自動化,所以現在出現了各種各樣的工具來解決模型部署的問題,包括 OpenVINO 和 DevCloud。
以上是關于 intel 開發工具及實驗平臺介紹,以及它們在 AI 項目工作流程中的運用,歡迎大家批評指正。
總結
以上是生活随笔為你收集整理的从零开始搭建AI应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 六、【STM32】eeprom的使用 以
- 下一篇: Mac M1安装arm64原生Pytho