以 Azure Custom Vision 實作圖像分類器 — 1

Ashe Liao
Ashe’s tech talks
6 min readAug 31, 2018

1. 前言

  • Custom Vision 是什麼

Custom Vision 是由Microsoft所開發的雲端服務,讓使用者可以輕鬆打造影像分類器和物件辨識。

只需由使用者上傳圖片並標籤後,就可以透過Custom Vision訓練出一個合適的模型,使用者可以透過Web介面或是下載模型做後續應用。

簡言之,Microsoft Custom Vision 和 Google Auto ML有著相似的理念,使用者不需深入了解機器學習的技術架構及演算法,只需上傳圖片,點幾個按鍵後就可以輕鬆地訓練出模型,模型匯出後的結果甚至和tensorflow所訓練出的模型格式相同。

  • 分類器是什麼

分類器(Classifier),是透過分群演算法所建構出來的模型。我們可以透過分群的方式將資料分隔,在新資料進來時,就可以透過分類器知道新資料的標籤應該為何。

舉例來說,如果我們讓電腦自動揀選土豆。一粒土豆是一筆數據, ( 土豆重量 , 土豆顏色 ) 是其數值。首先,取一百粒土豆,個別以儀器測量其數值,然後人工進行分類,分為良與劣兩類,再把這些數據全數輸入到電腦當中。接著,利用任何一種分群的演算法,找到良與劣的分界線。則每一粒新產的土豆,都可以以儀器自動測量其數值,再用演算法判斷數值在分界線的哪一側,就能判斷出土豆的良劣了。( From NTNU CSIE 演算法筆記)

回到主題,我們也可以透過Custom Vision的分類器來實作圖像分類,我們只需把照片丟入Custom Vision並加上標籤,就可以由Custom Vision訓練出一個合適的分類器模型。

2. 設定步驟

  • 首先,你必須要有Microsoft的帳號,才可以開通Custom Vision的專案。註冊Microsoft的帳號及開通Custom Vision的權限完全免費。甚至,在免費帳戶下,你可以擁有兩個免費專案,每個專案可以有 5,000 個訓練影像
    以及10,000 個預測結果。
  1. 在擁有Microsoft的帳號後,可以由此處進入Custom Vision的頁面。點選Sign In就可以登入你的帳號並進入你專屬的專案介面。
  2. 點擊New Project就可以新增一個專案,不過要注意的是,一個免費帳戶只能擁有兩個專案。若是免費帳戶,請選擇Limited Trial。若是付費帳戶,則可以選擇現有的一個群組,或輸入Name(專案的名稱)、Description(描述)及Resource Group(資源群組)來新增一項。資源群組類似資料夾的概念,在第一次進入時,你應該不會有任何的資源群組可供使用,請新增一個。
  3. 下方的Project Type有兩項可供選擇,這邊我們選擇 Classification(分類器),另一項 Object Detection (preview) 是物件偵測,可以在畫面中偵測特定物體並給出框線。由於這項服務有限制呼叫API的次數,因此一般並不會由這項服務來實做物件偵測,我們會使用沒有次數限制的深度學習框架CNTK。
  4. Classification Types 則需看你標籤的數目多寡,若你只想在單張照片中辨識單一標籤,可以選擇 Multiclass (Single tag per image),若你想在一張照片中辨識多個標籤,則可以選擇 Multilabel (Multiple tags per image)。
  5. 設定的最後一部分則是選擇 Domain,請選擇一個最符合專案場景的選項。若需要匯出模型至本機,則需選取帶有compact的後綴場景( General (compact)、 Landmarks (compact)、 Retail (compact) 等三種)
  6. 全數設定完成後,就可以點選create project 來新增一項專案。

3. 訓練模型及其結果

剛進入一個專案的樣子

剛進入新增的專案時,會呈現如上圖的樣子。右上方有三個項目可供選擇,分別是Training Images, Performance以及Predictions,以下會分別介紹。

在一開始進入專案時,會預設停留在Training Images的頁面。

這是因為如果要訓練一個模型,我們必須先提供足夠數量的照片讓模型來學習,這個步驟稱為訓練。

因此,在這個頁面,你可以新增一些你想讓模型認識的照片。舉例來說,如果你想讓模型透過訓練後,可以辨識香蕉和西瓜,那麼你就需要先上傳一些香蕉和西瓜的照片讓模型學習。

在第一次新增照片時,你需要手動輸入這張照片的標籤,也就是你想要模型可以透過這張照片辨識出什麼資訊。

只有第一次需要手動輸入標籤,之後新增的照片都可以透過點按已有的標籤即可新增

在這個範例中,我們新增了十張香蕉和十張西瓜的照片,來讓模型學習辨識兩者的不同進而學習分類。

全數上傳完成並標籤後的結果

全數上傳完成後,就可以點選右上方的綠色Train按鈕來進行訓練。按下後會自動跳轉到Performance的頁面,在這邊可以看到模型訓練後的結果。

上面這張圖就是模型訓練後的結果,Iteration 1是指第一次訓練後的結果,再訓練第二次、第三次後,就會多出Iteration 2,Iteration 3的結果,每次的結果可能都不盡相同,牽涉到照片樣本多寡及解析度、雜訊等問題。

而我們該如何評價這個模型的好壞呢? 我們可以透過上圖的Precision和Recall來解讀。Precision稱為準確率,Recall稱為召回率,在不牽涉過多術語的情況下,一般來說,兩者皆是越高越好。如果要詳細定義兩者的不同,則讀者需要有混淆矩陣等機器學習的相關知識,若有機會會再深入說明。

結束訓練後,我們可以點按右上方的Quick Test來檢視模型是否能正確預測香蕉和西瓜。你需要準備一張之前沒有使用過的香蕉或西瓜的照片並上傳,上傳後就會馬上得到結果。

以範例來說,新上傳的照片被分類器認為是香蕉的機率有100%,相對的,西瓜則是0%。

至此,我們就完成了一個簡單的圖像分類器,下一篇則會教學要如何將模型匯出至本機端並做後續的應用。

--

--

Ashe Liao
Ashe’s tech talks

Azure Solution Specialist, Microsoft Taiwan | Microsoft 15th MTC TAI | NTU BDSRC RA, DSSI TA