華文網

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

選自Hackernoon

機器之心編譯

作者:Alex Wulff

參與:侯韻楚、李澤南

隨著 WWDC 大會上 iOS 11 的發佈,蘋果終於推出了原生機器學習和機器視覺框架,由此開啟了許多嶄新的可能性,使所有性質的應用程式和遊戲有望取得顯著進步,

本文作者 Alex Wulff 將對在 iOS 11 中加入機器學習模型的方法進行簡要介紹。

機器學習解決方案在雲端的應用已有一些時日,但這類系統需要不間斷的網路連接,並且很明顯,它通常在 iOS 上會存在顯著延遲,也為敏感性資料帶來了安全隱患。一些協力廠商的 Swift AI 系統已開始在幾個應用程式中佔據一席之地,但這類框架從未成為開發上的主流。隨著蘋果在 2017 年的全球開發者大會(Worldwide Developers Conference,

WWDC)的最新發佈,你很可能會發現所鍾愛的幾款應用程式都出現了與機器學習相關的更新。

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

下圖為示例結果。

我的示例項目將會以一幅圖像作為輸入,並得出可能的分類及其各自的信任度。

所有計算都是在蘋果新推出的含 Core ML 和機器學習視覺框架的設備上完成的。

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

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

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

隨著格式的增多,在未來人們應該能為各種用例得到經過訓練的模型。

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

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

短時間內所發現的許多 bug 之一。

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

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

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

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

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

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

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

而對於不基於圖像的模型,蘋果已經創建了小型的示例專案來演示使用方法,它完全獨立於 Vision 之外,僅僅依賴 Core ML。

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

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

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

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

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

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