[玩具系列]用Azure Custom Vision 建立玩具分類器

繼上一篇[[玩具系列]快速建立一個Azure Bot Service 服務]我們建立好的一個Bot,但是還是無法去分辨玩具的歸屬,當玩具夠多有些又長的很像時候,說真的大概只有小孩子可以分辨出哪些是脽的玩具,那些是自己的。對於大人們可能要看起來都差不多,尤其像是寶可夢系列的玩偶,根本無法知道哪隻是哪隻,這時候就必須透過Smart方式來處理,可以用Cognitive Services簡單做出分類器。在AI識別的方法針對這問題作法很多,但要怎樣最快又簡單解決這問題,透過API算是比較容易達到。
只要登入到https://www.customvision.ai/ 的Portal,就可以透過UI方式幫你訓練模型,這樣方式算是相當簡單的。
建立訓練模型專案
一進入之後就是必須新建一個模型訓練的專案。

這裡專案類型有兩種,分別是分類和物件偵測。就目前只是分類玩具歸屬,利用分類的專案範本就可以,我曾經試過用物件偵測範本,最後結果其實是沒甚麼太大用處,畢竟顧名思義就是做偵測物件後的判定,該範本產生模型最後就是會告訴你在圖片中該玩具位於哪個位置以及相關資訊等等
選好了Classification Project後,可以選擇要分類的類型,要用Multi-Tag或是Single-Tag,就看需求決定了,如果只是要針對玩具歸屬人,就可以選擇Single-Tag,如果不只是要歸屬人還要知道是屬於哪種類型玩具,就會建議使用Multi-Tag會比較方便
至於Domain部分,說真的我認為除非你要是別的東西真的很符合該Domain,不然真的效益上與鑑別上,我真的感覺沒有很大。如果無法確定,就選擇General吧
選擇好專案後,透過Add Images,選擇要上傳的圖片,圖片選擇好之後,可以直接增加要給這些圖片的Tag

當然,也可以在事後去Tag這些圖片。不過,如果可以確認分類時候,再上傳給Tag會比較簡單一些。而如果你有預先在旁邊加上Tag,在這個時候這裡面的欄位就會跳出讓你選擇Tag的選項,而在旁邊可以顯示出每個Tag已經歸屬多少圖片。當然也會顯示那些圖片是沒有被給予Tag的

如果都設定好之後,就可以選擇Train,開始進行模型訓練。之前都沒有訓練過模型,就不會出現Quick Test。會出現Quick Test,表示最少已經訓練過一次

在訓練模式中可以分為快速訓練和進階訓練,從文字顧名思義,使用進階訓練會建立較多圖像識別層進行圖形訓練,相較來說時間和速度都會比較慢

而這樣產生的模型也相對會準度較高。訓練完畢之後,就會出現下面這樣畫面,這就是所謂的評估分類器

自訂視覺服務會利用名為 k-fold cross validation 的程序 精確度和回收是衡量分類器效率的兩個不同標準:
Percision表示識別的正確分類所得到的分數。 例如,如果模型識別 100 張影像為狗,而實際上有 99 張為狗,則精確度為 99%。
Recall表示正確識別實際分類所得到的分數。 例如,如果實際上有 100 張影像為蘋果,而模型識別 80 張為蘋果,則回收為 80%。
另外,也可以調整左上角的Probability Threshold。Probability Threshold就必須依照你對於準確定來做設定,是否調高就一定好,這是不一定,調太高反而會造成影像無法辨識。
訓練好之後,會有多種匯出模型方式,最簡單一種就是透過原生的 Prediction API,系統會自動給於URL和Key,只要設定好就可以就使用

甚至可以直接用Postman就可以進行測試了,算是最方便的一種。如果不想要這樣方式做模型存取,也可以選擇Export,把模型匯出來,放到自己想要的平台上,目前有五種平台可以匯出

我比較常用就是使用Dockerfile方式建立Model Container,還可以選擇你想要建立的是哪一個平台上的container,就會自動產生的Dockerfile,此時只要去Build這個Dockerfile,就可以產生出模型的Container

然後就可以依照自己喜愛的地方去放置Model來使用。以目前手上這簡單CASE來說,透過這樣方式注入AI化,就相當簡單了