Apple 近幾年一直推動 AI 相關領域的發展,WWDC 2020 也推出了不少推動 AI 的功能。
Apple 在各個內建框架,包括機器與深度學習 (machine and deep learning)、電腦視覺 (computer vision)、及自然語言處理 (natural language processing),引入了許多新功能及改善,來幫助手機 App 開發者製作出更好的 AI iOS App。(延伸閱讀:Here’s why Apple believes it’s an AI leader—and why it says critics have it all wrong)。
在 iOS 13 時引入的繪圖框架 PencilKit,在今年也開始支援機器學習。
在接下來的段落中,我們將談談新的功能,以及 Apple 在 iOS 14 中推出的 AI 新技術。
Core ML
Core ML 是 Apple 主要的模型框架,去年添加了裝置上模型訓練的功能,大大提升了框架的能力。雖然今年未有引入裝置上的訓練循環類神經網路 (Recurrent neural networks, RNNs),但還是有其他非常有趣的新增功能。
現在,Xcode 12 裡的 Core ML 模型檢視器 (model viewer) 得到了改善,以提供更多信息:
如你所見,現在有新的 Metadata 分頁來顯示 Core ML 模型的 Layer Distribution。最值得一提的是,Utilities 區塊有兩個新功能,分別是 Model Encryption 以及 Model Deployment。
Core ML Deployment
直到現在,在已上架的 App 更新模型一直令開發者十分頭痛。開發者必須推送 App 更新或是使用裝置訓練 (On-Device Training),這兩個方法也僅適用少數類神經網路層型別。
幸運的是,Apple 引入了一個新的 Deployment API,讓我們可以在 App 更新之外,直接更新 Core ML 模型。為了啟用 Model Deployment,我們需要選擇加入 Core ML Model Archiving(位於上圖的 Utility 區塊),並在 Apple 的 Model Deployment Dashboard 上執行幾個步驟進行。
另外,還有一個新的類別
,讓我們從 Core ML Model Deployment 存取模型群組。你可以使用這個類別來存取 App 內特定功能的 Core ML 集合。MLModelCollection
Core ML Model Encryption
以前,嵌入在 App 內的 Core ML 模型檔案 .mlmodelc
是未加密的,因此可能很容易會被心取得並利用敏感的 IP 資料。為了解決這個問題,Apple 引入一個可選的模型加密功能來保護模型。它的運作方式與簽署 App 的方式十分類似(使用你特定的 Apple Team ID)。
現在,你可以安全地加密並且打包模型檔案,Core ML 會自動地解密,並將它們載入至 App 的記憶體中。
第一次在 App 裡載入模型時,就會自動從 Apple 伺服器取得解密金鑰。
Core ML 模型非同步載入函式
iOS 14 為初始化 Core ML 模型帶來了新的非同步 load
函式,讓我地方便地自 MLModelCollection
載入模型、及處理加密的 Core ML 模型。
MyStylizedModel.apply{
switch result {
case .success(let model):
currentModel = model
case .failure(let error):
handleFailure(for: error) }
}
請注意,以往用來載入 Core ML 模型的 init ()
函式將會被廢棄。
除了安全性和部署之外,Core ML 也引入許多新的層型別 (Layer Type)。現在 coremltools
可在利用 CPU、GPU、神經引擎 (Neural Engine) 時,提供開箱即用 (out-of-the-box) 的支援,將經過訓練的 TensorFlow 和 PyTorch 模型轉換為 Core ML。
Create ML
Create ML 是一個模型建置框架,提供拖拉及視覺設計工具,讓我們在「不需程式碼」的情況下,於 macOS 上訓練客製化的機器學習模型。
它在去年變成獨立的 macOS App,並且提供多種模型型別,來訓練圖像 (Image)、物件 (Object)、聲音 (Sound)、文字分類 (Text Classifier)、及推薦系統 (Recommender Systems)。
Apple 在 WWDC 2020 發表多項 Create ML 的改善,當中支援影像及圖像樣式轉換模型訓練應該是最大的更新。根據 Apple 說明,這個功能有非常大的進步。在構建沉浸式增強現實 (Augmented Reality, AR) 體驗時,樣式轉換模型 (Style Transfer Model) 可以搭配 ARKit 大派用場。
此外,它還支援訓練活動分類模型 (Activity Classification Model),讓我們用於追蹤身體運動。
除了新模型訓練支援之外,Create ML 現在也提供更大的客製化自由度:
- 你現在可以暫停及恢復訓練。
- Create ML 允許你設定 Checkpoint,在訓練的各個階段中,可以利用這些 checkpoint 來建置訓練期間的快照模型 (snapshot model)。你可以透過這些快照,來比較各個訓練階段的模型結果。
ML Compute:一個新的機器學習框架
雖然 Core ML 是現今 Apple 最後歡迎的機器學習框架,但無論是過去或現在,這都不是唯一的選擇。
有趣的是,其實有個較低階的原始框架 Accelerate,可用來建置類神經網路 (Neural Network) 以在 CPU 上運行。同時,Apple 也提供設計在 GPU 上執行的 MPS (Metal Performance Shaders)。Core ML 只是一個在這些框架上構建的抽象,可以使用簡單好用的 API 進行推論。
在 iOS 11 引入 Core ML 的同時,Apple 也釋出了新的 MPS 圖形 API(它在 Core ML 下使用)。我們指定確切的層及輸入,MPS 圖形 API 在模型訓練期間就可以提供更準確的結果。
現在隨著 iOS 14 的更新,我們有了另一個全新機器學習框架:ML Compute。ML Compute 專門用來加速類神經網路的訓練及驗證,我們可以使用 CPU 上 Accelerate
框架的高性能 BNNS (Basic Neural Network Subroutines)、以及 GPU 上的 Metal Performance Shader。
更重要的是,ML Compute 框架的 API 並不是用來建置 Core ML 模型的,它僅是引入來增強低楷的機器學習框架。
自然語言處理
自然語言 (Natural Language) 與 Vision 框架都是建立於 Core ML 之上的。廣義上來說,自然語言框架有助於文本的語義及理解。
去年,這個框架新增了一系列的功能,像是情感分析 (Sentiment Analysis)、文字標籤與嵌入 (Word Tagging and Embedding)、語言識別、符號化 (Tokenization) 以及實體識別等。
iOS 14 現在引入了句子嵌入 (Sentence Embedding),開發者可以利用這個功能,容易地建置準確的裝置上常見問題集和 chatbot。
透過文字嵌入 (Word Embedding) 來分析句子有著本身限制。簡單來說,利用每個文字向量 (vector) 的平均值來分析,可能會很容易丟失句子的組成資訊。同時,文字嵌入的詞彙集有限,當句子出現查詢表裡不存在的文字時,就無法準確處理語義。
新的句子嵌入 API 可以分析完整的句子,解決文字嵌入的缺點。你可以把一個完整句子的資訊編碼為有限維向量 (Finite-dimensional Vector),然後將它與向量空間的其他句子進行比對,以確認其相似性與差異。
自然語言框架與 Create ML 框架的連結也非常緊密。今年,Apple 為文字標籤模型 (Word Tagging Model) 引入了新功能,可以使用動態嵌入來進行轉換訓練 (Transfer Learning)。你可以透過以下方式指定模型參數:
let modelParameters = MLWordTagger.ModelParameters(algorithm: .transferLearning(.dynamicEmbedding, revision: 1))
iOS 14 也提供新的 tagHypotheses
函式,讓你在特定的單字或子字符串中,找出多個可能的標籤。如此一來,我們現在就能夠找出每個預測標籤的信賴閥值 (Confidence Threshold)。
電腦視覺 (Computer Vision)
Apple 在 WWDC 2020 期間再次展示對電腦視覺的野心。Core Image 框架新增了一些內建過濾器。新的 CIColorThreshold
讓我們快速將圖像轉換為黑白色;而 CIColorAbsoluteDifference
過濾器讓我們可以比較兩個圖像的顏色。
另一方面,今年 Apple 的 Vision 框架搶走了其他基於 AI 框架的風采,它有很多新功能,包括支援:
- 手部與身體姿勢估算 (Hand and Body Pose Estimation)
- 輪廓偵測 (Contour Detection)
- 光流 (Optical Flow)
- 軌跡偵測 (Trajectory Detection)
- 離線影片處理 (Offline Video Processing)
另外還有一個新的狀態視覺請求,它會考慮之前的 VNObservation
結果,在軌跡偵測與光流請求中非常有用。
如果你想了解更多關於 iOS 14 上 Vision 框架的新功能,可以閱讀這篇文章。
PencilKit
PencilKit 在 iOS 13 時登場,當時僅被視為一個繪圖框架。
今年,Apple 為 iPadOS 引入了 Scrible,一個全新的內建機器學習驅動文字輸入區。它能自動偵測 Apple Pencil 寫下的文字,並即時將其轉換為字串。
我們可以切換 UIScribbleInteraction.isHandlingWriting
布林 (boolean) 屬性,來啟動或關閉手寫文字轉換。
在 iOS 14 裡,PencilKit 框架除了設置繪圖用的畫布外,還可以做更多事情。
現在,它讓我們可以存取 PKDrawing
物件的筆畫 (stroke) 屬性。也就是說,我們可以檢查現有的點、路徑、以及使用者繪畫的速度。
如此一來,我們就可以從使用者的筆觸分析不同的特性 (attribute),例如繪畫的力道、或是 PencilKit 框架執行手勢識別和模式匹配所花費的時間等。
iOS 14 還新增了簽名驗證 (Signature Verification)、異常檢測 (Anomaly Detection)、與形狀自動校 (Shape Auto-correction) 功能,讓我們建置 AI 繪圖 App。此外,PencilKit 框架可與 ARKit 結合使用,以在 AR 場景中移動物件。
值得注意的是,allowsFingerDrawing
屬性已被廢棄,取而代之的是 PKCanvasViewDrawingPolicy
,它是 anyInput
與 pencilInput
型別的列舉 (enum)。
總結
我們探索了今年不同基於 AI 框架所引入的新功能,但奇怪的是今年 Apple 的語音分析框架並沒有任何更新。
使用 Create ML 訓練模型需要 macOS Big Sur 以上的版本,但你可以在 macOS Catalina 上的 Xcode 12 來試玩其他框架。
本篇文章到此為止,感謝你的閱讀!