概述python
前幾天的 Windows Developer Day 正式發佈了 Windows AI Platform,而做爲 Windows AI Platform 的模型定義和訓練,更多仍是須要藉助雲端來實現。Azure 無疑是一個很好的選擇。android
Azure 做爲微軟近幾年主推的雲服務,在 AI 和 Machine Learning 方面也處於領先水平。目前 Azure 提供的 AI 能力涵蓋了機器視覺、語義語音、語言理解、語言翻譯、認知服務等各個領域。它們大多以封裝的 API 出現,開發者不須要關心訓練數據集的採集,不須要關心訓練過程和訓練後的數據模型,只須要調用 API,輸入你的數據拿到理想的輸出就能夠了,能夠說是很是方便了,好比 Azure 的 Face API、Computer Vision API 等。可是,若是咱們的數據集不是通用數據集,咱們想使用自定義的特徵,制定本身的分類呢?這種封裝好的 API 彷佛就不那麼適合了。ios
針對這種場景,微軟推出了 Custom Vision Service(自定義影像服務),包含在 Cognitive Services(認知服務)中,目前還處於 PREVIEW 階段。雖然叫作 Custom Vision,可是目前只提供了圖像自定義,或者叫作圖像分類功能,在正式發佈使用後應該會擴充影像定義的其餘領域。git
服務體驗github
基本概念編程
Custom Vision - Visual Intelligence Made Easy機器學習
這是 Custom Vision 的 Slogan,讓視覺智能變得簡單。而爲何叫作自定義呢,看看官網的一張使用流程圖:編程語言
使用過程工具
Custom Vision 的管理單位是項目,登陸微軟帳號後,點擊 「New Project」 咱們就能夠開始建立新的項目了:學習
輸入項目名字和描述,選擇一個域,就成功建立出一個項目了。這裏咱們重點看一下目前提供的域:General、Food、Landmarks、Retail、Adault、General (compact)、Landmarks (compact)、Retail (compact)。其中標註爲 compact 的三個域,訓練後的模型都是能夠導出的。能夠看出,由於還在預覽階段,因此提供的域還不多,對於開發者來講,若是能夠肯定爲某個域的識別,就選擇那個域,若是不能肯定,就選定爲 General。
項目建立成功後,咱們來看一下項目主頁面:
接下來咱們結合實際應用場景,實際體驗一下使用過程。咱們針對 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 平臺支持的導出方式有兩種:
看到這裏,不由想吐槽一把,你們還記得前面介紹過的 Windows AI Platform 嗎,它支持的 onnx 模型文件格式,在 Custom Vision 中並不支持,這仍是一家人嗎?😭 不過 Custom Vision 目前仍是預覽版,咱們仍是期待正式發佈時能夠支持吧。
不過也沒有關係,咱們依然能夠建立一個 Android 或 iOS 工程來驗證,官網也提供了這兩個平臺的示例:
以及,在介紹 onnx 時,咱們就看到 WinMLTools 工具,能夠把不少格式轉換爲 onnx 格式:Python WinMLTools 0.1.0.5072,這裏暫時不作驗證了。
編程實現
除了使用 Custom Vision 網站進行圖片上傳和訓練,Custom Vision 還支持經過代碼來建立項目,上傳圖片,觸發模型訓練,對模型作驗證等。目前支持的編程語言是 C# 和 Python,這看起來很合理,畢竟一個是官方語言,一個是最經常使用的 AI 編程語言。其中 C# 使用的是 Azure 的認知服務 SDK:https://github.com/Microsoft/Cognitive-CustomVision-Windows/. 這裏暫不展開,後面會詳細講解 C# 建立應用實現 Custom Vision。
展望
因爲目前 Custom Vision 仍是預覽版,因此能實現的功能還頗有限,只有圖片識別分類功能。可是根據它的名字,自定義圖像,後面應該會有更多種類的服務發佈。並且它包含在 Azure 的認知服務中,這個服務是 Azure 主打的人工智能服務的重要部分,能夠想見後面會有更重要的應用和推廣。並且結合 Azure 帳戶,訓練數據的量級也再也不受限制,這給那種人工智能的數據集非固定,特徵自定義的場景提供了很大的便利,開發者既能自定義數據和特性,又不用本身搭建機器學習環境,也不用本身手寫數學模型。能夠說是很值得期待的!