iOS11中關于機器學習開發的新應用分析
WWDC 2017 使一件事情變得非常清楚,那就是:Apple 正在全力以赴地支持「設備上的機器學習」了。
他們希望 App 的開發者們能夠盡可能的簡單的加入他們的行列中。
Apple 去年發布了可以用于創建基本的卷積神經網的 Metal CNN 和 BNNS 框架。今年,Metal 得到了進一步擴展,增加了一個全新的計算機視覺框架,以及 Core ML:一個能夠輕松地將機器學習集成到 App 中的工具包。
Core ML framework
在這片文章中,我將就 iOS 11 和 macOS 10.13 中這些新推出的機器學習的內容,分享我自己的一些想法和經驗。
Core ML
Core ML 在 WWDC 上獲得了極大的關注度,原因很簡單:大部分開發者希望能夠在他們的 App 中使用這個框架。
Core ML 的 API 非常簡單。你只能用它做這些事情:
加載一個訓練好的模型
做出預測
收益!!!
這看起來好像很有限,但實際上你一般只會在 App 中加載模型和做出預測這兩件事。
在 Core ML 之前,加載訓練好的模型是非常困難的 —— 實際上,我寫過一個框架來減輕這種痛苦。所以現在我對這一個簡單的兩步過程感到非常高興。
模型被包含在了一個.mlmodel 的文件中。這是一種新的開源文件格式,用于描述模型中的 layer、輸入輸出、標簽,以及需要在數據上產生的任何預處理過程。它還包括了所有的學習參數(權重和偏置)。
使用模型所需的一切都在這一個文件里面了。
你只需要將 mlmodel 文件放入你的項目中,Xcode 將會自動生成一個 Swift 或 Objective-C 的包裝類,使你能簡單的使用這個模型。
舉個例子,如果你把文件ResNet50.mlmodel 添加到你的 Xcode 項目中,那么你就可以這么寫來實例化這個模型:
let model = ResNet50()
然后做出預測:
let pixelBuffer: CVPixelBuffer = /* your image */if let prediction = try? model.prediction(image: pixelBuffer) {
print(prediction.classLabel)
}
這差不多就是所有要寫的東西了。你不需要編寫任何代碼來加載模型,或者將其輸出轉換成可以從 Swift 直接使用的內容 —— 這一切都將由 Core ML 和 Xcode 來處理。
注意: 要了解背后發生了什么,可以在 Project Navigator 里選擇 mlmodel 文件,然后點擊 Swift generated source 右邊的箭頭按鈕,就能夠查看生成的幫助代碼了。
Core ML 將決定自己到底是在 CPU 上運行還是 GPU 上運行。這使得它能夠充分的利用可以用的資源。Core ML 甚至可以將模型分割成僅在 GPU 上執行的部分(需要大量計算的任務)以及 CPU 上的其他部分(需要大量內存的任務)。
Core ML 使用 CPU 的能力對于我們開發者來說另一個很大的好處是:你可以從 iOS 模擬器運行它,從而運行那些對于 Metal 來說做不到,同時在單元測試中也不太好的任務。
Core ML 支持什么模型?
上面的 ResNet50 例子展示的是一個圖像分類器,但是 Core ML 可以處理幾種不同類型的模型,如:
支持向量機 SVM
諸如隨機森林和提升樹的決策樹集成
線性回歸和 logistic 回歸
前饋神經網、卷積神經網、遞歸神經網
所有這些模型都可以用于回歸問題和分類問題。此外,你的模型可以包含這些典型的機器學習預處理操作,例如獨熱編碼(one-hot encoding)、特征縮放(feature scaling)、缺失值處理等等。
Apple 提供了很多已經訓練好的模型,例如 Inception v3、ResNet50 和 VGG16 等,但你也可以使用 這個 Python 庫來轉換自己的模型。
目前,你可以轉換使用 Keras、Caffe、scikit-learn、XGBoost 和 libSVM 訓練的模型。轉換工具只會支持具體指定的版本,比如 Keras 支持 1.2.2 但不支持 2.0。辛運的是,該工具是開源的,所以毫無疑問它將來會支持更多的訓練工具包。
如果這些都不行,你還是可以隨時編寫自己的轉換器。mlmodel 文件格式是開源且可以直接使用的(由 Apple 制定發布的一種 protobuf 格式)
局限
如果你想在你的 App 上馬上運行一個模型, Core ML 很不錯。然而使用這樣一個簡單的 API 一定會有一些限制。
僅支持有監督學習的模型,無監督學習和增強學習都是不行的。(不過有一個「通用」的神經網絡類型支持,因此你可以使用它)
設備上不能進行訓練。你需要使用離線工具包來進行訓練,然后將它們轉換到 Core ML 格式。
如果 Core ML 不支持某種類型的 layer,那么你就不能使用它。在這一點上,你不能使用自己的 kernel 來擴展 Core ML。在使用 TensorFlow 這樣的工具來構建通用計算圖模型時,mlmodel 文件格式可能就不那么靈活了。
Core ML 轉換工具只支持特定版本的數量有限的訓練工具。例如,如果你在 TensorFLow 中訓練了一個模型,則無法使用此工具,你必須編寫自己的轉換腳本。正如我剛才提到的:如果你的 TensorFlow 模型具有一些 mlmodel 不支持的特性,那么你就不能在 Core ML 上使用你的模型。
你不能查看中間層的輸出,只能獲得最后一層網絡的預測值。
我感覺下載模型更新會造成一些問題,如果你不想每次重新訓練模型的時候都重寫一個新版本的 App,那么 Core ML 不適合你。
Core ML 對外屏蔽了它是運行在 CPU 上還是 GPU 上的細節 —— 這很方便 —— 但你必須相信它對你的 App 能做出正確的事情。即便你真的需要,你也不能強迫 Core ML 運行在 GPU 上。
如果你能夠忍受這些限制,那么 Core ML 對你來說就是正確的選擇。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
iOS11中關于機器學習開發的新應用分析下載
相關電子資料下載
- 如何用Calibre給版圖加Metal fill/dummy呢? 626
- Metalenz和縱慧芯光聯合推出新的結構光傳感解決方案 439
- Vitis 庫流程:視覺 L1 重映射函數 Zynq baremetal 設計實例 127
- 視覺L1重映射函數Zynq baremetal設計實例 117
- 視覺L1重映射函數Zynq baremetal設計實例 201
- Metalenz聯合UMC將其開創性的超構表面光學器件推向市場 232
- 上期新品| Neco Unit & Core Metal 106
- 賽昉科技發布StarFive StarStudio IDE 支持Linux和Baremetal開發 270
- Metal渲染YUV 296
- 我們離《黑鏡》中的Metalhead機器狗殺手還有多遠? 1004