Google剛剛息鼓,蘋果又燃戰火!這一戰,來自移動應用的AI化之爭。
web
近日,蘋果發佈專爲移動端優化的Core ML後,移動開發者對此的需求到底有多強烈?去年大獲成功的AI應用Prisma又能告訴咱們什麼?蘋果的新武器Core ML具體該怎麼用?野心勃勃的蘋果在移動端機器學習上的佈局到底有着怎樣的心機?蘋果然能撼動Google、Facebook的優點地位嗎?將來AI的走向會不會就此改變?此中答案,本文將娓娓道來。
算法
做者 | 胡永波
服務器
本屆WWDC,Core ML是蘋果送給移動開發者的一份大禮。使用它,開發者能夠把訓練好的機器學習模型導入iOS應用,同時在系統層面加速應用內的人工智能計算。Core ML API支持的具體任務包括圖像識別、文本處理、人臉檢測與追蹤,等等。
網絡
蘋果這一舉措,正應了Gartner去年10月份預測的移動應用AI化趨勢:科技行業的主戰場很快會變成可以主動學習和適應、可自主作出反饋的智能系統之間的競爭。到2018年,全球最大的200家公司中,絕大部分都會推出智能應用,同時會使用完整的大數據分析工具來從新定義並提高用戶的體驗。架構
而Gartner的說法,則又來自業已擁有機器學習能力的那些移動應用的市場表現。歸根結底是SnapChat在青少年人羣中的流行,是Prisma在去年的異常火爆,是在國內一直被人刷屏的各種美顏照片應用……只要找對場景,有AI加持的移動應用總能脫穎而出。app
以Prisma爲表明的移動應用AI化框架
從新回顧一下Prisma的故事,咱們老是能找出一些蛛絲馬跡。機器學習
做爲戰鬥民族的90後,技術發燒友Alexey Moiseenkov在2016年初偶然讀到兩篇關於圖像的機器學習論文:《藝術風格的神經算法(A Neural Algorithm of Artistic Style)》和《利用神經卷積網絡進行紋理合成(Texture Synthesis Using Convolutional Neural Networks)》。
ide
藝術風格的神經算法:提取畫做的藝術風格工具
論文的做者Gatys等人基於論文中的研究成果,在2015年作出一個收費網站 DeepArt,自動y以大師的繪畫風格來爲用戶做畫,其步驟以下:
識別用戶上傳的照片;
學習照片中的藝術風格信息;
輸出一幅從新繪製出來的做品。
利用神經卷積網絡進行紋理合成:對照片紋理進行重繪和渲染
這與人類學習做畫過程相似:
看到一幅做品,對繪畫有個初步的概念;
學習做品中的繪畫風格與筆法;
臨摹上述風格和筆法,從新繪畫。
提取不一樣名畫的風格,就能渲染出不一樣效果的照片
但只出如今網頁端的DeepArt服務耗時過長,渲染出一張新照片至少須要20分鐘,而且收費不菲。Gatys等人沒能看到移動市場的機會,這讓年輕的Alexey一會兒抓住了靈感,讓他堅信移動端的「AI+圖像處理」一定大有可爲。
Alexey清楚,在移動端成功的關鍵,是可以顯著下降圖像處理過程的耗時,也就是大幅度提高神經網絡的運行效率。爲此,他對Gatys等人的算法研究了兩個月,在不影響移動端圖像效果的前提下,儘量簡化神經網絡所須要處理的細節。此處的優化,使得Prisma的耗時僅需幾秒鐘,處理速度相比DeepArt提高了1000倍。
隨後的開發過程,僅用了一個半月。6月11日,Prisma在蘋果應用商店上線。兩週時間,下載量就超過160萬次;三個月後,全球下載量突破7000萬;到年末,Prisma一舉拿下Google和蘋果兩大平臺的「年度最佳應用」。
Prisma的迭代升級一直是圍繞「提速」來進行的,關鍵就是不斷改進圖像處理的算法。
最初,Prisma的3個神經網絡都部署在雲端。用戶選取照片效果後,手機上的Prisma應用便將照片上傳至服務器,雲端的卷積神經網絡在解讀照片後,會根據用戶選擇的效果從新渲染出一張新照片,並下載到用戶的手機上。
隨着Prisma開始海外擴張,海外用戶與Prisma位於莫斯科的服務器通信問題,成爲Prisma加載緩慢的主因。爲此,Alexey不得不考慮解決辦法,也就要設法在手機上完成照片渲染的過程。2016年8月,直接使用iPhone處理器,Prisma成爲第一個可以離線運行風格轉換神經網絡的手機應用。一張1080×1080分辨率的照片,半秒就能轉換成全新的風格。
能夠看出,在手機上部署機器學習算法的需求是極強的。
畢竟,採用AI來編輯或製做照片的不止Prisma一家。2016年3月,SnapChat的動態相機效果Lenses一經發布便大受歡迎,這項技術是SnapChat從它2015年9月收購的那家烏克蘭公司Looksery身上買來的。Facebook緊隨其後,於8月份開始,前後在Instagram、Messenger、WhatsApp上推出能跟SnapChat競爭的濾鏡效果。Facebook的技術則來自它在2016年3月份買下的白俄羅斯公司Masquerad。
因而,從今年開始,Facebook和Google相繼把它們的機器學習框架轉向移動端,在手機應用上直接運行AI算法的趨勢幾乎不可逆轉。緊接着,便有了咱們今天的主角Core ML橫空出世。
用於移動端的Core ML模型
與Google TensorFlow、Facebook Caffe2不一樣,蘋果的Core ML它專門爲iOS移動端的機器學習進行過優化,最大限度減小內存的佔用和功耗。並且,即使是網絡鏈接丟失,它還能保證應用的正常工做與響應。
Core ML爲iOS Vision API提供圖像處理支持,爲iOS Foundation API提供天然語言處理上的支持,並支持對iOS GameplayKit的學習決策樹 (learned decision tree) 進行分析。蘋果爲開發者準備好的是四個用於圖像識別的模型:Places205-GoogLeNet、ResNet50、Inception v3和VGG16,模型格式爲Core ML的 .mlmodel 擴展名。
如何製做Core ML模型
藉助於Core ML,開發者還能把訓練好的機器學習模型,導入至本身的應用內直接使用。它所支持的機器學習模型包括神經網絡 (Neural Network)、組合樹 (Tree Ensemble)、支持向量機 (Support Vector Machine) 與廣義線性模型 (Generalized Linear Model)。
蘋果提供的Core ML Tools Python工具包,能夠把第三方機器學習工具所建立的已訓練模型轉換成Core ML模型格式。Core ML所支持機器學習框架包括Keras、Caffe、scikit-learn、XGBoost與LIBSVM。
以Caffe模型 (.caffemodel) 爲例,經過調用轉換器,你能夠將其傳遞給 coremltools.converters.caffe.convert 方法:
import coremltools coreml_model = coremltools.converters.caffe.convert('my_caffe_model.caffemodel')
而後,將結果保存爲Core ML模型格式:
coreml_model.save('my_model.mlmodel')
對於Core ML所不支持的格式,好比TensorFlow模型,你只能本身來建立轉換工具,將模型的輸入、輸出和架構表示轉換爲Core ML格式。這須要仔細參考Core ML Tools所提供的轉換工具,它們具體演示瞭如何經過每一層模型架構、層與層之間的鏈接關係進行定義,來把各類第三方模型轉換成Core ML格式。
如何在應用中添加並使用Core ML模型?
以用來預測火星殖民地價格的已訓練模型 MarsHabitatPricer.mlmodel 爲例:
首先須要把模型添加到 Xcode 項目中:
也就是將模型拖進項目導航器 (project navigator)
對於 MarsHabitatPricer.mlmodel 而言,Xcode 會生成相應的接口,來分別表示模型自己(MarsHabitatPricer)、模型輸入 (MarsHabitatPricerInput) 以及模型輸出 (MarsHabitatPricerOutput)。
使用所生成的 MarsHabitatPricer 類的構造器,即可以建立這個模型:
let model = MarsHabitatPricer()
獲取輸入值並傳遞給模型:
示例應用使用了 UIPickerView,以便從用戶那裏獲取模型的輸入值。
func selectedRow(for feature: Feature) -> Int {
return pickerView.selectedRow(inComponent: feature.rawValue)
}
let solarPanels = pickerDataSource.value(for: selectedRow(for: .solarPanels), feature: .solarPanels)
let greenhouses = pickerDataSource.value(for: selectedRow(for: .greenhouses), feature: .greenhouses)
let size = pickerDataSource.value(for: selectedRow(for: .size), feature: .size)
使用模型來進行預測:
guard let marsHabitatPricerOutput = try? model.prediction(solarPanels: solarPanels, greenhouses: greenhouses, size: size) else {
fatalError("Unexpected runtime error.")
}
經過讀取 marsHabitatPricerOutput 的 price 屬性,就能夠獲取所預測的價格,而後在應用的 UI 內就能夠對該結果進行展現。
let price = marsHabitatPricerOutput.pricepriceLabel.text = priceFormatter.string(for: price)
注:此處所生成的 prediction(solarPanels:greenhouses:size:) 方法會返回錯誤提示,由於示例應用所預期的輸入類型爲 Double。
使用Core ML所遇到的常見錯誤,是傳遞給方法的輸入數據類型與模型預期的輸入類型不一樣匹配:好比用錯誤格式表示的圖片類型。
構建並運行 Core ML 應用
Xcode 會將 Core ML 模型編譯到資源中,以進行優化並在設備上運行。優化過的模型表徵會包含在您的應用程序包內,當應用在設備上運行時,即可用以進行預測。
蘋果表示,iPhone上通過優化的圖像識別,速度能比Google Pixel快6倍。
Core ML可能會有什麼樣的影響
WWDC還沒開完,Keynote引發你們關注後,大會日程中還要講的Core ML有5項:
Introducing Core ML
Vision Framework: Building on Core ML
Core ML in depth
Core ML and Natural Language Processing Lab
Core ML & Natural Language Processing Lab
重點是偏向應用的視覺框架和天然語言處理,蘋果的經驗和支持確定會讓不少開發者躍躍欲試:只要找對場景,新的像Prisma這樣的現象級AI應用就還會出現。
而隨着iOS應用內機器學習使用門檻的下降,關注AI具體應用的各種工程師也愈來愈多;隨着iOS開發者的涌入,機器學習領域將再也不只是算法工程師的天下。
那麼,移動開發的另外一頭,Google爲Android端準備的TensorFlow Lite在今年正式發佈時會如何發力,就更值得關注了。
畢竟,Google不作移動芯片,如何在硬件層面爲手機上的AI應用作優化,就成了它繞不過去的問題:是跟高通的Neural Processing Engine合做?仍是把自家的TPU小型化?
至於Caffe2,Facebook將如何在系統層面爲AI應用作優化,則是一個很是有趣的問題。
誠如Gartner所言,當AI變成科技行業的主戰場時,這裏的事情就有意思多了。
參考內容:
https://developer.apple.com/documentation/coreml
https://developer.apple.com/wwdc/schedule/
http://www.gartner.com/smarterwithgartner/gartners-top-10-technology-trends-2017/
https://backchannel.com/an-exclusive-look-at-how-ai-and-machine-learning-work-at-apple-8dbfb131932b#.cg37ae5f0
https://zhuanlan.zhihu.com/p/26746283
https://developer.apple.com/videos/play/wwdc2017/703/