查看原文
其他

【github干货】主流深度学习开源框架从入门到熟练

言有三 有三AI 2019-12-26

言有三


毕业于中国科学院,计算机视觉方向从业者,有三AI学院等创始人


作者 | 言有三

编辑 | 言有三

今天送上有三AI学院第一个github项目

01


项目背景

目前深度学习框架呈百家争鸣之态势,光是为人熟知的就有caffe,tensorflow,pytorch/caffe2,keras,mxnet,paddldpaddle,theano,cntk,tiny-dnn,deeplearning4j,matconvnet等,一个合格的深度学习算法工程师怎么着都得熟悉其中的3个以上吧。

而且,学习不应该停留在官方的demo上,而是要学会从自定义数据的读取,自定义网络的搭建,模型的训练,模型的可视化,模型的测试与部署等全方位进行掌握


因此,我们开设了这个github项目,以图像分类任务为基准,带领大家一步一步入门,后续会增加分割,检测等任务。


当前的图像分类任务为二分类的表情分类任务,为微笑与非微笑两个类别,案例样本如下。

无表情

微笑

02


框架简介

总的来说,深度学习系统通常有两种编程方式,一种是声明式编程(declarative programming),用户只需要声明要做什么,而具体执行则由系统完成。以Caffe,TensorFlow的计算图为代表。优点是由于在真正开始计算的时候已经拿到了整个计算图,所以可以做一系列优化来提升性能。实现辅助函数也容易,例如对任何计算图都提供forward和backward函数,另外也方便对计算图进行可视化,将图保存到硬盘和从硬盘读取。缺点是debug很麻烦,监视一个复杂的计算图中的某个节点的中间结果并不简单,逻辑控制也不方便。


一种是命令式编程(imperative programming),以numpy,torch/pytorch为代表,每个语句按照原来的意思顺序执行。它 的特点是语义上容易理解,灵活,可以精确控制行为。通常可以无缝地和主语言交互,方便地利用主语言的各类算法,工具包,debug和性能调试器,但是实现统一的辅助函数和提供整体优化都很困难。


综上,各有优劣,自由选择,这里不是为了给大家详细介绍框架,而是快速扫盲,更多请阅读对应文章和官方文档,相关代码进行学习。

2.1 caffe

Caffe是伯克利的贾扬清主导开发,以C++/CUDA 代码为主,最早的深度学习框架之一,比 TensorFlow、Mxnet、Pytorch 等都更早,需要进行编译安装。


支持命令行、Python和Matlab接口,单机多卡、多机多卡等都可以很方便的使用,快速入门见下文。

【caffe速成】caffe图像分类从模型自定义到测试

2.2 tensorflow

TensorFlow是Google brain推出的开源机器学习库,与Caffe一样,主要用作深度学习相关的任务。与Caffe相比TensorFlow的安装简单很多。


TensorFlow = Tensor + Flow,Tensor 就是张量,代表N维数组,这与Caffe中的blob是类似的;Flow即流,代表基于数据流图的计算。


TensorFlow最大的特点是计算图,即先定义好图,然后进行运算,所以所有的TensorFlow代码,都包含两部分:


(1) 创建计算图,表示计算的数据流。它做了什么呢?实际上就是定义好了一些操作,你可以将它看做是Caffe中的prototxt 的定义过程。


(2)运行会话,执行图中的运算,可以看作是Caffe中的训练过程。只是TensorFlow的会话比Caffe灵活很多,由于是Python 接口,取中间结果分析,Debug等方便很多,快速入门见下文。

【tensorflow速成】Tensorflow图像分类从模型自定义到测试

2.3 mxnet

mxnet是amazon的官方框架,它尝试将上面说的两种模式无缝的结合起来。在命令式编程上MXNet提供张量运算,进行模型的迭代训练和更新中的控制逻辑;在声明式编程中MXNet支持符号表达式,用来描述神经网络,并利用系统提供的自动求导来训练模型,快速入门见下文。

【mxnet速成】mxnet图像分类从模型自定义到测试

2.4 pytorch 

一句话总结Pytorch = Python + Torch。


Torch是纽约大学的一个机器学习开源框架,几年前在学术界非常流行,包括Lecun等大佬都在使用。但是由于使用的是一种绝大部分人绝对没有听过的Lua语言,导致很多人都被吓退。后来随着Python的生态越来越完善,Facebook人工智能研究院推出了Pytorch并开源。Pytorch不是简单的封装Torch 并提供Python 接口,而是对Tensor以上的所有代码进行了重构,同TensorFlow一样,增加了自动求导。


后来Caffe2全部并入Pytorch,如今已经成为了非常流行的框架。很多最新的研究如风格化、GAN等大多数采用Pytorch源码,快速入门见下文。

【pytorch速成】Pytorch图像分类从模型自定义到测试

2.5 paddlepaddle 

正所谓google有tensorflow,facebook有pytorch,amazon有mxnet,作为国内机器学习的先驱,百度也有PaddlePaddle,其中Paddle即Parallel Distributed Deep Learning(并行分布式深度学习),整体使用起来与tensorflow非常类似,可参考下文。

【paddlepaddle速成】paddlepaddle图像分类从模型自定义到测试

2.6 keras

Keras是一个非常流行、简单的深度学习框架,它的设计参考了torch,用Python语言编写,是一个高度模块化的神经网络库,能够在TensorFlow,CNTK或Theano之上运行。 Keras的特点是能够快速实现模型的搭建,是高效地进行科学研究的关键,可参考下文。

【Keras速成】Keras图像分类从模型自定义到测试

2.7 其他

除了以上最常用的框架,还有theano,cntk,tiny-dnn,deeplearning 4j,matconvnet等,我们后续会补充教程,增强github案例,欢迎大家关注,下面是github项目链接,欢迎来做贡献。

以及与该项目配套的教程,前十名转发截图到后台,可找我领取免费码。


更多请移步知乎专栏《有三AI学院》。


十月开始,我们有三AI学院开启了“稷”划和“济”划,帮助想入行以及想取得更多实战经验的同学。内容覆盖从自动驾驶到美颜直播等领域的实战项目,从图像基础到深度学习理论的系统知识,欢迎关注。

有三AI“【济】划”,从图像基础到深度学习

有三AI“十一月【稷】划”,从调参大法到3D重建

有三AI“十月【稷】划”,从自动驾驶到模型优化

我们的网易公开课已经上线,欢迎来听。

如果想加入我们,后台留言吧


微信

Longlongtogo

公众号内容

1 图像基础|2 深度学习|3 行业信息

有三精选

往期学员分享

往期开源框架

往期模型精选

往期行业趋势

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存