自 2019 年 4 月在 Github 開源以來,淘系技術部-端智能團隊自研的 MNN 推理引擎,因為其高性能、易用性以及優秀兼容性受到不少開發者的支持和喜愛。我們也把這份支持化作不斷前進的動力,僅最近半年就推出了包括但不限於如下的諸多亮眼特性:
關於 MNN 的強大,能說的還有很多,但我們不想再一次通過秀肌肉來證明 MNN 的領先獨到。相反,我們希望通過這篇文章來說明更重要的一件事:來自開發者的聲音,我們聽見了。
在 MNN 開源的這一年多裡,隨著 MNN 被越來越多的開發者、企業所了解並使用,我們與社區之間的交流也愈加緊密頻繁。在這之中,有一類的呼聲經常被提起:
沒錯,很多人對機器學習的陌生來自於未知,而正是因為這個未知讓大家想像不到能用 MNN 實現什麼。
所以我們在想,如果用一門更熟悉的語言,帶大家走入端智能的大門,為自己的職業生涯開闢一道新的口子,這樣是不是對大家更有幫助?
今天,對著廣大的移動開發者,我們要大聲的宣布:MNN for Swift 正式來啦!伴隨著這個項目一同發布的,還有系列實踐性教程 -《MNN x Swift 機器學習實戰》。
通過這兩個項目,希望能給各位帶來清晰的端智能學習路徑。
相信大家都對網上質量參差不齊、沒有實際乾貨的課程感到深惡痛絕。所以在設計系列教程的時候,我們首要考慮的兩個要素就是:
基於此,我們會以每兩周一次的方式進行 5 次的系列課程教學,結合 MNN 工作檯 AI For Everyone 的低實踐門檻,帶來值得期待的知識分享。
✿ 系列直播預告
插段廣告,如果你還不知道 MNN 工作檯是什麼,那就趕快前往 MNN 官網 www.mnn.zone 去下載吧。MNN 工作檯是淘系技術部 - 端智能團隊在今年 10 月份對外公測的一站式端側 AI 平臺。它是集低門檻預訓練模版、開箱即用算法集、多端一鍵部署於一體的機器學習工具箱,通過 MNN 工作檯,每個人都可以在幾分鐘內完成模型訓練並部署到手機上運行看到應用效果。
整體的課程大綱如下:
介紹移動端機器學習現狀
MNN For Swift 整體概覽
怎麼樣?看完大綱後是不是對使用 MNN For Swift 進行機器學習充滿了好奇?那就敬請期待我們後續的課程吧!
當然有人會問:「付出那麼多,你們想從這個課程中收穫什麼?」
很簡單,我們希望通過這個課程讓大家了解端智能是什麼、如何把端智能和自身的日常工作進行結合。對那些積極參與《MNN x Swift》系列課程的朋友,如果您對 MNN 和 Swift 有什麼獨到的見解或者建議,也會邀請您參與到我們的直播中,共同打造 MNN For Swift 的社區生態!
只有更多人一起來玩端智能,這個新興的領域才能受到更多的關注、獲得更長足的發展。
最後我們還想來談談為什麼 MNN 會選擇在這個時間點支持 Swift。
一直以來,因為其強大的社區活力和易用的特性,Python 始終把控著機器學習社區語言的頭把交椅(雖然 Julia 也發展的很迅猛)。Tensorflow、PyTorch 以及最新推出的 MNN 工作檯等主流的機器學習框架或工具更是和 Python 這門語言緊緊的交織在一起。
但是將 Python 搬到移動端上卻不是一件非常容易的事,引用 Tensorflow 對於移動端應用 Python 的觀點來看:
而自 2014 年 WWDC 正式發布之後,Swift 已經逐漸成為了蘋果開發者生態中的主流開發語言。作為一門比 Objective-C 更加現代化、更加安全的程式語言,Swift 已經獲得了國內外廣大開發者的喜愛。同時,應用 Swift 可以讓我們「免費」享受到蘋果工程師持續不斷的性能、穩定性優化成果。
更重要的一點是,當我們基於 Swift 實踐了部分機器學習開發工作後,我們驚訝的發現,Swift 竟然在機器學習領域有著與 Python 相媲美的表達特性。
用如下一段 Python 和 Swift 的 MNN 編程片段進行簡單對比:
input_data = F.placeholder([1, 3, image_height, image_width], F.NCHW, F.float)input_data.write(image_data)input_data = F.convert(input_data, F.NC4HW4)outputs = ocr_det_net.forward([input_data])[0]outputs = F.convert(outputs, F.NCHW)data = outputs.read()同樣的代碼在 Swift 中:
var input_data = Expr.placeholder(shape: [1, 3, image_height, image_width], dataFormat: .NCHW, dtype: Float.self)input_data.write(data: image_data)input_data = Expr.convert(input: input_data, format: .NC4HW4)var output = ocr_det_net.onForward(inputs: [input_data])[0]output = Expr.convert(input: output, format: .NCHW)let data = output.read()
毫不誇張的說,如果不加以提示,可能根本不會感受到二者的異同,可見二者在語法表達上十分接近。
除了同樣充分的表達性以外,Swift 在移動開發領域天然的優勢(蘋果大力支持)以及語言自身的安全特性都讓 Swift 比起 Python 而言更適合移動端機器學習。
這也是我們為什麼下定決心要開展 MNN For Swift 的重要原因。
在內部項目中,我們已經用 MNN For Swift 與 SwiftUI 完成了機器學習應用的編寫,91% 的代碼均為 Swift。由此可見 Swift 在移動端機器學習領域是能讓開發者快速上手,降低開發者的開發門檻的一門優秀語言。所以不要猶豫,趕緊把 MNN For Swift 學起來。
結語
紙上得來終覺淺,絕知此事要躬行。不要再為自己每天還在糊 UI、畫 Label 、組裝 TableView 而感到焦慮。通過《MNN x Swift 機器學習實戰》,我們希望讓大家感受到深度學習不止是從事算法專業人員的「獨門武器」、也不是大廠宣傳秀肌肉的利器,而是讓所有愛好技術的人都能參與實踐的自我提升手段。
也希望藉助 MNN For Swift 項目及系列課程,讓大家感受到 MNN 積極擁抱社區、響應開發者呼聲的熱情與決心,給開發者們緩解一絲冬季的焦慮。
✿ 拓展閱讀
作者|明弈、星志
編輯|橙子君
出品|阿里巴巴新零售淘系技術