- 幾何計算。通過 MNN 自研的“硬核”技術,將多后端算子實現這項枯燥但必要的工作成本大幅降低。正是基于這項技術,MNN 重寫了目前所有的硬件后端。引入幾何計算之后 GPU 后端算子的覆蓋率大幅增加,在GPU 后端性能普遍獲得約?20%?提升,并新支持了?TensorRT 和 CUDA 后端。
- 基于?Transformer 結構的 ASR 模型的支持。為了應對這類大量涉及?Control Flow、Dynamic Shape和Zero Shape等特性的模型結構,MNN?在框架層面進行了大幅度重構從而對其進行支持和完善。
關于 MNN 的強大,能說的還有很多,但我們不想再一次通過秀肌肉來證明 MNN 的領先獨到。相反,我們希望通過這篇文章來說明更重要的一件事:來自開發(fā)者的聲音,我們聽見了。
在 MNN 開源的這一年多里,隨著 MNN 被越來越多的開發(fā)者、企業(yè)所了解并使用,我們與社區(qū)之間的交流也愈加緊密頻繁。在這之中,有一類的呼聲經常被提起:
- “MNN 很強了,就是希望 iOS / Android Demo 更多一點。Python 還是有點不熟悉”
- “教教我們這些小白怎么上手唄。MNN 能干些啥呀~”
- “五子棋牛逼,支持五神!老板我也想搞端智能!”
沒錯,很多人對機器學習的陌生來自于未知,而正是因為這個未知讓大家想象不到能用 MNN 實現什么。
所以我們在想,如果用一門更熟悉的語言,帶大家走入端智能的大門,為自己的職業(yè)生涯開辟一道新的口子,這樣是不是對大家更有幫助?
今天,對著廣大的移動開發(fā)者,我們要大聲的宣布:MNN for Swift 正式來啦!伴隨著這個項目一同發(fā)布的,還有系列實踐性教程 -《MNN x Swift 機器學習實戰(zhàn)》。
通過這兩個項目,希望能給各位帶來清晰的端智能學習路徑。
能從課程中收獲什么
相信大家都對網上質量參差不齊、沒有實際干貨的課程感到深惡痛絕。所以在設計系列教程的時候,我們首要考慮的兩個要素就是:
- 免費
- 硬核技術和動手實踐結合
基于此,我們會以每兩周一次的方式進行 5 次的系列課程教學,結合 MNN 工作臺 AI For Everyone 的低實踐門檻,帶來值得期待的知識分享。
??系列直播預告
插段廣告,如果你還不知道 MNN 工作臺是什么,那就趕快前往 MNN 官網 www.mnn.zone 去下載吧。MNN 工作臺是淘系技術部 – 端智能團隊在今年 10 月份對外公測的一站式端側 AI 平臺。它是集低門檻預訓練模版、開箱即用算法集、多端一鍵部署于一體的機器學習工具箱,通過 MNN 工作臺,每個人都可以在幾分鐘內完成模型訓練并部署到手機上運行看到應用效果。
整體的課程大綱如下:
- Introduce to MNN For Swift
-
- 介紹移動端機器學習現狀
- MNN For Swift 整體概覽
- MNN For Swift 實現原理
-
- C++ 至 C 到 Swift 開發(fā)流程的最佳實踐
- MNN For Swift API 設計思路
- MNN For Swift 進階 – 玩轉 Swift 自定義操作符
- 玩轉 MNN 工作臺 For Swit (一)- 模型預測
-
- MNN For Swift 推理 API 使用介紹
- 手把手玩轉 MNIST 手寫數字預測
- 高級進階 – 從 MNN 工作臺獲取更多高級模型
- 玩轉 MNN 工作臺 For Swift(二)- 模型訓練
-
- MNN For Swift 訓練 API 使用介紹
- 用 MNN Swift 構建 MINST 數字識別模型
- 高級進階 – 通過 MNN 工作臺訓練更多模型
- MNN For Swift 應用實戰(zhàn)
-
- OCR – 光學字符識別簡介
- MNN 工作臺 OCR 開箱即用模型簡介
- 使用 MNN For Swift 部署 OCR 模型
- 完整應用案例展示
怎么樣?看完大綱后是不是對使用 MNN For Swift 進行機器學習充滿了好奇?那就敬請期待我們后續(xù)的課程吧!
當然有人會問:“付出那么多,你們想從這個課程中收獲什么?”
很簡單,我們希望通過這個課程讓大家了解端智能是什么、如何把端智能和自身的日常工作進行結合。對那些積極參與《MNN x Swift》系列課程的朋友,如果您對 MNN 和 Swift 有什么獨到的見解或者建議,也會邀請您參與到我們的直播中,共同打造 MNN For Swift 的社區(qū)生態(tài)!
只有更多人一起來玩端智能,這個新興的領域才能受到更多的關注、獲得更長足的發(fā)展。
Why Swift
最后我們還想來談談為什么 MNN 會選擇在這個時間點支持 Swift。
一直以來,因為其強大的社區(qū)活力和易用的特性,Python 始終把控著機器學習社區(qū)語言的頭把交椅(雖然 Julia 也發(fā)展的很迅猛)。Tensorflow、PyTorch 以及最新推出的 MNN 工作臺等主流的機器學習框架或工具更是和 Python 這門語言緊緊的交織在一起。
但是將 Python 搬到移動端上卻不是一件非常容易的事,引用 Tensorflow 對于移動端應用 Python 的觀點來看:
- 部署麻煩,運行時依賴太多。
- 沒有編譯期類型檢查。這導致很多錯誤要到運行時才能發(fā)現,在移動端,這些不可忽視的錯誤常常導致嚴重的應用崩潰等重大用戶體驗問題。
- 性能太差,并發(fā)困難。而機器學習模型對算力的貪婪需求,迫切需要靠并發(fā)緩解。
而自 2014 年 WWDC 正式發(fā)布之后,Swift 已經逐漸成為了蘋果開發(fā)者生態(tài)中的主流開發(fā)語言。作為一門比 Objective-C 更加現代化、更加安全的編程語言,Swift 已經獲得了國內外廣大開發(fā)者的喜愛。同時,應用 Swift 可以讓我們“免費”享受到蘋果工程師持續(xù)不斷的性能、穩(wěn)定性優(yōu)化成果。
更重要的一點是,當我們基于 Swift 實踐了部分機器學習開發(fā)工作后,我們驚訝的發(fā)現,Swift 竟然在機器學習領域有著與 Python 相媲美的表達特性。
用如下一段 Python 和 Swift 的 MNN 編程片段進行簡單對比:
Python 代碼:
# F = MNN.expr
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 在移動開發(fā)領域天然的優(yōu)勢(蘋果大力支持)以及語言自身的安全特性都讓 Swift 比起 Python 而言更適合移動端機器學習。
這也是我們?yōu)槭裁聪露Q心要開展 MNN For Swift 的重要原因。
在內部項目中,我們已經用 MNN For Swift 與 SwiftUI 完成了機器學習應用的編寫,91% 的代碼均為 Swift。由此可見 Swift 在移動端機器學習領域是能讓開發(fā)者快速上手,降低開發(fā)者的開發(fā)門檻的一門優(yōu)秀語言。所以不要猶豫,趕緊把 MNN For Swift 學起來。
結語
紙上得來終覺淺,絕知此事要躬行。不要再為自己每天還在糊 UI、畫 Label 、組裝 TableView 而感到焦慮。通過《MNN x Swift 機器學習實戰(zhàn)》,我們希望讓大家感受到深度學習不止是從事算法專業(yè)人員的“獨門武器”、也不是大廠宣傳秀肌肉的利器,而是讓所有愛好技術的人都能參與實踐的自我提升手段。
也希望借助 MNN For Swift 項目及系列課程,讓大家感受到 MNN 積極擁抱社區(qū)、響應開發(fā)者呼聲的熱情與決心,給開發(fā)者們緩解一絲冬季的焦慮。
— 完 —