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