白話人工智能:深度學習訓練、移動端推理框架介紹

開始學習深度學習的話,框架的選擇是個很重要的事情 (畢竟調包的居多)。這麼多框架我們怎麼選擇,跟着谷歌的 TensorFlow?不對,學長說學術界 PyTorch 纔是老大,在手機上怎麼跑啊。板子帶不動阿。。。。呃呃呃呃,好的,身爲一個半吊子的算法工程師,阿 chai 今天給大家嘮嘮這些框架都是什麼,聽了起碼不會那麼迷茫 (其實可以都試試)。阿 chai 首先強調一點,只是自己的使用感悟,並不全對也不存在歧視某個框架,由於面向初學者,白話也比較多

今天文章中涉及的電子書資料在文末的百度網盤鏈接中,可以結合阿 chai 給出鏈接中的視頻或文檔去學習

算法汪的工具

算法工程師有很多便利的數據分析工具,主要是分爲以下三類。

自己造輪子 (大腦最好的工具)

最早的算法工程師是自己造輪子,這裏不僅是幾個算子重構的 API,“上古時期” 的很多算法工程師是直接在硬件上搞 (軟硬通喫),是真的 “全棧”。可以參考任天堂最早的遊戲機,40k,包括媒體素材的壓縮,真的強。

集成環境的開發工具

後來算法工程師非常迷戀集成開發環境的工具,因爲很多算法人員是數學出身沒他們對於複雜的計算機、電子知識並不擅長,所以需要一個包羅萬象的東西。從事工科的小夥伴應該瞭解一些例如 Matlab,真的是銀河系都能模擬,啥都能幹,隨便幾個指令就能整出來一個仿真。但是這種工具都有一個致命的問題,體積太大 (MatLab 現在十幾個 G),不容易部署。

Matlab

靈活的工具包

靈活的工具包就是我們開發的時候使用的各種庫、模版之類的,比如我們經常聽到的 OpenCV、Eigen、CUDA 等等,我們今天也是重點介紹深度學習中的各種包包。

深度學習煉丹框架集合

在找框架之前,建議先看看一些深度學習的數學基礎並且買一本花書 (電子版在網盤),花書可以慢慢看,着急也看不懂。再次強調,深度學習是 AI 的一個小分支,別上頭,數學和解決實際問題纔是最重要的。

Theano

Theano 是 07 年左右開發的一個多維數組的計算庫,支持 GPU 計算,當時很多人當成 “支持 GPU 的 Numpy”,底層優化的非常好,支持導出 C 的腳本。

Caffe/Caffe2(部署也很強)

Caffe 是頂級高校 UCB 的賈揚清博士開發的,主要是適用於深度學習在計算機視覺的應用。使用 Caffe 做算法代碼量很少,經常就是修修改改就能用,神經網絡模型的管理非常的方便,而且算是比較早的部署在各種落地場景中。Caffe2 可以理解爲一個新版本的 Caffe,但是有很多不同,Caffe2 後來併入了 PyTorch。

Tensorflow1.x

TensorFlow1.x 是谷歌在 16 年正式發佈的深度學習框架 (感覺像 Theano),中間包含了很多類似 Numpy 的算子、深度學習常用算子以及已經很多現成的神經網絡模型,支持在 GPU 上訓練,不用自己整 CUDA 腳本。並且隨着發展已經推出了一個整體的模型庫以及各個落地場景的便捷工具,例如 CV、NLP、GAN 等模型庫。

Keras

Keras 可以當成一種高級 API,他的後端可以是 Theano 和 tensorFlow(可以想成把 TF 的很多打包了),最早是源於一個大佬想自己開發一個框架自己用,後來開源了。由於是高級 API 非常的方便,非常適合科研人員上手。

MXNet

PaddlePaddle

CNTK

PyTorch

ML.NET

TensorFlow2.x

TensorFlow 出 2.x 了,有點大器晚成,靜態圖雖然好用但是被動態圖搶了市場啊,有點慘。他支持了動態圖,並且把 Keras 當成自己的高級 API,所以使用 2.x 的小夥伴,注意自己 import 後面怎麼寫,呵呵呵。有一說一,2.x 確實好用,也支持 1.x,但是出的晚沒辦法啊。

ONNX(比較特殊)

ONNX 流程圖,其中顯示了訓練、轉換器和部署

這裏阿 chai 總結一下,如果走學術路線,果斷 PyTorch,如果想走部署,TensorFLow+PaddlePaddle+Caffe,如果是對深度學習感興趣想額外學習,那就 Paddle Paddle 或者 Keras。微軟的框架專業性比較強,所以不是很適合推薦。OneFlow 也是一個非常棒的深度學習框架,但是由於阿 chai 能力有限,使用的較少,不能誤導小白呀。

深度學習移動端推理框架

上面我們講了很多煉丹的框架,但是我們的模型怎樣整到項目中呢,直接用上述的框架雖然可以,但是在嵌入式設備、機器人或者移動設備上就有點問題了。有一些框架是面向算力有限的設備上做模型部署的,接下來阿 chai 給大家介紹一下,自己瞭解的。由於本人能力有限,部署方便可能有的框架沒有說到,畢竟這個工作量太大了,阿 chai 不可能每個框架都去嘗試,嘿嘿。

TensorRT

TensorRT 是 NVIDIA 公司推出的面向 GPU 算力的推理框架,在服務端和嵌入式設備上都有非常好的效果,但是底層不開源。TensorRT 的合作方非常的多,主流的框架都支持。另外 CUDA 之前我們介紹過,所以如果有 GPU 的話,我們可以傳統的算子 CUDA,深度學習搞成 TensorRT 的就行的。

TF-Lite

TF-Lite 是谷歌針對移動端的推理框架,非常的強大。強大的原因在於 Keras、TensorFlow 的模型都能使用,而且有專門的 TPU 和安卓平臺,這種一條龍的服務讓 TensorFlow 在部署方面還在稱霸。TF-Lite 如果用 Keras、TensorFlow 的模型去轉換一般來說都是腳本直接開搞,自己重構的部分相對少很多。

很多 TFLite 的教學在油管上很多,這裏就不放鏈接了,嘿嘿。

OpenVINO

OpenVINO 是 Intel 的推理框架,一個超級強的推理部署工具。工具包中提供了很多便利的工具,例如 OpenVINO 提供了深度學習推理套件 (DLDT),該套件可以將各種開源框架訓練好的模型進行線上部署,除此之外,還包含了圖片處理工具包 OpenCV,視頻處理工具包 Media SDK。如果是針對 Intel 的加速棒或者工控機上部署真的是非常不錯的。

這裏說應用場景較少是因爲工業上工控機多但是深度學習模型用的還是少,很多都是傳統的算法,很多落地場景中上 Intel 的處理器並不佔優勢。

CoreML

CoreML 是拼過公司推出針對 ios 以及 macOS 系統部署的機器學習平臺,底層不開源。在蘋果設備上,CoreML 的速度是最快的,但是也只能用於蘋果的設備上。現在開發 apple app 主要是 Swift,受到 Swift 出的特性,真的是各種語言各種粘,很好入門。框架訓練的模型通過 ONNX 均可進行轉換,現在也推出了一些直接轉換的方法,詳細看阿 chai 之前寫的教程:平安夜的平安果,蘋果機器學習框架 CoreML 教程。

蘋果的框架不是特殊需求不建議上來就學,畢竟操作系統之又詫異,Xcode 配置能讓小白吐血。

NCNN

NCNN 是騰訊推出的推理框架,一定意義上是之前使用非常廣的一個推理框架,社區做的也非常棒,leader 之一是四大卷王的 Nihui 大佬。NCNN 的速度是超過 TFLite 的,但是有點麻煩的是之前得經常自己用 C 去復現一些算子 (框架起步都這樣),現在因爲使用的人數很多,因此算子很多。NCNN 對於 X86、GPU 均有支持,在嵌入式、手機上的表現非常好。

MNN

MNN 是阿里巴巴推出的移動端框架,現在也支持模型訓練,支持 OpenCL,OpenGL,Vulkan 和 Metal 等。同樣的設備,MNN 的部署速度是非常快的,樹莓派 3B 上 cpu 的加速是 NCNN 速度的 3 被以上,而且文檔非常的全,代碼整潔清晰,非常適合開發者食用。

MNN 框架感覺比 NCNN 穩定一些,而且源碼非常整潔,研究底層也是非常方便。

Tenigne

Tenigne-Lite 是 OpenAILab 推出的邊緣端推理部署框架,OpenCV 官方在嵌入式上的部署首推 Tenigne-Lite。開發團隊中有卷王圈圈蟲坐鎮,現在對於 RISC-V、CUDA、TensorRT、NPU 的支持非常不錯。Tengine 是現在來說感覺安裝環境中 bug 最少的框架,幾乎安按照文檔走不會出問題的。

Tengine-Lite 是個朝氣蓬勃的框架,雖然出的時間並沒有其他框架早,但是框架性能、易用性還是非常適合嵌入式玩家的。

部署的框架也有很多,比如 Paddle-Lite,我們使用的 PyTorch、TF 也能直接部署,但是在移動端效果不佳。華爲海思 NNIE 也非常強大,之前移動端真的快霸主,但是現在受制約芯片停產。其實看了這麼多,大家應該發現,推理框架其實是有針對 的芯片的,比如 Google 的 TPU,部署工作多少就是玩硬件,卷的我們都得全棧啊。

電子書鏈接:

鏈接: https://pan.baidu.com/s/1g8pnMgKmfyHMY9_0Uu3ZlQ  
密碼: tw2c
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Yd013A_b1kO78P3WqzvjPg