未探索的TensorFlow库

作者|Vardan Agarwal
编译|VK
来源|Towards Datas Science

TensorFlow是一个端到端的开源机器学习平台,能够执行一系列任务。它为初学者和研究人员提供了一个易用性,可以用于不同的应用,如,但不限于,计算机视觉,自然语言处理和强化学习。

在计算机视觉领域,我们大多数人都熟悉TensorFlow的核心以及TensorFlow Lite和JS。它们用于在移动设备和边缘设备上运行模型,为后者在web上运行模型。然而,TensorFlow还提供了更多神秘的库,我们将在本文中对此进行解释。

目录

  • TensorFlow模型优化工具包

  • TensorFlow Graphics

  • TensorFlow Federated

  • TensorFlow Privacy

  • TensorFlow Hub


TensorFlow模型优化工具包

实时模型对于许多商业操作是必不可少的。MobileNet的推理速度使它成为了众人瞩目的焦点,即使这意味着要牺牲一点准确性。

优化TensorFlow模型首先想到的是将其转换为TensorFlow lite服务。但是,这在桌面上不太好用,因为它是为ARM neon优化的。这篇问题对此进行了解释(https://github.com/tensorflow/tensorflow/issues/35380),否则我们需要进一步优化模型。模型优化工具箱可以帮助我们完成这些任务。根据其主页,它可以用于:

减少云和边缘设备(如移动设备、物联网)的延迟和推理成本。

将模型部署到边缘设备,并限制处理、内存、功耗、网络使用和模型存储空间。

支持对现有硬件或新的专用加速器执行和优化。

它可以应用于已经训练过的模型,也可以在训练期间用于进一步优化解决方案。在编写本文时,它提供了三种技术,以及其他一些正在进行的改进模型的技术。

修剪

第一种方法是权重剪枝。它的工作原理是删除层之间的一些连接,从而减少所涉及的参数和操作的数量,从而优化模型。在训练过程中消除了不必要的张量。这有助于缩小模型的大小,通过训练后量化可以进一步减小模型的大小。

我不会详细介绍每个函数的细节和代码,因为这会使文章太长。你可以参考这里进一步了解和这里的代码:https://www.tensorflow.org/model_optimization/guide/pruning/pruning_with_keras

量化

与只在训练期间进行的修剪不同,量化可以在训练和测试中进行。Tensorflow Lite模型也被量化为使用8位整数,而不是通常使用的32位浮点。这提高了性能和效率,因为整数运算比浮点运算快得多。

然而,这是有代价的。量化是一种有损技术。这意味着先前从-3e38到3e38表示的信息必须从-127表示到127。这回引入更多错误。为了解决这个问题,可以在训练期间应用量化。

量化训练

通过在训练中应用量化,我们迫使模型学习它将导致的差异并相应地采取行动。量化误差作为噪声引入,优化器试图将其最小化。用这种方法训练的模型具有与浮点模型相当的精度。很有意思的是,我们可以比较一下用这种方法创建的Tensorflow-Lite模型与普通模型。

要了解更多关于它的信息,请参考这里:https://blog.tensorflow.org/2020/04/quantization-aware-training-with-tensorflow-model-optimization-toolkit.html

对于它的代码,请看这里:https://www.tensorflow.org/model_optimization/guide/quantization/training_example#see_persistence_of_accuracy_from_tf_to_tflite

训练后量化

虽然最好在训练期间应用量化,但有时这样做是不可行的,因为我们可能有预训练好的权重可供使用。

更多信息可以在这里找到:https://blog.tensorflow.org/2019/06/tensorflow-integer-quantization.html

以及代码:https://www.tensorflow.org/model_optimization/guide/quantization/post_training

权重聚类

它将相似的权重组合起来,并用一个值替换它们。它可以想象成JPEG压缩。此外,由于相似的权重被插值到相同的数目,它也是有损的。

权重矩阵原本存储浮点值。这些值被转换成整数,整数代表簇号。我们再存储包含簇的查找表以便查询。这减少了所需的空间,因为整数需要更少的存储空间。

如下面的示例所示,16个float-32值被指定给4个float-32质心,层权重被转换为整数值。权重矩阵越大,节省的空间就越大。

聚类应用于训练好的模型中,以找到质心。然后任何压缩工具都可以用来缩小模型的大小。要了解它的详细信息,请参阅此处及其实现:https://www.tensorflow.org/model_optimization/guide/clustering/clustering_example

可以结合不同的技术来进一步减少延迟,并且计划更多的方法,如他们的路线图中所讨论的那样:https://www.tensorflow.org/model_optimization/guide/roadmap。

TensorFlow Graphics

TensorFlow graphics旨在将计算机视觉和计算机图形学结合起来,解决复杂的三维任务。

计算机图形工作流需要三维对象及其在场景中的绝对位置、对它们由灯光构成的材质的描述以及生成合成渲染的摄影机。另一方面,计算机视觉工作流将从图像开始,并尝试推导其参数。

这可以看作是一个自编码器,视觉系统(编码器)将尝试查找参数,而图形系统(解码器)将基于这些参数生成图像,并与原始图像进行比较。此外,该系统不需要标记数据,也不需要以自我监督的方式训练。一些用途是:

  1. 变换-可以对对象执行旋转和平移等对象变换。这可以通过神经网络学习来精确地找到物体的位置。它对于需要精确估计这些物体位置的机械手臂很有用。
  2. 建模摄像机-可以设置不同的摄像机内部参数来改变图像的感知方式。例如,更改摄影机的焦距会更改对象的大小。
  3. 材料-可以使用具有不同类型光反射能力的不同类型的材料。因此,创建的场景可以精确地模拟对象在真实世界中的行为。
  4. 三维卷积和池(点云和网格)-它有三维卷积和池层,允许我们对三维数据进行语义分类和分割。
  5. TensorBoard 3D-3D数据变得越来越普遍,可以用来解决从2D数据进行三维重建、点云分割、3D对象变形等问题。通过TensorBoard 3D,这些结果可以可视化,从而更好地了解模型。

进一步阅读:https://blog.tensorflow.org/2019/05/introducing-tensorflow-graphics_9.html

TensorFlow Federated

这个库也可以用于计算机视觉以外的其他领域。随着移动设备和边缘设备数量的增加,产生了大量的数据。

联邦学习的目标是在分散数据上执行机器学习,即在设备本身上!这意味着不需要向服务器上传大量(敏感)数据。它已经在谷歌键盘上使用。

下面的视频解释了联邦学习的,从分散数据到使用TensorFlow federated。

https://youtu.be/89BGjQYA0uE

有关使用TensorFlowFederated进行图像分类的指南,请参阅下面链接的文章。

https://www.tensorflow.org/federated/tutorials/federated_learning_for_image_classification

TensorFlow Privacy

通过隐私攻击可以从经过训练的ML模型中提取敏感信息。Truex等人,提出了一篇关于驱动它的因素的论文(https://arxiv.org/pdf/1807.09173.pdf)。如本文所示(https://www.cs.cmu.edu/~mfredrik/papers/fjr2015ccs.pdf),这些模型甚至可以重建训练所依据的信息。

左侧是仅使用人名和模型重建的图像。右边的图像是原始图像。

同样,像TensorFlow Federated一样,这并不是计算机视觉所独有的。最常用的技术是差分隐私。来自维基百科:https://en.wikipedia.org/wiki/Differential_privacy

差分隐私一种公开共享数据集信息的系统,通过描述数据集中组的模式,同时保留数据集中个人的信息。

假设敏感信息不会在数据集中完全重复,通过使用差分隐私模型,可以确保模型不会学习此类信息。

例如,假设有一个人与人之间聊天的数据集。现在,聊天中传递的敏感信息可以是密码、银行帐户详细信息等。因此,如果在这个数据集上创建了一个模型,则差分隐私将确保该模型无法学习这些细节,因为这些信息的数量很少。阅读这篇关于差分隐私的文章,它还包含了执行它的代码。

http://www.cleverhans.io/privacy/2019/03/26/machine-learning-with-differential-privacy-in-tensorflow.html

TensorFlow Hub

你们中的大多数人一定对这个库有所了解,所以我对它的介绍将非常简短。

TensorFlow Hub是一个在TensorFlow中发布、发现和重用部分机器学习模块的平台。把它称为TensorFlow模型的GitHub是正确的。

开发人员可以共享他们预训练过的模型,然后可以被其他人重用。通过重用,开发人员可以使用较小的数据集训练模型,提高泛化能力,或者只是加快训练速度。让我们快速了解一下现有的几种不同的计算机视觉模型。

  • 图像分类——从MobileNet到Inception 再到EfficientNet,有一百多个可用于此任务的模型。说出你想要的任何型号,很可能会在那里找到它。

  • 对象检测和分割-同样,你需要的任何模型都可以在这里找到,特别是在COCO数据集上训练的TensorFlow model-zoo对象检测器的集合中。Deeplab架构在图像分割领域占据主导地位。还有大量的TfLite和TensorFlow Js模型可用。

  • 图像样式化-图像样式化的不同的主干,以及一个卡通感兴趣。

  • 生成对抗网络-提供了像Big GAN和Compare GAN这样的GAN模型,在ImageNet和Celeb数据集上进行训练。还有一个无边界的GAN,可以用来生成摄像机捕捉到的场景之外的区域。此外,他们中的大多数有一个Colab Notebook,所以实现他们不会太难。

我刚刚描述了冰山一角。我甚至还没有讨论过很多关于模型匹配的问题。跳到他们的页面上了解更多:https://tfhub.dev/

你也可以在这里找到它的教程:https://www.tensorflow.org/hub/tutorials


TensorFlow提供了更多的库,比如TensorFlow Extended(https://www.tensorflow.org/resources/libraries-extensions),一个用于部署ML管道的库 Magenta(https://magenta.tensorflow.org/),一个用于生成音乐的库(https://www.tensorflow.org/resources/libraries-extensions),等等。

请在这里查看完整的列表:https://www.tensorflow.org/resources/libraries-extensions

原文链接:https://towardsdatascience.com/unexplored-tensorflow-libraries-for-computer-vision-db515b1868e5

欢迎关注磐创AI博客站:
http://panchuang.net/

sklearn机器学习中文官方文档:
http://sklearn123.com/

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/

原文地址:https://www.cnblogs.com/panchuangai/p/13867003.html