AI

Core ML Tools初學者指南:如何將Caffe模型轉換為Core ML格式

Core ML Tools初學者指南:如何將Caffe模型轉換為Core ML格式
Core ML Tools初學者指南:如何將Caffe模型轉換為Core ML格式
In: AI

歡迎來到Core ML教程系列的第二部分。在本教程中,將學習如何設置Python虛擬環境,獲取不在Core ML格式裡的數據模型,並將該模型轉換為Core ML格式,最後將其集成到應用程式中。強烈建議讀者先閱讀上一個教程,然後再繼續閱讀本篇文章。

在這個專案中,我們將構建一個花的識別應用程式,就如同下圖所示。然而,主要的重點是告訴你如何獲得一個訓練有素的模型,並將其轉換為Core ML格式,以供iOS應用程式開發。

flower-recognition-app-demo

注意:開發者需要使用Xcode 9才能完成以下教程,並且需要運行在iOS 11的設備,才能測試本教程的一些功能。最重要的是,所有的程式碼都用Swift 4和Python 2.7編寫。

在我們開始前…

本教程的目的是幫助讀者了解如何將各類型的數據模型轉換為Core ML格式。不過,在開始之前,我應該給你一些機器學習框架的背景知識。現在有許多流行的deep learning框架,為開發者提供工具去設計、構建和訓練自己的模型。我們要使用的模型來自Caffe。Caffe由Bekerley人工智能研究(BAIR)開發,它是創建機器學習模型最常用的框架之一。

除了Caffe之外,還有許多其他框架,例如KerasTensorFlowScikit-learn。這些框架都有自己的優點和缺點,讀者可以在此處了解更多資訊。

在機器學習中,一切都從模型開始,替系統進行預測或識別,教電腦學習就包含透過machine learning演算法來培養數據進行學習。訓練產生的輸出通常稱為機器學習模型,有不同類型的機器學習模型都用來解決相同的問題(例如對象識別),但它們之間具有不同的算法。神經網絡Tree EnsemblesSVM是其中一些機器學習算法。

編者提醒:如果讀者有興趣了解關於機器學習模型的更多訊息,可以查看此處以及這篇文章

在Core ML推出的時候,並不支持將這些模型在不同的框架進行轉換,Apple官方以下圖說明Core ML支持的模型和第三方工具。

model-supported-by-coreml-tool

要將數據模型轉換為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.caffemodeldeploy.prototxtclass_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之後,請輸入第二行,以便更新到最新版本。

install-python-terminal

下一步是創建一個虛擬環境,在虛擬環境中可以使用不同版本的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.txtdeploy.prototxtoxford102.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')

現在這是很短的一行程式碼,但其中包含很多事情,接下來讓我解釋一下這三個檔案。

  1. deploy.prototxt – 描述神經網絡的結構。
  2. oxford102.caffemodel – Caffe格式的數據訓練模型。
  3. class_labels.txt – 包含模型能夠識別的全部花類列表。

在上面的說明中,我們將定義一個名為coreml_model的模型,用來當做從Caffe轉到Core ML的轉換器,它是coremltools.converters.caffe.convert函式的運行結果,這行程式碼的最後兩個參數是:

  1. image_input_names='data'
  2. class_labels='class_labels.txt'

這兩個參數定義了我們想要Core ML模型所接受的輸入和輸出,讓我這樣說:電腦只能理解數字。因此,如果不添加這兩個參數,我們的Core ML模型將僅接受數字做為輸入和輸出,而不是圖像和字符串做為輸入和輸出。

現在,你可以按下ENTER並且休息一下,根據你機器的計算能力,轉換器運行需要一些時間,當轉換器運行完成時,你將會看到一個簡單的>>>

python-convert-ml

現在Caffe模型已經被轉換,你需要將它保存下來,請輸入下列所示的程式碼

coreml_model.save('Flowers.mlmodel')

.mlmodel文件將保存在當前文件夾/目錄中。

coreml-model-ready

將模型整合到Xcode中

現在我們來到最後一步,將剛剛轉換至Xcode專案的模型進行整合。如果你有閱讀我先前的教程,那麼這部分應該是很熟悉的,打開初始專案,依據目前為止所學到的內容,現在我把將Core ML模型整合到應用程式的挑戰交給你。

希望讀者能夠完成任務,或是至少嘗試做看看,如果你沒有如願完成它,請不要擔心,繼續往下閱讀吧!

第一步是將Flowers.mlmodel拖放到我們的Xcode專案中,並且確認”Target Membership”欄位有被勾選起來。

xcode-target-coreml-model

現在,我們轉到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模型的更多詳細訊息,可參考以下連結:

你對本篇教程還滿意嗎?如果讀者喜歡這篇教程或有任何意見,請告訴我們。

資料來源:內文精選照片源自SHTTEFAN刊登在Unsplash。
譯者簡介:陳奕先-過去為平面財經記者,專跑產業新聞,2015年起跨進軟體開發世界,希望在不同領域中培養新的視野,於新創學校ALPHA Camp畢業後,積極投入iOS程式開發,目前任職於國內電商公司。聯絡方式:電郵[email protected]

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

作者
Sai Kambampati
Sai Kambampati 是程式開發員,生活於美國加州薩克拉門托,於2017獲得Apple's WWDC獎學金。精於 Swift及Python語言,渴望自家開發人工智能產品。閒時喜歡觀看Netflix、做健身或是遛漣圖書館中。請到推特追蹤 @Sai_K1065 。
評論
更多來自 AppCoda 中文版
如何使用 Vision APIs 從圖像中辨識文字
AI

如何使用 Vision APIs 從圖像中辨識文字

Vision 框架長期以來一直包含文字識別功能。我們已經有詳細的教程,向你展示如何使用 Vision 框架掃描圖像並執行文字識別。之前,我們使用了 VNImageRequestHandler 和 VNRecognizeTextRequest 來從圖像中提取文字。 多年來,Vision 框架已經顯著演變。在 iOS 18 中,Vision
使用最新的 Translation API 為 iOS Apps 加入翻譯功能
AI

使用最新的 Translation API 為 iOS Apps 加入翻譯功能

iOS 已經包含了一個系統範圍的翻譯功能,允許用戶輕鬆地將文本翻譯成各種語言。隨著 iOS 17.4(以及 iOS 18)的發布,你現在可以利用新的 Translation API 將這個強大的翻譯功能整合到你的應用中。 Apple 為開發者提供了兩種使用 Translation API 的選擇。
很好! 你已成功註冊。
歡迎回來! 你已成功登入。
你已成功訂閱 AppCoda 中文版 電子報。
你的連結已失效。
成功! 請檢查你的電子郵件以獲取用於登入的連結。
好! 你的付費資料已更新。
你的付費方式並未更新。