移動應用AI化成新戰場?詳解蘋果最新Core ML模型構建基於機器學習的智慧應用

AI100發表於2019-03-02

移動應用AI化成新戰場?詳解蘋果最新Core ML模型構建基於機器學習的智慧應用

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以大師的繪畫風格來為使用者作畫,其步驟如下:

  1. 識別使用者上傳的照片;

  1. 學習照片中的藝術風格資訊;

  2. 輸出一幅重新繪製出來的作品。

    利用神經卷積網路進行紋理合成:對照片紋理進行重繪和渲染

    這與人類學習作畫過程類似:

    1. 看到一幅作品,對繪畫有個初步的概念;

    2. 學習作品中的繪畫風格與筆法;

    3. 臨摹上述風格和筆法,重新繪畫。

    移動應用AI化成新戰場?詳解蘋果最新Core ML模型構建基於機器學習的智慧應用提取不同名畫的風格,就能渲染出不同效果的照片

    但只出現在網頁端的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/


    相關文章