Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 記錄軟體開發的點點滴滴 著重於微軟技術、網頁開發、DevOps、C#, Asp .net Mvc、Azure、AI、Chatbot、Docker、Data Science

[chatbot + AI = 下一代操作模式][31]Custom Vision Train好的Model匯出離線和給app使用

[chatbot + AI = 下一代操作模式][31]Custom Vision Train好的Model匯出離線和給app使用.jpg
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 

上一篇([30]Confusion Matrix - 用來衡量Classifier Model的方式 Precision和Recall)介紹了Confusion Matrix并且如何使用Precision和Recall這兩個指標來衡量一個Classifier Model的好壞。

這一篇又回到了Custom Vision。在Custom Vision Train好的Model是否能夠拿來離線和或者別的應用例如app裡面使用呢?

Custom Vision有提供匯出Model的功能,這篇將對這個部分介紹。

如何匯出Model?

首先,進入到customvision.ai要匯出的Project裡面,然後切換到Performance這個tab。

可以看到有一個Export的按鈕:

chrome_2018-08-12_21-06-09.png
匯出Model的截圖

不過可以看到目前按鈕是灰色的無法按下,滑鼠移動過去有説明原因。

還記得在一開始建立Project的時候,有詢問一個問題,也就是目前這個Training要使用那個Domain。在選項裏面有幾個是由括弧Compact。只有屬於Compact才能夠被匯出

還記得之前建立的時候,選擇的是General,也因爲這樣所以無法匯出。

因此要調整一下,透過右上角的齒輪icon進入設定畫面,然後調整Domains為General (compact)

chrome_2018-08-12_21-16-17.png
調整Domain模式

調整好了之後,需要重新train一次,因此按下Train

這個時候在回到Performance下面,多出了一個Iteration 3,這個版本可以看到Domain換成了General (compact)并且Export可以按了:

chrome_2018-08-12_21-20-49.png
可以匯出Model了

匯出格式的選擇

點下Export會一個畫面pop up出來,裡面有不同的格式可以選擇,總共有:

  1. coreML:iOS 上面可以用的Model
  2. TensorFlow: android 上面可以使用的Model
  3. ONNX:微軟和Facebook想要推廣的一種開放的格式 - 詳細下篇介紹
  4. Docker File:這個可以搭配 Azure IoT Edge,Azure Function和Azure ML使用
chrome_2018-08-12_21-25-58.png
匯出可以選擇的畫面

依照不同的使用目的,選擇匯出不同的格式。

ONNX這個是微軟和Facebook在推動的一種格式,下一篇介紹。

這邊介紹Docker File版本。

使用Docker File版本

Docker File版本從本質上面來說不是一種格式,因爲這個Docker File的裡面其實跑的是TensorFlow的Model。

不過Docker File的好處是要在Local跑很方便并且可以很容易整合到Azure IoT Edge(這個很有意思,未來有機會在開另外一個系列介紹)和Azure ML裡面。

這邊分兩個步奏來做:

  1. 建立Docker Image
  2. 執行測試

建立Docker Image

要使用很容易,點下Docker file版本,可以選擇要用Windows還是Linux的Image,選擇好了之後第一次點Export會有個進度條在跑,跑完了要再點一次Export才會能夠下載一個zip檔案:

chrome_2018-08-12_21-29-12.png
選擇Docker File版本

這邊我將使用Linux的Image版本,把下載下來的zip解壓縮出來之後長的是這樣:

explorer_2018-08-12_21-50-34.png
解壓縮出來的zip内容

接下來的操作是在使用Docker,如果電腦沒有docker可以去官方下載:https://www.docker.com/products/docker-desktop。如果是在Windows,記得目前的模式要符合 下載下來的版本,我使用的是Linux因此確認在Linux Container模式。
如果使用的是Linux版本,這裡有個bug,需要去修改DockerFile,預設第一行是FROM python,改成FROM python:3.6,要不然Image會build不起來。

開啓powershell,然後移動到那個資料夾下面然後輸入指令:docker build -t customvision-hotelbot .

稍等一會安裝好了之後,在輸入指令:docker image ls,會看到剛剛建立出來的image:

powershell_2018-08-12_22-22-50.png
確認image建制成功

執行測試

接下來就是把這個image run起來,使用指令:docker run -p 127.0.0.1:80:80 -d --rm customvision-hotelbot

這時候到瀏覽器輸入localhost,會看到:CustomVision.ai model host harness

chrome_2018-08-12_22-27-55.png
docker image run起來

這個時候可以使用Postman:

  1. 選擇POST,然後網址輸入localhost/url
  2. 切換到Body
  3. 選擇raw,然後内容格式是application/json
  4. 輸入内容:{"url":"https://tse3.mm.bing.net/th?id=OIP.HQGKG0hVIp6A9g9XK16ldAHaJy&pid=Api"} - 這邊格式和Computer Vision的OCR一樣,可以自己換圖片網址
  5. 送出之後,可以檢查返回結果,可以看到識別出是sprite = 判斷正確
Postman_2018-08-12_22-33-06.png
測試結果

這個服務還有支援用本地的圖片或者直接傳入binary的方式來傳送圖片,詳細可以參考ReadMe.txt這個檔案。

結語

這一篇介紹了如何把Custom Vision Train好的Model匯出來,然後使用Docker File版本建立出一個Tensorflow的api服務可以離線使用。

匯出這個功能非常的方便,因爲就算不懂程式或者不懂任何Machine Learning的知識,但是可以透過Custom Vision直覺的UI操作方式Train好一個Classifier Model然後用匯出 的方式讓不同的程序可以使用這個Model。

在選擇匯出的時候有出現一個ONNX的格式,這個格式有點特別,因爲是微軟和Facebook聯合在推動的一種Model的Open格式。

因此,下一篇([32]Cognitive Service語音服務相關介紹 - ONNX在另外一篇介紹)將對這個ONNX做一些介紹,并且看看如何用Window ML來run這個Model。


如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus