如何使用Swift在iOS 11中加入原生機器學習視覺模型

機器之心發表於2017-06-09

隨著 WWDC 大會上 iOS 11 的釋出,蘋果終於推出了原生機器學習和機器視覺框架,由此開啟了許多嶄新的可能性,使所有性質的應用程式和遊戲有望取得顯著進步,本文作者 Alex Wulff 將對在 iOS 11 中加入機器學習模型的方法進行簡要介紹。

機器學習解決方案在雲端的應用已有一些時日,但這類系統需要不間斷的網路連線,並且很明顯,它通常在 iOS 上會存在顯著延遲,也為敏感資料帶來了安全隱患。一些第三方的 Swift AI 系統已開始在幾個應用程式中佔據一席之地,但這類框架從未成為開發上的主流。隨著蘋果在 2017 年的全球開發者大會(Worldwide Developers Conference,WWDC)的最新發布,你很可能會發現所鍾愛的幾款應用程式都出現了與機器學習相關的更新。

想知道如何將蘋果的新 API 整合到自己的應用程式中嗎?這可比想象中更容易。

如何使用Swift在iOS 11中加入原生機器學習視覺模型

首先你需要下載 Xcode 9 測試版,這是下載地址:https://developer.apple.com/download/。請注意,這個檔案非常大,下載耗時略長。此外,這個早期測試版尚不成熟,還存在許多問題(有些將在下文予以討論)。你可以邊下載 Xcode 邊讀完這篇文章,以便進行下載後的操作。

你可以檢視我為本文建立的 GitHub repo 並下載 Xcode 專案:https://github.com/AlexFWulff/Machine-Learning-Demo-iOS

下圖為示例結果。

如何使用Swift在iOS 11中加入原生機器學習視覺模型

我的示例專案將會以一幅影像作為輸入,並得出可能的分類及其各自的信任度。所有計算都是在蘋果新推出的含 Core ML 和機器學習視覺框架的裝置上完成的。

這個專案內容很少。請你留意一個檔案:GoogLeNetPlaces.mlmodel。它是幾年前由 Google 研究人員所建立的經過訓練的機器視覺模型。蘋果公司新的機器學習 API 使開發人員得以輕鬆訪問 iOS 應用程式中的標準化模型。當你將.mlmodel 檔案拖動至應用程式中時,Xcode 便會為其自動建立 Swift 封裝。一些模型檔案的大小可以達到幾百 Mb。

但很不幸,Core ML 檔案甚至不能如.plist 或.storyboard 一樣達到人類可讀的程度,它們僅僅是告訴裝置如何將處理輸入的「神經元」進行排列的一大堆位元組。模型越複雜,其尺寸便越大。

如何使用Swift在iOS 11中加入原生機器學習視覺模型

蘋果收集了四種不同的已訓練模型以供使用,你可以透過網址 https://developer.apple.com/machine-learning/得到它們。蘋果的 Core ML 工具的 Python 包使開發人員能夠將預先存在的模型轉換為 iOS 可訪問的 Core ML 格式。隨著格式的增多,在未來人們應該能為各種用例得到經過訓練的模型。

如何使用Swift在iOS 11中加入原生機器學習視覺模型

這其中存在一個 bug:即使專案可編寫,編輯器仍會認為不存在 Swift 包裝器。

接下來開啟 ViewController 檔案。第一個程式碼塊(如上圖所示)僅僅是嘗試建立一個變數來儲存所選模型的 Vision 表示。即使在本節出現了錯誤,這個專案仍需進行編寫。這是我在使用 Xcode 9 測試版時,短時間內所發現的許多 bug 之一。

如何使用Swift在iOS 11中加入原生機器學習視覺模型

蘋果公司還憑藉 Core ML 模型推出了自己的機器視覺 API,並命名為 Vision。Vision 包含了許多不同的機器視覺模型,它們可以檢測人臉、條形碼、文字等多種型別,還為基於影像的 Core ML 模型提供了包裝器。其中一些包裝器專屬於特定型別的模型。如專案中的模型可以將圖片作為輸入,並返回一個描述性字串作為輸出。由於這種情況很常見,蘋果已經為其新增了視覺包裝器。而對於不基於影像的模型,蘋果已經建立了小型的示例專案來演示使用方法,它完全獨立於 Vision 之外,僅僅依賴 Core ML。

下一個程式碼塊會建立並處理請求。在專案導航器中,你應當能看到用於實驗該模型的各種不同影像。將字串「airport」替換為任一其他影像的名稱,對專案進行建立並執行,而後檢視輸出到控制檯的結果是如何更改的。

奇怪的是,解析度較低的影像似乎對其最可能的分類具有最高的信任度。我無法解釋這種情況出現的原因。如果有讀者瞭解其中的原因,請在下面留言。我真的很費解!

如何使用Swift在iOS 11中加入原生機器學習視覺模型

最後一個程式碼塊只需接受請求的結果並將其列印出來。在這個演示中,我沒有設定任何「預防差錯」的措施,所以一旦出現問題,整個應用程式便會崩潰。

另一個對專案有所影響的大 bug,會在將檔案拖放到專案導航器中時發生。在 bug 修復之前,請不要在 Xcode 9 中嘗試這個動作,因為它會對依賴鏈產生巨大影響。你只需在 Xcode 的早期版本中開啟 Xcode 專案,必要時選擇複製項,而後點選確認即可。

如何使用Swift在iOS 11中加入原生機器學習視覺模型

最後一個可能有所影響的 bug 有時會在執行專案時出現。若模擬器無法啟動,退出模擬器和 Xcode 即可。它們執行一段時間後,你需要進行一次同樣的操作。盡情享受模擬器的嶄新外觀與體驗,以及對 iOS 11 的少許預覽吧!

希望我的示例專案對「如何輕鬆在 iOS 11 中實現機器學習」進行了成功概述。只需拖入一個模型並對結果加以處理,你就離成功不遠了!蘋果所連結的其他三個模型應當與同一個 VNCoreMLRequest 相容,因為它們都以影像作為輸入,並輸出分類資訊。如何使用Swift在iOS 11中加入原生機器學習視覺模型

原文連結:https://hackernoon.com/swift-tutorial-native-machine-learning-and-machine-vision-in-ios-11-11e1e88aa397

相關文章