关于raspberry-pi:上海晶珩EDATEC2023-年使用树莓派和替代品进行深度学习

45次阅读

共计 5453 个字符,预计需要花费 14 分钟才能阅读完成。

介绍

此页面可帮忙您在 Raspberry Pi 或 Google Coral 或 Jetson Nano 等替代品上构建深度学习模式。无关深度学习及其限度的更多个别信息,请参阅深度学习。本页更多地介绍个别准则,因而您能够很好地理解它的工作原理以及您的网络能够在哪个板上运行。无关软件装置的分步办法,请参见 Raspberry Pi 4 和替代品的深度学习软件。

Tensor

一个宽泛应用的深度学习软件包是 TensorFlow。让咱们从名称开始。什么是 tensor?你能够有一个数字列表。这在数学中称为向量。

如果向此列表增加维度,则会失去一个矩阵。

例如,通过这种形式,您能够显示黑白图像。每个值代表一个像素值。行数等于高度,列数与图像的宽度匹配。如果你再次向矩阵增加一个额定的维度,你会失去一个 tensor。

彼此重叠的 2D 矩阵堆栈。或者换句话说,一个矩阵,其中各个数字被一个向量所取代,一个数字列表。例如 RGB 图片。每个独自的像素(矩阵中的元素)由三个元素组成; 一个 R、G 和 B 重量。这是 tensor(n 维数字数组)的最简化定义。

TensorFlow 和数学中的张量之间的定义存在轻微差别。
在数学中,tensor 不仅仅是矩阵中的数字汇合。在这里,tensor 必须恪守某些变换规定。这些规定与在不扭转其后果的状况下扭转 tensor 所在的坐标系无关。大多数 tensor 都是 3D 的,并且具备与 Rubric 立方体雷同数量的元素。每个独自的立方体通过一组正交向量预测物理对象在应力(tensor)下将如何变形。
如果观察者在事实世界中占据另一个地位,物体自身的变形不会扭转; 显然,它依然是同一个对象。然而,给定此新地位,所有向量或公式都将更改。它们将以变形的后果放弃不变的形式发生变化。能够把它设想成两座塔顶之间的间隔。无论你站在哪里,这都不会扭转。然而,从你的地位到这些顶部绘制矢量会依据你的地位、你的原点而变动。在 tensor 的上下文中,甚至还有第三个含意,即神经 tensor 网络。
这个非凡神经网络中的 tensor 在两个实体之间建设了关系。狗有尾巴,狗是哺乳动物,哺乳动物须要氧气等。

最初两个定义只是为了残缺起见而给出的。许多人认为 TensorFlow 与这些解释之一无关。事实并非如此。

分量矩阵

TensorFlow 和其余深度学习软件最重要的构建块是 n 维数组。本节介绍这些数组的用法。每个深度学习应用程序都由给定的神经节点拓扑组成。每个神经节点通常结构如下。

每个输出乘以一个权重并相加。与偏差一起,后果进入激活函数 φ。这能够是简略的步进运算,也能够是更简单的函数,例如双曲正切。

输入是网络中下一层的输出。网络能够由许多层组成,每层都有数千个独自的神经元。如果您查看一个层,则雷同的输出数组能够利用于不同的权重数组。每个都有不同的后果,以便能够从单个输出中提取各种特色。

在下面的网络中,四个输出(黄色)都齐全连贯到第一层的四个神经元(蓝色)。它们连贯到下一层的五个神经元。追随另一个由六个神经元组成的内层。通过间断两层四层和三层后,达到具备三个通道的输入(橙色)。这样的计划导致向量矩阵乘法。

这里,四个值(x,y,z,w)的输出层与权重矩阵相乘。x 输出的权重 a,b,c,d,导致输入端呈现 x’。y’ 输入的权重 e,f,g,h 等。还有其余办法能够形容这种乘法,例如,

其中 v 是输出向量(x,y,z,w),v’ 是输入(x’,y’,z’)。向量矩阵乘法是 TensorFlow 中执行最多的操作之一,因而得名。GPU 在将所有点放在一起之前,首先在 GPU 硬件中绕道而行。

GPU

代表图形处理单元,一种最后设计用于将 CPU 从爽朗的屏幕渲染工作中解放出来的设施。多年来,GPU 变得更加弱小。现在,它们领有超过 21 亿个晶体管,可能执行大规模的并行计算。特地是在计算屏幕上每个像素的游戏中,须要这些计算能力。挪动查看器的地位时,例如,当英雄开始运行时,必须从新计算所有顶点。而这每秒 25 次以取得平滑过渡。每个顶点都须要旋转和平移。公式为:

这里(x,y,z,w)是 3D 中的初始像素地位,(x’,y’,z’,w’)是矩阵运算后的新地位。如您所见,这种类型的算术与神经网络雷同。还有另一个趣味点。当你看 x ’ 时,它是四个乘积(ax+by+cz+dw)的总和。另一方面,y’ 也是一个求和(ex+fy+gz+hw)。然而要计算 y ’,不须要晓得决定 x ’(a,b,c 和 d)的值。它们彼此无关。您能够同时计算 x’ 和 y’。还有 z’ 和 w’ 就此而言。实践上,与其余后果没有关系的每个计算都能够同时执行。因而,GPU 的十分并行的架构。当今(2023 年)最快的 GPU 每秒可能达到惊人的 125 TFLOP。
这就是 GPU 减速背地的整个想法。将所有张量传输到 GPU 内存,并让设施在破费 CPU 的一小部分工夫内执行所有矢量矩阵计算。如果没有令人印象粗浅的 GPU 计算能力,深度学习简直是不可能的。

TPU

在深度学习的微小市场潜力的推动下,一些制造商将 GPU 替换为 TPU,即 Tensor 处理单元。除了矢量矩阵乘法,GPU 还有其余工作要做,例如顶点插值和着色、H264 压缩、驱动 HDMI 显示器等。通过仅将所有晶体管用于 Tensor 点积,吞吐量减少,功耗升高。第一代仅实用于 8 位整数,后者也实用于浮点数。上面嵌入式板上的 TPU 都是基于整数的,除了 Jetson Nano。在此处浏览深刻的文章。

GPU 陷阱

对于 GPU 算术,必须思考几点。
首先,保持矩阵。GPU 架构专为这种操作而设计。编写一个宽泛的 if-else 构造对于 GPU 和整体性能来说是灾难性的。
另一点是内存替换会耗费很多效率。越来越多的数据从 CPU 内存(图像通常所在的地位)和 GPU 内存的数据传输正在成为一个重大的瓶颈。您在 NVIDIA 的每个文档中一遍又一遍地浏览雷同的内容; 矢量矩阵点积越大,执行速度越快。在这方面,请记住,Raspberry 及其替代品通常有一个用于 CPU 和 GPU 的大 RAM。它们仅共享雷同的 DDR4 芯片。您的神经网络不仅必须适宜程序内存,而且还必须在 RAM 中留出空间,以便 CPU 内核能够运行。这有时会对网络或要辨认的对象数量施加限度。在这种状况下,抉择另一块具备更多 RAM 的电路板可能是惟一的解决方案。所有这些都与 GPU 具备内存库的 PC 中的图形卡造成鲜明对比。
另一个区别是视频卡上的 GPU 应用浮点或半浮点,有时也称为小浮点。树莓上的嵌入式 GPU 或代替板上的 TPU 应用 8 位或 16 位整数。您的神经网络必须适应这些格局。如果无奈做到这一点,请抉择另一个具备浮点运算的板,例如 Jetson Nano。
最初一个倡议,不要过多地超频 GPU。它们以低于 CPU 的频率失常工作。ARM 内核中的一些 Mali GPU 运行低至 400 MHz。超频能够在夏季工作,但应用程序可能会在仲夏波动。请记住,忽然解体的是您在客户端的视觉应用程序,而不是您简略地重新启动游戏。
当然,页面上对于 Raspberry 上计算机视觉的评论也实用于这里。

Showstopper

您不能在 Raspberry Pi 或代替计划上训练深度学习模型。如果您没有打算环游世界,则不会。这些板不足计算机能力来执行训练期间所需的大量浮点多加法。即便是 Google Coral 也无奈训练网络,因为该板上的 TPU 仅实用于非凡的预编译 TensorFlow 网络。只有网络中的最初一层能够稍作更改。只管 Jetson Nano 具备浮点 CUDA,但它依然不能很好地在可承受的工夫内训练网络。一夜之间实现是 NVIDIA 在这里的倡议。因而,最初,您只能在这些板上导入并运行已训练的模型。

云服务

如前所述,训练不是 Raspberry Pi 的选项,也不是任何其余小型 SBC 的抉择。然而,有一条逃生路线。所有次要的科技公司都有云服务。其中许多还包含运行装备 GPU 的 Linux 虚拟机的选项。当初,您领有了触手可及的 CUDA 减速的最先进的 CPU。最好的收费服务之一是谷歌,GDrive 上有 15 GB 的收费空间,每天至多有 12 小时的收费计算机工夫。当初,只需一个简略的 Raspberry Pi 就能够在肯定水平上训练您的深度学习模型。转移训练(局部调整分量而不扭转拓扑)是可行的,因为这是一项绝对容易的工作,您能够在几个小时内实现。另一方面,训练简单的 GAN 须要更多的资源。它可能会迫使您购买额定的电力。

实际

第一步是装置操作系统,通常是 Linux 的衍生产品,如 Ubuntu 或 Debian。这是容易的局部。
艰难的局部是装置深度学习模型。您必须弄清楚是否须要任何其余库(OpenCV)或驱动程序(GPU 反对)。请留神,只有 Jetson Nano 反对 CUDA,这是 PC 上应用的大多数深度学习软件包。如果您想减速神经网络,所有其余板都须要不同的 GPU 反对。Raspberry Pi 或代替计划的 GPU 驱动程序的开发是一个继续的过程。查看网络上的社区。
最初一步是将神经网络升高到可承受的比例。驰名的 AlexNet 每 帧具备原始的 2 .3 亿次浮点运算。这永远不会在简略的单个 ARM 计算机或挪动设施上疾速运行。大多数模型都有某种缩小策略。YOLO 有 Tiny YOLO,Caffe 有 Caffe2,TensorFlow 有 TensorFlow Lite。它们都应用以下一种或多种技术。
减小输出大小。较小的图像在第一层上节俭了大量计算。
缩小要分类的对象数量; 它修剪了许多内层的大小。
尽可能将神经网络从浮点数移植到字节。这也大大降低了内存负载。
另一种策略是将浮点数缩小到单个比特,即 XNOR 网络。这里探讨了这个迷人的想法。

树莓派和替代品的比拟

Jetson Nano vs Google Coral vs Intel Neural stick,这里是比拟。列表中的三个奇怪的是 JeVois,Intel Neural Stick 和 Google Colar USB 加速器。第一个有一个板载摄像头,能够做很多事件,你能够在这里浏览。
Intel Neural Stick 和 Google Colar 加速器是带有非凡 TPU 芯片的 USB 加密狗,可执行所有 Tensor 计算。Intel Neural Stick 附带一个工具集,用于将 TensorFlow、Caffe 或 MXNet 模型迁徙到神经棒的工作两头示意(IR)图像中。
Google Coral 与非凡的预编译 TensorFlow Lite 网络配合应用。如果神经网络的拓扑及其所需的操作能够在 TensorFlow 中形容,那么它可能在 Google Coral 上运行良好。然而,因为其大量的 1 GB RAM,内存短缺依然是一个问题。
Google USB 加速器具备非凡的后端编译器,可将 TensorFlow Lite 文件转换为加密狗 TPU 的可执行模型。
Jetson Nano 是惟一具备浮点 GPU 减速性能的单板计算机。它反对大多数模型,因为所有框架如 TensorFlow,Caffe,PyTorch,YOLO,MXNet 和其余在给定工夫都应用的 CUDA GPU 反对库。价格也十分有竞争力。这与蓬勃发展的深度学习市场无关,英伟达不想失去其突出位置。
并非所有型号都能够在每台设施上运行。大多数状况下是因为内存不足或硬件和 / 或软件不兼容。在这些状况下,能够应用多种解决方案。然而,它们的开发将十分耗时,并且后果通常会令人悲观。
Benchmarks 总是须要探讨的。有些人可能会发现其余 FPS 应用雷同的模型。这所有都与所应用的办法无关。咱们应用 Python,NVIDIA 应用 C ++,谷歌应用他们的 TensorFlow 和 TensorFlow Lite。Raspberry Pi 3 B+ 具备板载 2.0 USB 接口。两种神经棒都能够解决 3.0,这意味着它们能够更快地执行。另一方面,新的 Raspberry Pi 4 B 具备 USB 3.0,与其前身相比,这将导致更高的 FPS。
表中显示的数字纯正是从输出到输入执行所需的工夫。不思考其余过程,例如捕捉和缩放图像。顺便说一下,不应用超频。

树莓派和深度学习

咱们在 GitHub 上搁置了一个深度学习库和几个深度学习网络。联合简略的 C ++ 示例代码,您能够在袒露的树莓派上构建深度学习应用程序。它十分用户敌对。此页面上的更多信息。

下面是在裸树莓派上运行的 TensorFlow Lite 模型(带有 COCO 训练集 MobileNetV1_SSD 300×300)的印象。
应用像 Ubuntu 这样的 64 位操作系统,如果您超频到 24 FPS,您将取得 1925MHz。
应用像 Raspbian 这样的惯例 32 位零碎,一旦超频到 17FPS,您将取得 2000MHz。

树莓派和最近的替代品

上面在 Raspberry Pi 和适宜实现深度学习模型的最新代替计划之间进行抉择。大多数芯片上都有宽泛的 GPU 或 TPU 硬件。请留神,报价是从 2023 年 1 月开始的,即寰球芯片重大短缺之前的价格。GPU 速度以 TOPS 示意,代表 Tera Operations P er Second。当然,最高分将是当您应用 8 位整数时。大多数供应商给出这个 8 位分数。如果你想在 TFLOPS(Tera Floating Operations Per S econd)中有一个印象,请将数字除以四。尽管有些 GPU 不能解决单个 8 位,比方 Jetson Nano,但分数依然在 TOPS,只是出于比拟的起因。

单个微型(40×48 mm)可插拔模块,具备残缺的 I/O 和 Edge TPU 加速器。
转载来自:
https://rpideveloper.com/topic/20/2023
https://www.edatec.cn/cn/ WX:树莓派开发者

正文完
 0