歡迎來到Core ML教程系列的第二部分。在本教程中,將學習如何設置Python虛擬環境,獲取不在Core ML格式裡的數據模型,並將該模型轉換為Core ML格式,最後將其集成到應用程式中。強烈建議讀者先閱讀上一個教程,然後再繼續閱讀本篇文章。
在這個專案中,我們將構建一個花的識別應用程式,就如同下圖所示。然而,主要的重點是告訴你如何獲得一個訓練有素的模型,並將其轉換為Core ML格式,以供iOS應用程式開發。
在我們開始前…
本教程的目的是幫助讀者了解如何將各類型的數據模型轉換為Core ML格式。不過,在開始之前,我應該給你一些機器學習框架的背景知識。現在有許多流行的deep learning框架,為開發者提供工具去設計、構建和訓練自己的模型。我們要使用的模型來自Caffe。Caffe由Bekerley人工智能研究(BAIR)開發,它是創建機器學習模型最常用的框架之一。
除了Caffe之外,還有許多其他框架,例如Keras,TensorFlow和Scikit-learn。這些框架都有自己的優點和缺點,讀者可以在此處了解更多資訊。
在機器學習中,一切都從模型開始,替系統進行預測或識別,教電腦學習就包含透過machine learning演算法來培養數據進行學習。訓練產生的輸出通常稱為機器學習模型,有不同類型的機器學習模型都用來解決相同的問題(例如對象識別),但它們之間具有不同的算法。神經網絡,Tree Ensembles,SVM是其中一些機器學習算法。
在Core ML推出的時候,並不支持將這些模型在不同的框架進行轉換,Apple官方以下圖說明Core ML支持的模型和第三方工具。
要將數據模型轉換為Core ML格式,我們使用一個名為Core ML Tools的套件。在下一節中,我們將使用Python下載這些工具並將其用於轉換。
安裝Python並且進行環境設置
許多研究人員和工程師透過各種架構和數據為不同任務提供Caffe模型,這些模型被學習並應用的領域,從簡單回歸到大規模視覺分類,再到圖像相似性的孿生網絡(Siamese Networks),語音和機器人應用的問題。
- Caffe Model Zoo
你可以在GitHub上找到已預先訓練的各式Caffe模型,為了有效共享模型,BAIR引入了model zoo框架。而且你可以在這裡找到一些可用的模型。在本教程中,我使用這個Caffe模型,向讀者展示如何將其轉換為Core ML格式,並加以實驗花朵的判定工作。
首先,請在此下載初始專案,如果你打開項目並查看程式碼,可以看到訪問攝像頭和照片庫所需的程式碼已經鍵入,你可能發現到與先前那篇教程的差異,缺少的就是Core ML模型。
你應該還注意到在project bundle中另外3個文件:oxford102.caffemodel
,deploy.prototxt
和class_labels.txt
。這是將用於demo的Caffe模型和文件,稍後我們會詳細討論。
要使用Core ML Tools,第一步是在Mac上安裝Python。首先,下載Anaconda(選擇Python 2.7版本)。Anaconda提供一個非常簡單的方法,可以在Mac上運行Python,而不會造成任何問題,完成安裝Anaconda後,轉到終端機(terminal)並輸入以下內容:
conda install python=2.7.13
conda update python
透過這兩行程式碼中,我們安裝了指定的python版本,在本教程撰寫的時候,Python 2的最新版本是2.7.13,以防萬一,安裝完Python之後,請輸入第二行,以便更新到最新版本。
下一步是創建一個虛擬環境,在虛擬環境中可以使用不同版本的Python或packages編寫程式,要創建新的虛擬環境,請輸入以下程式碼。
conda create --name flowerrec
當終端機顯示提示,
proceed ([y]/n)?
輸入“y”表示同意。恭喜你!現在你有一個名為flowerrec
的虛擬環境!
最後,輸入以下指令來安裝Core ML Tools:
pip install -U coremltools
轉換Caffe Model
再次打開終端機,並輸入下列程式碼,就會進入你設立的虛擬環境中:
source activate flowerrec
然後移動到初始專案的目錄中,它包含三個文件:class_labels.txt
,deploy.prototxt
和oxford102.caffemodel
。
cd
當你進入文件夾,就是啟動python的時候了,只需簡單輸入python
,你將被帶到終端機中的Python介面,第一步是import Core ML tools。
import coremltools
下一行真的很重要,所以請注意。輸入下列這一行,但不要按Enter鍵。
coreml_model = coremltools.converters.caffe.convert(('oxford102.caffemodel', 'deploy.prototxt'), image_input_names='data', class_labels='class_labels.txt')
現在這是很短的一行程式碼,但其中包含很多事情,接下來讓我解釋一下這三個檔案。
deploy.prototxt
– 描述神經網絡的結構。oxford102.caffemodel
– Caffe格式的數據訓練模型。class_labels.txt
– 包含模型能夠識別的全部花類列表。
在上面的說明中,我們將定義一個名為coreml_model
的模型,用來當做從Caffe轉到Core ML的轉換器,它是coremltools.converters.caffe.convert
函式的運行結果,這行程式碼的最後兩個參數是:
image_input_names='data'
class_labels='class_labels.txt'
這兩個參數定義了我們想要Core ML模型所接受的輸入和輸出,讓我這樣說:電腦只能理解數字。因此,如果不添加這兩個參數,我們的Core ML模型將僅接受數字做為輸入和輸出,而不是圖像和字符串做為輸入和輸出。
現在,你可以按下ENTER並且休息一下,根據你機器的計算能力,轉換器運行需要一些時間,當轉換器運行完成時,你將會看到一個簡單的>>>
。
現在Caffe模型已經被轉換,你需要將它保存下來,請輸入下列所示的程式碼
coreml_model.save('Flowers.mlmodel')
.mlmodel
文件將保存在當前文件夾/目錄中。
將模型整合到Xcode中
現在我們來到最後一步,將剛剛轉換至Xcode專案的模型進行整合。如果你有閱讀我先前的教程,那麼這部分應該是很熟悉的,打開初始專案,依據目前為止所學到的內容,現在我把將Core ML模型整合到應用程式的挑戰交給你。
希望讀者能夠完成任務,或是至少嘗試做看看,如果你沒有如願完成它,請不要擔心,繼續往下閱讀吧!
第一步是將Flowers.mlmodel
拖放到我們的Xcode專案中,並且確認”Target Membership”欄位有被勾選起來。
現在,我們轉到ViewController.swift
,並定義以下內容:
var model: Flowers!
override func viewWillAppear(_ animated: Bool) {
model = Flowers()
}
在這兩行程式碼中,我們定義了數據模型,並在view出現之前對其進行初始化。
接下來,我們只需要定義一個常數prediction等於模型預測數據。在ViewController
擴展(Extension)內的imageView.image = newImage
後鍵入以下內容。
guard let prediction = try? model.prediction(data: pixelBuffer!) else {
return
}
classifier.text = "I think this is a \(prediction.classLabel)."
就這麼簡單!接下來請構建並運行應用程式,你應該看到它是個類似於前一個教程中實作的圖像識別應用程式,唯一的區別是這個程式是專屬花朵辨識,我們已能將Caffe模型轉換為Core ML模型,對於這結果相當滿意。
結論
現在你知道如何轉換數據模型,但你可能也想知道在哪裡可以找到數據模型,其實簡單的Google搜索就能給你大量的結果,幾乎可以找到任何類別的數據模型,例如不同類型的汽車、植物、動物,甚至有模型可以告訴你最喜歡哪個名人,下面也提供幾個連結讓讀者參考!
如果找不到滿足你需求的模型,讀者可能會想知道是否可以創建自己的數據模型,雖然可以做到,但是相當不容易,如果你覺得自己可以挑戰看看,建議先從Scikit-Learn或TensorFlow開始,造訪它們的homepage。
以供參考,讀者可以看看GitHub上的完整Xcode專案。
有關轉換Core ML模型的更多詳細訊息,可參考以下連結:
- Apple Developer’s Article on Conversion of Models
- Python Documentation on Core ML
- Coremltools Package Documentation
- Coremltools Package Documentation on Different Converters
你對本篇教程還滿意嗎?如果讀者喜歡這篇教程或有任何意見,請告訴我們。
FB : https://www.facebook.com/yishen.chen.54
Twitter : https://twitter.com/YeEeEsS
原文:A Beginner’s Guide to Core ML Tools: Converting a Caffe Model to Core ML Format