人工智能00002 深度学习与图像识别书评02 图像识别前置技术

作者: 良友知音 | 来源:发表于2023-09-12 08:40 被阅读0次

    第2章 图像识别前置技术

    主流的深度学习平台、如何搭建本书推荐的开发环境以及图像识别的前置技术Numpy。图像处理的大部分场景都需要将图像转换成向量(或者矩阵)以便于进行后续的图像识别处理。

    Numpy包中提供了非常好的矩阵运算,因此,学习并掌握Numpy,在后续的图像识别学习中会起到重要作用。

    2.1 深度学习框架

    近几年,深度学习技术的大爆炸式发展,除了理论方面的突破外,还有基础架构的突破,这些都奠定了深度学习繁荣发展的基础。

    2.1.1 Theano

    Theano是一个Python库,可用于定义、优化和计算数学表达式,特别是多维数组(numpy.ndarray)。

    Theano可以高效地运行于GPU或CPU中。

    随着Tensorflow在Google的支持下强势崛起,Theano日渐式微,使用Theano的人也越来越少。

    对于深度学习新手,可以使用Theano来练手;但对于职业开发者,建议使用Tensorflow。

    2.1.2 Tensorflow

    Tensorflow编程接口支持Python和C++。随着1.0版本的公布,Java、Go、R和Haskell API的alpha版本也得到支持。

    Tensorflow还可在Google Cloud和AWS中运行。

    Tensorflow还支持Windows 7、Windows 10和Windows Server 2016。

    由于Tensorflow使用C++Eigen库,所以库可在ARM架构上进行编译和优化。这也就意味

    着用户可以在各种服务器和移动设备上部署自己的训练模,而无须执行单独的模型解码器或者加载Python解释器。

    作为当前最流行的深度学习框架,Tensorflow获得了极大成功,但在学习过程中读者需要注意下面这些问题。

    ·由于Tensorflow的接口一直处于快速迭代之中,并且版本之间存在不兼容的问题,因此开发和调试过程中可能会出现一些问题(许多开源代码无法在新版的Tensorflow上运行)。

    ·想要学习Tensorflow底层运行机制的读者需要做好准备,Tensorflow在GitHub代码仓库的总代码量超过100万行,系统设计比较复杂,因此这将是一个漫长的过程。

    ·代码层面,对于同一个功能,Tensorflow提供了多种实现,这些实现良莠不齐,使用中还存在细微的区别,请读者注意,避免入坑。

    另外,Tensorflow还创造了图、会话、命名空间、PlaceHolder等诸多抽象概念,对普通用户来说可能会难以理解。

    Tensorflow已经成为当今最为热门的深度学习框架,虽不完美但是最流行,目前,各公司使用的框架也不统一,读者有必要多学习几个流行框架以作为知识储备,Tensorflow无疑是一个不错的选择。

    2.1.3 MXNet

    MXNet是亚马逊(Amazon)的李沐带队开发的深度学习框架。

    它拥有类似于Theano和Tensorflow的数据流图,为多GPU架构提供了良好的配置,有着类似于Lasagne和Blocks的更高级别的模型构建块,并且可以在你想象的任何硬件上运行(包括手机)。

    对Python的支持只是其功能的冰山一角,MXNet同样提供了对R、Julia、C++、Scala、Matlab、Golang和Java的接口。

    MXNet以其超强的分布式支持,明显的内存、显存优化为人所称道。同样的模型,MXNet往往占用更小的内存和显存,并且在分布式环境下,MXNet展现出了明显优于其他框架的扩展性能。

    MXNet的缺点是推广不给力及接口文档不够完善。MXNet长期处于快速迭代的过程中,其文档却长时间未更新,这就导致新手用户难以掌握MXNet,老用户则需要常常查阅源码才能真正理解MXNet接口的用法。

    MXNet文档比较混乱导致其不太适合新手入门,但其分布性能强大,语言支持比较多,比较适合在云平台使用。

    2.1.4 Keras

    Keras是一个高层神经网络API,由纯Python语言编写而成,并使用Tensorflow、Theano及CNTK作为后端。Keras为支持快速实验而生,能够将想法迅速转换为结果。

    Keras应该是深度学习框架之中最容易上手的一个,它提供了一致而简洁的API,能够极大地减少一般应用下用户的工作量,避免用户重复造轮子,而且Keras支持无缝CPU和GPU的相互转换。

    为了屏蔽后端的差异性,Keras做了层层封装,导致用户在新增操作或是获取底层的数据信息时过于困难。

    同时,过度封装也使得Keras的程序过于缓慢,许多bug都隐藏于封装之中。另外就是学习Keras十分容易,但是很快就会遇到瓶颈,因为它缺少灵活性。

    另外,在使用Keras的大多数时间里,用户主要是在调用接口,很难真正学习到深度学习的内容。

    Keras比较适合作为练习使用的深度学习框架,但 是因为其过度的封装导致并不适合新手学习(无法理解深度学习的真正内涵),故不推荐。

    2.1.5 PyTorch

    PyTorch是一个Python优先的深度学习框架,能够在强大的GPU加速的基础上实现张量和动态神经网络。

    PyTorch是一个Python软件包,其提供了两种高层面的功能,具体如下。

    1)使用强大的GPU加速的Tensor计算(类似于Numpy)。

    2)构建基于tape的autograd系统的深度神经网络。

    3)活跃的社区:PyTorch提供了完整的文档,循序渐进的指南,作者亲自维护论坛以供用户交流和求教问题。

    Facebook人工智能研究院(FAIR)对PyTorch提供了强力支持,作为当今排名前三的深度学习研究机构,FAIR的支持足以确保PyTorch获得持续的开发更新,而不至于像许多由个人开发的框架那样昙花一现。

    如有需要,你也可以复用你喜欢的Python软件包(如Numpy、scipy和Cython)来 扩展PyTorch。

    相对于Tensorflow,PyTorch的一大优点是,它的图是动态的,而Tensorflow等都是静态图,不利于扩展。

    同时,PyTorch非常简洁,方便使用。本书将选取PyTorch作为图像识别的主要实现框架。

    如果说TensorFlow的设计是“Make It Complicated”,Keras的设计是“Make It Complicated And Hide It”,那么PyTorch的设计真正做到了“Keep it Simple,Stupid”。

    2.1.6 Caffe

    Caffe是基于C++语言编写的深度学习框架,作者是中国人贾杨清。它开放源码(具有Licensed BSD),提供了命令行,以及Matlab和Python接口,清晰、可读性强、容易上手。

    Caffe存在不支持多机、跨平台、可扩展性差等问题。

    Caffe2在工程上做了很多优化,比如运行速度、跨平台、可扩展性等,它可以看作是Caffe更细粒度的重构,但在设计上,其实Caffe2与TensorFlow更像。目前代码已开源。

    相关文章

      网友评论

        本文标题:人工智能00002 深度学习与图像识别书评02 图像识别前置技术

        本文链接:https://www.haomeiwen.com/subject/jfbyvdtx.html