[chatbot + AI = 下一代操作模式][27]Custom Vision - 自己的Model自己Train 建立圖片的分類模型 @ Alan Tsai 的學習筆記|An Asp .Net Mvc Web Developer Blog

Alan Tsai 的學習筆記


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

[chatbot + AI = 下一代操作模式][27]Custom Vision - 自己的Model自己Train 建立圖片的分類模型

[chatbot + AI = 下一代操作模式][27]Custom Vision - 自己的Model自己Train 建立圖片的分類模型.jpg
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 

上一篇([26]賦予chatbot OCR的能力 - 加入對發票的功能)介紹完了Computer Vision裡面的OCR服務整合到BotBuilder的程式了之後,來看看另外一個和Vision有關的服務,Custom Vision。

在這一篇將介紹Custom Vision是一個什麽樣的服務,并且如何用Custom Vision來建立一個之後會用到的模型。

Custom Vision是什麽?

還記得Computer Vision在介紹的時候提到,那個服務是由微軟用了非常大量的圖片train出來的模型,用來做通用圖片辨識的服務。

可是,每一個使用情景不同,可能會有自己domain的圖片,這個時候Computer Vision就太Generic導致無法很好的識別這些特定領域的圖片。

那有沒有其他的解決方案呢?既然微軟Train出來的是Generic的模型,難道沒辦法自己提供圖片做Training嗎?

這個就是Custom Vision出現的原因,自己的模型自己Train,最後Train出來才符合自己的Domain使用。

Custom Vision是在train什麽模型?

上面一直提到train自己的模型,可是這個train出來的模型目的是什麽?

Custom Vision有兩個目的:

  1. Train出一個能夠分類(classifier)的模型
  2. 能夠從圖片找到物體的範圍 - 目前在preview,這幾篇不會介紹這個功能

如果沒有接觸過Machine Learning可能對於分類還是沒什麽概念,那麽換成HotelBot的情景看看:

在每一間房間裡面有冰箱,在冰箱有不同類型的飲料,有沒有辦法讓客人對想喝的飲料拍照,然後chatbot就顯示出要多少錢?

從上面的情景可以發現需求是,把拍照的内容做分類,判斷出屬於那一類的飲料,因此Custom Vision非常適合這個工作。

在Custom Vision建立模型

上面瞭解了服務的用途以及概念了之後,接下來看看如何建立一個模型。

要建立模型總共經歷幾個步奏:

  1. 找訓練資料 - 每一種分類至少準備5張相片
  2. 在customvision.ai建立一個專案
  3. 在專案裡面開始上傳training的圖片
  4. 執行Train的動作
  5. 測試

找訓練資料

首先是需要找素材,這邊我將對於3個類型的飲料去網路上面找一些圖片:

  • 可口可樂
  • 百事可樂
  • 雪碧

Training的圖片越多越好,至少5張爲好,當然不夠也沒關係,只是準確度有差。

另外一個是在production的時候,最好有些圖片是真實拍出來會比較好,因爲有些網上圖片特徵太明顯會造成之後識別不準確。

在customvision.ai建立一個專案

Custom Vision和LUIS非常類似,都是到某個網站建立一個專案之後才做,因此:

先到https://customvision.ai/主頁,然後按下Sign in的按鈕,登入帳號了之後會看到專案的畫面:

  1. 如果帳號有多個Azure Subscription的話,右上角可以切換
  2. 建立新的專案選擇New Project,如果是調整現有的點選列出來的專案即可

登入之後的畫面

點下New Project之後,有一些欄位需要做填寫:

  1. Name:好識別即可
  2. Description:詳細描述,給自己看的
  3. Resource Group:牽扯到模型建立在那邊,有免費可以用,如果要production就要放在付費的等級比較好。可以選擇旁邊的Create new來建立
  4. Project Types:還記得之前提到這個服務有兩個作用,這邊關注classification(分類)的功能
  5. Classification Types:決定一張圖片能不能有多個標簽,以我們的例子一張圖片一個標簽,因此選2
  6. Domains:如果圖片屬於某個領域可以選。有括弧compact表示比較輕量,適合匯出到ios/android的時候選
  7. Create Project:沒問題之後就點下將會開始建立
chrome_2018-08-06_23-15-15.png
建立Project

在專案裡面開始上傳training的圖片

專案有了之後,就可以開始Train模型。

透過Add Image的按鈕,可以選擇要上傳的圖片,例如要設定可口可樂:

chrome_2018-08-06_23-29-17.png
選擇5張可口可樂圖片

再來要對這些圖片設定一個標簽,這邊輸入了coke,然後按下upload

chrome_2018-08-06_23-30-36.png
設定標簽

稍等一下,上傳成功的話按鈕會變成Done

chrome_2018-08-06_23-31-53.png
上傳成功的截圖

按下Done之後,pop up就不見了,這個時候:

  1. 剛剛上傳的圖片會顯示出來
  2. 在左邊可以對這些圖片做篩選
  3. 透過按鈕Add images可以增加更多的圖片做training
chrome_2018-08-06_23-32-33.png
上傳完的截圖

重複把其他兩個飲料也處理了,接下來就可以準備做training了。

執行Train的動作

接下來就按右上角的Train按鈕即可:

chrome_2018-08-06_23-35-53.png
按下Train的按鈕

稍等一下,畫面會自動切換到Performance的部分,并且會看到關於這次train完的PrecisionRecall

chrome_2018-08-06_23-38-16.png
看Train的結果

Precision和Recall的意義在稍後篇幅會介紹,這個是Machine Learning做classifier常用的一種數字。

測試

接下來就是測試模型的實際運行會如何,透過按下右上角的Quick Test,這個時候會多出一個pop up,可以用圖片上傳,或者直接給圖片網址的方式給測試。 這邊用了一張人把雪碧拿在手上的相片做測試:

  1. 首先輸入圖片的網址
  2. 按下往右的箭頭執行測試
  3. 左邊會顯示這張圖片的樣子
  4. 右下角會出現分類的概率 - 可以看到辨識出了sprite
2018-08-06_23-41-57.png
測試圖片分類的準確度

結語

這篇介紹了Custom Vision這個服務的目的以及用途。并且給出了一個測試情景,透過照片告訴客人這個飲料的費用是多少。

依照這個情景,找了圖片,并且實際看看如何在Custom Vision裡面建立出模型并且做測試。

在這個過程,其實會發現操作起來和LUIS非常類似,因此有了LUIS的概念,上手應該沒什麽問題。

下一篇([28]整合Custom Vision到chatbot - 拍照就可以識別價錢)將整合到chatbot裡面,看看如何讓chatbot告訴使用者拍的飲料是多少錢。

comments powered by Disqus