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


歡迎來到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)並輸入以下內容:

透過這兩行程式碼中,我們安裝了指定的python版本,在本教程撰寫的時候,Python 2的最新版本是2.7.13,以防萬一,安裝完Python之後,請輸入第二行,以便更新到最新版本。

install-python-terminal

下一步是創建一個虛擬環境,在虛擬環境中可以使用不同版本的Python或packages編寫程式,要創建新的虛擬環境,請輸入以下程式碼。

當終端機顯示提示,

輸入“y”表示同意。恭喜你!現在你有一個名為flowerrec的虛擬環境!

最後,輸入以下指令來安裝Core ML Tools:

轉換Caffe Model

再次打開終端機,並輸入下列程式碼,就會進入你設立的虛擬環境中:

然後移動到初始專案的目錄中,它包含三個文件:class_labels.txtdeploy.prototxtoxford102.caffemodel

當你進入文件夾,就是啟動python的時候了,只需簡單輸入python,你將被帶到終端機中的Python介面,第一步是import Core ML tools。

下一行真的很重要,所以請注意。輸入下列這一行,但不要按Enter鍵。

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

  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模型已經被轉換,你需要將它保存下來,請輸入下列所示的程式碼

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

coreml-model-ready

將模型整合到Xcode中

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

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

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

xcode-target-coreml-model

現在,我們轉到ViewController.swift,並定義以下內容:

在這兩行程式碼中,我們定義了數據模型,並在view出現之前對其進行初始化。

接下來,我們只需要定義一個常數prediction等於模型預測數據。在ViewController擴展(Extension)內的imageView.image = newImage後鍵入以下內容。

就這麼簡單!接下來請構建並運行應用程式,你應該看到它是個類似於前一個教程中實作的圖像識別應用程式,唯一的區別是這個程式是專屬花朵辨識,我們已能將Caffe模型轉換為Core ML模型,對於這結果相當滿意。

結論

現在你知道如何轉換數據模型,但你可能也想知道在哪裡可以找到數據模型,其實簡單的Google搜索就能給你大量的結果,幾乎可以找到任何類別的數據模型,例如不同類型的汽車、植物、動物,甚至有模型可以告訴你最喜歡哪個名人,下面也提供幾個連結讓讀者參考!

如果找不到滿足你需求的模型,讀者可能會想知道是否可以創建自己的數據模型,雖然可以做到,但是相當不容易,如果你覺得自己可以挑戰看看,建議先從Scikit-Learn或TensorFlow開始,造訪它們的homepage。

以供參考,讀者可以看看GitHub上的完整Xcode專案

有關轉換Core ML模型的更多詳細訊息,可參考以下連結:

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

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


<p>Sai Kambampati 是程式開發員,生活於美國加州薩克拉門托,於2017獲得Apple’s WWDC獎學金。精於 Swift及Python語言,渴望自家開發人工智能產品。閒時喜歡觀看Netflix、做健身或是遛漣圖書館中。請到推特追蹤 @Sai_K1065 。</p>

blog comments powered by Disqus
訂閲電子報

訂閲電子報

AppCoda致力於發佈優質iOS程式教學,你不必每天上站,輸入你的電子郵件地址訂閱網站的最新教學文章。每當有新文章發佈,我們會使用電子郵件通知你。

已收你的指示。請你檢查你的電郵,我們已寄出一封認證信,點擊信中鏈結才算完成訂閱。

Shares
Share This