聊聊深度学习框架

共 8453字,需浏览 17分钟

 ·

2021-04-20 00:28

开始学习深度学习的话,框架的选择是个很重要的事情(毕竟调包的居多)。这么多框架我们怎么选择,跟着谷歌的TensorFlow?不对,学长说学术界PyTorch才是老大,在手机上怎么跑啊。板子带不动阿。


呃呃呃呃,好的,身为一个半吊子的算法工程师,阿chai今天给大家唠唠这些框架都是什么,听了起码不会那么迷茫(其实可以都试试)。阿chai首先强调一点,只是自己的使用感悟,并不全对也不存在歧视某个框架,由于面向初学者,白话也比较多


今天文章中涉及的电子书资料在文末的百度网盘链接中,可以结合阿chai给出链接中的视频或文档去学习

算法汪的工具

算法工程师有很多便利的数据分析工具,主要是分为以下三类。

自己造轮子(大脑最好的工具)

最早的算法工程师是自己造轮子,这里不仅是几个算子重构的API,“上古时期”的很多算法工程师是直接在硬件上搞(软硬通吃),是真的“全栈”。可以参考任天堂最早的游戏机,40k,包括媒体素材的压缩,真的强。

集成环境的开发工具

后来算法工程师非常迷恋集成开发环境的工具,因为很多算法人员是数学出身没他们对于复杂的计算机、电子知识并不擅长,所以需要一个包罗万象的东西。从事工科的小伙伴应该了解一些例如Matlab,真的是银河系都能模拟,啥都能干,随便几个指令就能整出来一个仿真。但是这种工具都有一个致命的问题,体积太大(MatLab现在十几个G),不容易部署。

Matlab

灵活的工具包

灵活的工具包就是我们开发的时候使用的各种库、模版之类的,比如我们经常听到的OpenCV、Eigen、CUDA等等,我们今天也是重点介绍深度学习中的各种包包。

深度学习炼丹框架集合

在找框架之前,建议先看看一些深度学习的数学基础并且买一本花书(电子版在网盘),花书可以慢慢看,着急也看不懂。再次强调,深度学习是AI的一个小分支,别上头,数学和解决实际问题才是最重要的。


Theano

Theano是07年左右开发的一个多维数组的计算库,支持GPU计算,当时很多人当成“支持GPU的Numpy”,底层优化的非常好,支持导出C的脚本。

  • 出生地:蒙特利尔大学
  • 特点:计算图、Python+Numpy、源于学术界
  • 主要调包语言:Python
  • 评价:很臃肿、不支持分布式、被后面的TensorFlow打击的很大
  • 入门推荐:绝对不建议,真的要用的话,先学习别的框架再看Github就行了
  • 推荐资料:https://github.com/Theano/Theano

Caffe/Caffe2(部署也很强)

Caffe是顶级高校UCB的贾扬清博士开发的,主要是适用于深度学习在计算机视觉的应用。使用Caffe做算法代码量很少,经常就是修修改改就能用,神经网络模型的管理非常的方便,而且算是比较早的部署在各种落地场景中。Caffe2可以理解为一个新版本的Caffe,但是有很多不同,Caffe2后来并入了PyTorch。

  • 作者:UCB 贾扬清博士
  • 特点:计算图、部署方便、训练方便、cuDnn与MKL均支持
  • 主要调包语言:Python、Matlab脚本、C++
  • 评价:卷积人的大爱啊、环境不好配置、感觉偏底层、Caffe2还是PyTorch
  • 入门推荐:不是很建议,真的想了解可以先入门PyTorch
  • 推荐资料(官方真的很棒):http://caffe.berkeleyvision.org/

Tensorflow1.x

TensorFlow1.x是谷歌在16年正式发布的深度学习框架(感觉像Theano),中间包含了很多类似Numpy的算子、深度学习常用算子以及已经很多现成的神经网络模型,支持在GPU上训练,不用自己整CUDA脚本。并且随着发展已经推出了一个整体的模型库以及各个落地场景的便捷工具,例如CV、NLP、GAN等模型库。

  • 出生地:Google
  • 特点:计算图、分布式训练效果强、底层C构建速度快,生态强大
  • 主要调包语言:Python、C/C++、JS
  • 评价:比Theano好用、API混乱、静态计算图很多人不习惯、部署超级方便
  • 入门推荐:硬件与底层开发的可以试试,不建议小白搞
  • 推荐资料:https://www.bilibili.com/video/BV1m7411d7kT?p=4

Keras

Keras可以当成一种高级API,他的后端可以是Theano和tensorFlow(可以想成把TF的很多打包了),最早是源于一个大佬想自己开发一个框架自己用,后来开源了。由于是高级API非常的方便,非常适合科研人员上手。

  • 作者:Google AI 研究人员 Francois Chollet
  • 特点:生态强大、入门爽歪歪、代码量少(重点)
  • 主要调包语言:Python、C/C++、JS
  • 评价:太适合入门了、速度有点慢、版本得匹配后端框架的版本
  • 入门推荐:强推入门首选,但是后续一定要看看算法的底层是怎样工作的
  • 推荐资料(电子书在网盘中):https://www.bilibili.com/video/BV1fK4y147rp?from=search&seid=10831567169106627566

MXNet

MXNet 是一个社区维护起来的深度学习框架,后来被亚马逊看上了。有类似于 Theano 和 TensorFlow 的计算图,也有灵活的动态图,摒弃有高级接口方便调用。MXNet的底层为C构建,优化的很好,很多推理框架都能直接转换,非常方便,但是由于是社区维护的hhh,诶,沐神真的太辛苦了。

非常适合科研人员上手。

  • 出生地:算是社区吧
  • 特点:计算图动态图都支持、有高级API、速度快、部署方便
  • 主要调包语言:Python、C/C++、JS(js用的相对少)
  • 评价:一定意义上是国人的框架、小团体整的社区维护、文档少生态不行
  • 入门推荐:一般般吧,我觉得作为第二个比较好。
  • 推荐资料(非常适合小白):https://zh-v2.d2l.ai/index.html

PaddlePaddle

PaddlePaddle是百度推出的深度学习框架,算是国人最火的深度学习框架了。跟新了2.0的高级API与动态图后,Paddle更加的强大。百度有很多PaddlePaddle的教程,对于初学者来说还是相当不错的,而且能白嫖V100,真香。PaddlePaddle有很多便捷的工具,比如detection、cv、nlp、GAN的工具包,也有专门的可视化工具(远离tensorboard的支配),国人的框架,必须顶一波。阿chai也在写PaddlePaddle的书籍,等章节整理完会给大家开源。

  • 出生地:百度
  • 特点:计算图动态图都支持、有高级API、速度快、部署方便、有专门的平台
  • 主要调包语言:Python、C/C++、JS
  • 入门推荐:如果没有卡那就非常适合,如果算力不缺,建议先看看PyTorch,当让也可以PaddlePaddle。
  • 推荐资料(Paddle的官网教程太完美了):https://www.paddlepaddle.org.cn/tutorials/projectdetail/1323545

CNTK

CNTK是微软的深度学习“系统”,由于发行的较晚,所以很多学生党并不知晓。CNTK最早是微软内部使用的,使用难度相比TensorFlow那些还有不小的,而且文档之前几乎全英文,教程比较少,但是在语音的应用上还是不错的。Keras可以作为CNTK的前端。

  • 出生地:微软
  • 特点:非常严谨、语音上有一些优势、难度有点高
  • 调包语言:C++、Python
  • 评价:语音上不错呀、微软推不下去了、感觉不如TensorFlow、有点复古
  • 入门推荐:不建议,看看就好。
  • 推荐资料(还是官方吧):https://github.com/Microsoft/CNTK/wiki/Tutorial

PyTorch

PyTorch是脸书的框架,前身是Torch,支持动态图,而且提供了Python接口。、是一个以Python优先的深度学习框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络。Python是现在学术界的霸主,虽然在部署方面有很多的坑,但是有很多方便的工具,例如MMDetection就是用Pytorch。这哥框架对于想要做学术的同学绝对首推(重点)。

  • 出生地:FaceBook
  • 特点:生态强大、入门爽歪歪、代码量少(重点)
  • 主要调包语言:Python、C/C++
  • 评价:入门很快、速度有点慢、部署很垃圾、学术界的霸主
  • 入门推荐:想要做学术的童鞋绝对首选,几乎现在顶会论文的代码都是这个框架写的,不过想要做部署的还是看看TensorFLow或者PaddlePaddle吧。
  • 推荐资料(非常适合小白):https://zh-v2.d2l.ai/index.html

ML.NET

ML.NET可以理解为一个大平台,为协助.NET开发者开发机器学习项目而推出的。这个平台有个很大的特点就就是模型设计到应用的一个“平民化”,能将其他平台设计的模型快读的用于.NET生态中,我们使用的Office等产品均受他的影响。平台中还包含了很机器学习算法,相对于有ML需求的,使用起来更方便一些。

  • 出生地:微软亚洲研究院
  • 特点:生态强大、包罗万象、.NET的伴侣
  • 主要调包语言:C#
  • 评价:入门还行、C#有救了、比CNTK好、想去微软可以看看
  • 入门推荐:一般般,因为这个是一个很大的平台,可以先学别的,然后有.NET的需求再了解。
  • 推荐资料:微软官网写的超级的详细,由于阿chai直接看的官方文档,所以推荐这个。

TensorFlow2.x

TensorFlow出2.x了,有点大器晚成,静态图虽然好用但是被动态图抢了市场啊,有点惨。他支持了动态图,并且把Keras当成自己的高级API,所以使用2.x的小伙伴,注意自己import后面怎么写,呵呵呵。有一说一,2.x确实好用,也支持1.x,但是出的晚没办法啊。

  • 出生地:Google
  • 特点:计算图/动态图、高级API超级方便、底层C构建速度快,生态更加强大
  • 主要调包语言:Python、C/C++、JS
  • 评价:对标PyTorch、学术界没市场了、部署更加的方便
  • 入门推荐:建议做工程的小伙伴入门,学术界真的马上被PyTorch垄断
  • 推荐资料一(北大曹教授):https://www.bilibili.com/video/BV1B7411L7Qt?from=search&seid=12837506722184915875
  • 推荐资料二(沐神):https://zh-v2.d2l.ai/index.html

ONNX(比较特殊)

ONNX是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如Pytorch, MXNet)可以采用相同格式存储模型数据并交互。这个是Wiki的介绍,用大白话说就是是一个中间件,比如你PyTorch的模型想转换别的,就得通过ONNX,现在有的框架可以直接转,但是在没有专门支持的时候,ONNX就非常重要了,万物先转ONNX,ONNX再转万物。ONNX本身也有自己的模型库以及很多开源的算子,所以用起来门槛不是那么高。

ONNX 流程图,其中显示了训练、转换器和部署
  • 出生地:有点多,很多大厂一起整的
  • 特点:万能转换呀
  • 主要调包语言:Python、C/C++
  • 入门推荐:感觉不用刻意去学习,用到了再看就可以的
  • 推荐资料:https://github.com/onnx/tutorials#converting-to-onnx-format

这里阿chai总结一下,如果走学术路线,果断PyTorch,如果想走部署,TensorFLow+PaddlePaddle+Caffe,如果是对深度学习感兴趣想额外学习,那就Paddle Paddle或者Keras。微软的框架专业性比较强,所以不是很适合推荐。OneFlow也是一个非常棒的深度学习框架,但是由于阿chai能力有限,使用的较少,不能误导小白呀。

深度学习移动端推理框架

上面我们讲了很多炼丹的框架,但是我们的模型怎样整到项目中呢,直接用上述的框架虽然可以,但是在嵌入式设备、机器人或者移动设备上就有点问题了。有一些框架是面向算力有限的设备上做模型部署的,接下来阿chai给大家介绍一下,自己了解的。由于本人能力有限,部署方便可能有的框架没有说到,毕竟这个工作量太大了,阿chai不可能每个框架都去尝试,嘿嘿。


TensorRT

TensorRT是NVIDIA公司推出的面向GPU算力的推理框架,在服务端和嵌入式设备上都有非常好的效果,但是底层不开源。TensorRT的合作方非常的多,主流的框架都支持。另外CUDA之前我们介绍过,所以如果有GPU的话,我们可以传统的算子CUDA,深度学习搞成TensorRT的就行的。

  • 出生地:NVIDIA
  • 特点:自产自销NVIDIA不多解释,框架支持很多,生态很棒,稳定性高
  • 主要调包语言:Python、C/C++
  • 推荐平台:NVIDIA Jetson系列的嵌入式、NVIDIA的GPU(一条龙)
  • 支持模型:TensorFlow1.x、TensorFlow2.x、PyTorch、ONNX、PaddlePaddle、MXNet。
  • 入门推荐:非常适合入门,毕竟直接在自己的GPU上做测试就行。
  • 学习资料:https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html

TF-Lite

TF-Lite是谷歌针对移动端的推理框架,非常的强大。强大的原因在于Keras、TensorFlow的模型都能使用,而且有专门的TPU和安卓平台,这种一条龙的服务让TensorFlow在部署方面还在称霸。TF-Lite如果用Keras、TensorFlow的模型去转换一般来说都是脚本直接开搞,自己重构的部分相对少很多。

  • 出生地:Google
  • 特点:一条龙的服务专属平台
  • 主要调包语言:Python、C/C++、Java
  • 支持模型:Keras、TensorFlow、ONNX
  • 推荐平台:几乎所有的ARM处理器和微控制器(树莓派,甚至单片机)、TPU专享
  • 入门推荐:TFboys(TensorFlow使用者)的必备,毕竟一条龙,还有机会了解TPU,非常贴心。
  • 学习资料(文档):https://tensorflow.google.cn/lite/tutorials?hl=zh_cn
  • 学习资料(视频):https://www.bilibili.com/video/BV1EK4y177Sn?from=search&seid=12987573843481015049

很多TFLite的教学在油管上很多,这里就不放链接了,嘿嘿。

OpenVINO

OpenVINO是Intel的推理框架,一个超级强的推理部署工具。工具包中提供了很多便利的工具,例如OpenVINO提供了深度学习推理套件(DLDT),该套件可以将各种开源框架训练好的模型进行线上部署,除此之外,还包含了图片处理工具包OpenCV,视频处理工具包Media SDK。如果是针对Intel的加速棒或者工控机上部署真的是非常不错的。

  • 出生地:牙膏厂,嘿嘿
  • 特点:面向Intel设备的加速,便捷使用,安装和SDK很方便
  • 主要调包语言:C/C++、Python
  • 支持模型:TensorFlow、ONNX、PyTorch、ONNX、MXNet、PaddlePaddle
  • 推荐平台:自己的电脑、Intel神经网络加速棒、Intel的FPGA
  • 入门推荐:作为入门的不啊还是不错的,只是落地场景有点少,毕竟现在是边缘设备的时代
  • 推荐资料:https://docs.openvinotoolkit.org/latest/index.html

这里说应用场景较少是因为工业上工控机多但是深度学习模型用的还是少,很多都是传统的算法,很多落地场景中上Intel的处理器并不占优势。

CoreML

CoreML是拼过公司推出针对ios以及macOS系统部署的机器学习平台,底层不开源。在苹果设备上,CoreML的速度是最快的,但是也只能用于苹果的设备上。现在开发apple app主要是Swift,受到Swift出的特性,真的是各种语言各种粘,很好入门。框架训练的模型通过ONNX均可进行转换,现在也推出了一些直接转换的方法,详细看阿chai之前写的教程:平安夜的平安果,苹果机器学习框架CoreML教程。

  • 出生地:Apple
  • 特点:面向苹果设备,专业设备上速度第一,稳定、入门简单
  • 主要调包语言:C/C++、Python、Obj-C、Swift
  • 支持模型:TensorFlow、ONNX、PyTorch、ONNX、MXNet、Caffe
  • 推荐平台:iMac、MacBook、iPhone、iPad、AppleWatch
  • 入门推荐:针对Apple的开发者,业余选手得买个MBP
  • 入门资料(阿chai整理的):https://mp.weixin.qq.com/s/NfdYtpOLbVdXWZXkwDKKvA

苹果的框架不是特殊需求不建议上来就学,毕竟操作系统之又诧异,Xcode配置能让小白吐血。

NCNN

NCNN是腾讯推出的推理框架,一定意义上是之前使用非常广的一个推理框架,社区做的也非常棒,leader之一是四大卷王的Nihui大佬。NCNN的速度是超过TFLite的,但是有点麻烦的是之前得经常自己用C去复现一些算子(框架起步都这样),现在因为使用的人数很多,因此算子很多。NCNN对于X86、GPU均有支持,在嵌入式、手机上的表现非常好。

  • 出生地:腾讯优图实验室
  • 特点:面向移动端的加速、手机处理器的加速单元支持很棒
  • 主要调包语言:C/C++、Python
  • 支持模型:TensorFlow、ONNX、PyTorch、ONNX、MXNet、DarkNet、Caffe
  • 推荐平台:安卓/苹果手机、ARM处理器设备
  • 入门推荐:对于嵌入式或者APP开发有经验的同学绝对首推的
  • 推荐教程:https://github.com/Tencent/ncnn

MNN

MNN是阿里巴巴推出的移动端框架,现在也支持模型训练,支持OpenCL,OpenGL,Vulkan和Metal等。同样的设备,MNN的部署速度是非常快的,树莓派3B上cpu的加速是NCNN速度的3被以上,而且文档非常的全,代码整洁清晰,非常适合开发者食用。

  • 出生地:阿里巴巴多部门合作
  • 特点:面向移动端的加速、应该是现在速度之最
  • 主要调包语言:C/C++、Python
  • 支持模型:TensorFlow、ONNX、PyTorch、MXNet、NCNN、Caffe、TF-Lite
  • 推荐平台:安卓/苹果手机、ARM处理器设备
  • 入门推荐:首推的部署推理框架,绝对的好用,在苹果设备上的速度也很棒
  • 推荐教程:https://www.yuque.com/mnn/cn

MNN框架感觉比NCNN稳定一些,而且源码非常整洁,研究底层也是非常方便。

Tenigne

Tenigne-Lite是OpenAILab推出的边缘端推理部署框架,OpenCV官方在嵌入式上的部署首推Tenigne-Lite。开发团队中有卷王圈圈虫坐镇,现在对于RISC-V、CUDA、TensorRT、NPU的支持非常不错。Tengine是现在来说感觉安装环境中bug最少的框架,几乎安按照文档走不会出问题的。

  • 出生地:OpenAILab
  • 特点:面向移动端的加速、速度和MNN不相上下、对于嵌入式的支持非常好
  • 主要调包语言:C/C++、Python
  • 支持模型:TensorFlow、ONNX、DarkNet、MXNet、NCNN、Caffe、TF-Lite、NCNN
  • 推荐平台:安卓手机、ARM处理器设备、RISC-V
  • 入门推荐:嵌入式开发的小伙伴还等什么,干就完了
  • 推荐教程:https://github.com/OAID/Tengine

Tengine-Lite是个朝气蓬勃的框架,虽然出的时间并没有其他框架早,但是框架性能、易用性还是非常适合嵌入式玩家的。

部署的框架也有很多,比如Paddle-Lite,我们使用的PyTorch、TF也能直接部署,但是在移动端效果不佳。华为海思NNIE也非常强大,之前移动端真的快霸主,但是现在受制约芯片停产。其实看了这么多,大家应该发现,推理框架其实是有针对 的芯片的,比如Google的TPU,部署工作多少就是玩硬件,卷的我们都得全栈啊。

电子书链接:

链接: https://pan.baidu.com/s/1g8pnMgKmfyHMY9_0Uu3ZlQ  
密码: tw2c
浏览 97
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报