概述 前幾天的 Windows Developer Day 正式發佈了 Windows AI Platform,而作為 Windows AI Platform 的模型定義和訓練,更多還是需要藉助雲端來實現。Azure 無疑是一個很好的選擇。 Azure 作為微軟近幾年主推的雲服務,在 AI 和 Ma ...
概述
前幾天的 Windows Developer Day 正式發佈了 Windows AI Platform,而作為 Windows AI Platform 的模型定義和訓練,更多還是需要藉助雲端來實現。Azure 無疑是一個很好的選擇。
Azure 作為微軟近幾年主推的雲服務,在 AI 和 Machine Learning 方面也處於領先水平。目前 Azure 提供的 AI 能力涵蓋了機器視覺、語義語音、語言理解、語言翻譯、認知服務等各個領域。它們大多以封裝的 API 出現,開發者不需要關心訓練數據集的採集,不需要關心訓練過程和訓練後的數據模型,只需要調用 API,輸入你的數據拿到理想的輸出就可以了,可以說是非常方便了,比如 Azure 的 Face API、Computer Vision API 等。但是,如果我們的數據集不是通用數據集,我們想使用自定義的特征,制定自己的分類呢?這種封裝好的 API 似乎就不那麼適合了。
針對這種場景,微軟推出了 Custom Vision Service(自定義影像服務),包含在 Cognitive Services(認知服務)中,目前還處於 PREVIEW 階段。雖然叫做 Custom Vision,但是目前只提供了圖像自定義,或者叫做圖像分類功能,在正式發佈使用後應該會擴充影像定義的其他領域。
服務體驗
基本概念
Custom Vision - Visual Intelligence Made Easy
這是 Custom Vision 的 Slogan,讓視覺智能變得簡單。而為什麼叫做自定義呢,看看官網的一張使用流程圖:
- Upload Images - 上傳圖片並做標記
- Train - 使用標記圖片訓練模型
- Evaluate - 對訓練後的模型進行訓練
使用過程
Custom Vision 的管理單位是項目,登錄微軟賬號後,點擊 “New Project” 我們就可以開始創建新的項目了:
輸入項目名字和描述,選擇一個域,就成功創建出一個項目了。這裡我們重點看一下目前提供的域:General、Food、Landmarks、Retail、Adault、General (compact)、Landmarks (compact)、Retail (compact)。其中標註為 compact 的三個域,訓練後的模型都是可以導出的。可以看出,因為還在預覽階段,所以提供的域還很少,對於開發者來說,如果可以確定為某個域的識別,就選擇那個域,如果不能確定,就選定為 General。
項目創建成功後,我們來看一下項目主頁面:
- Training Images - 上傳你的訓練圖片數據集,上傳後給每張圖片做標記;在 Workspace 中對圖片和標記進行管理;
- Performance - 針對訓練數據的表現,可以看到每個分類訓練後的表現數值,來調整自己的表現閾值;
- Predictions - 針對訓練後的模型,評估和預測對測試圖片的分類準確度表現;
- Train - 準備好訓練圖片數據集後,點擊 Train 按鈕開始訓練任務;
- Quick Test - 訓練完成後,可以用測試圖片線上進行簡單快速的測試;
接下來我們結合實際應用場景,實際體驗一下使用過程。我們針對 5 個分類的手繪草稿進行分類識別,每個分類 10 張圖片,分類分別是:airplane,alarmclock,ambulance,ant,arm:
需要註意的是,Custom Vision 對分類的數量和每個分類的圖片量都有要求,至少兩個分類,每個分類至少五張圖片;
另外,因為 Custom Vision 還是預覽版,所以對圖片和項目的上限也有限制,每個項目只能上傳 1000 張圖片,50 個分類,20 次迭代。另外創建項目總數限製為 20 個項目,預測的 key 上限是每天 1000 個。如果使用 Azure 賬號登錄,數量限制會被取消,對應的是一個收費策略,針對 Azure 國際版用戶:
現在開始通過我們的 50 張圖片的數據集來訓練模型:
可以看到,因為我們上傳圖片的量級很小,而且數據特征不是很穩定,所以每個分類訓練的準確度都不太穩定,召回率也是一樣。
數據模型訓練完成後,我們先用最簡單的方式 “Quick Test” 來測試一下分類準確度:
首先用一張在分類內的圖片 airplane 來測試,可以看到,識別為 airplane 的幾率明顯大於其他幾個分類。
再用一張不在分類內的 fish 來測試,因為 fish 不在我們的 5 個分類里,而且這張手繪草稿中的特征和分類里的也不相近,所以識別結果比較平均,且都比較低,這個結果在預期內。
API 結果驗證
除了 "Quick Test" 的簡單線上測試方式,還支持 API Prediction 方式,對於批量自動化測試更適合。在 Prediction Tab,可以看到這個項目對應的 API 地址和 Key 信息:
為了驗證簡潔,我們使用 Postman 按照上面指引的方式來設置參數和輸入圖片:
我們使用本地文件進行測試,設置 Headers 和 binary 類型的 Body 後,得到以下結果:
這裡的 airplane 文件其實就是上面 Quick Test 的第一張圖片,所以可以看出,檢測結果也是一樣的,這也驗證了兩種驗證方式的結果。
模型導出
上面我們說過,帶有 compact 字樣的模型是可以導出的,目前 Custom Vision 平臺支持的導出方式有兩種:
- iOS 11 (Core ML) - .mkmodel 文件格式
- Android (Tensorflow) - .pb 文件格式
看到這裡,不禁想吐槽一把,大家還記得前面介紹過的 Windows AI Platform 嗎,它支持的 onnx 模型文件格式,在 Custom Vision 中並不支持,這還是一家人嗎?