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
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus