Google剛剛息鼓,蘋果又燃戰火!這一戰,來自移動應用的AI化之爭。
近日,蘋果釋出專為移動端優化的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加持的移動應用總能脫穎而出。
以Prisma為代表的移動應用AI化
重新回顧一下Prisma的故事,我們總是能找出一些蛛絲馬跡。
作為戰鬥民族的90後,技術發燒友Alexey Moiseenkov在2016年初偶然讀到兩篇關於影像的機器學習論文:《藝術風格的神經演算法(A Neural Algorithm of Artistic Style)》和《利用神經卷積網路進行紋理合成(Texture Synthesis Using Convolutional Neural Networks)》。
藝術風格的神經演算法:提取畫作的藝術風格
論文的作者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/