【深度学习】树莓派Zero w深度学习模型Python推理

2023-11-09

在机器学习开发过程中,当模型训练好后,接下来就要进行模型推理了,根据部署环境可分为三类场景:

边缘计算:一般指手机,嵌入式设备,直接在数据生成的设备上进行推理,因为能避免将采集到的数据上传到云端,所以实时性非常好。

端计算:介于云和边缘设备之间的计算平台,个人PC可以归为这一类。

云计算:指云计算平台,具有强大的计算和存储能力,通过服务释放AI能力。

在之前跟大家分享的AI工具中,都是在PC上进行推理,也就是属于端设备推理。

基于深度学习的抠图工具
https://github.com/AIDajiangtang
基于深度学习的图像拼接工具
https://github.com/AIDajiangtang/Superpoint-LightGlue-Image-Stiching
基于大模型的分割工具
https://github.com/AIDajiangtang/Segment-Anything-CPP
https://github.com/AIDajiangtang/Segment-Anything-CSharp

今天,我将为大家演示如何在边缘设备上进行推理。

要准备毕业设计的小伙伴可以作为参考。

我选择的边缘设备是树莓派的Zero w开发板,硬件配置参数如下:

1GHz single-core CPU ARM11 ARMv6

512MB RAM

Mini HDMI® port

Micro USB OTG port

Micro USB power

HAT-compatible 40-pin header

Composite video and reset headers

CSI camera connector (v1.3 only)

这里多说一点,对于ARM芯片,要区分芯片系列与CPU架构。不同的CPU架构对应不同的指令集,如果涉及从源码编译需要考虑CPU架构。

ARM7:
时间点:ARM7系列处理器于1994年发布。
特点:ARM7系列处理器是ARM架构的早期版本,采用32位RISC架构,主要用于嵌入式系统和低功耗设备。它具有较低的功耗和成本,适用于资源受限的应用。
CPU架构:ARMv4T架构。

ARM9:
时间点:ARM9系列处理器于1997年发布。
特点:ARM9系列处理器也是基于32位RISC架构,用于多种应用,包括嵌入式系统、移动设备和数字音频。它具有较高的性能和灵活性,适用于中等功耗和性能需求的应用。
CPU架构:ARMv5TE架构。


ARM11:
时间点:ARM11系列处理器于2002年发布。
特点:ARM11系列处理器同样采用32位RISC架构,主要应用于移动设备和数字媒体领域。它具有更高的性能和计算能力,支持多媒体处理和浮点运算。
CPU架构:ARMv6架构。

ARM Cortex-A:
时间点:ARM Cortex-A系列处理器于2005年发布。
特点:Cortex-A系列面向高性能应用,用于智能手机、平板电脑、服务器和其他需要较高处理性能的设备。它具有更强大的处理能力、更高的频率和更复杂的功能。
CPU架构:基于ARMv7-A或ARMv8-A架构。

ARM Cortex-R:
时间点:ARM Cortex-R系列处理器于2004年发布。
特点:Cortex-R系列面向实时应用,用于嵌入式系统、汽车电子、工业控制等需要快速响应和可靠性的应用。它具有较低的延迟和更可靠的实时性能。
CPU架构:基于ARMv7-R或ARMv8-R架构。

ARM Cortex-M:
时间点:ARM Cortex-M系列处理器于2004年发布。
特点:Cortex-M系列面向低功耗嵌入式系统,用于微控制器、传感器、物联网设备等资源受限的应用。它具有较低的功耗、小尺寸和高效的实时性能。
CPU架构:基于ARMv6-M或ARMv7-M架构。

常见ARM芯片系列和架构

我们选择的Raspberry Zero w属于ARM11系列,ARMv6 CPU架构,支持wifi。

Raspberry Pi 1 Model A/B/A+/B+:
CPU系列:ARM11系列
CPU架构:ARMv6架构

Raspberry Pi 2 Model B:
CPU系列:ARM Cortex-A系列
CPU架构:ARMv7-A架构

Raspberry Pi 3 Model B/B+:
CPU系列:ARM Cortex-A系列
CPU架构:ARMv8-A架构

Raspberry Pi 4 Model B:
CPU系列:ARM Cortex-A系列
CPU架构:ARMv8-A架构

Raspberry Pi Zero/Zero W:
CPU系列:ARM11系列
CPU架构:ARMv6架构

Raspberry Pi Compute Module 3/3+:
CPU系列:ARM Cortex-A系列
CPU架构:ARMv8-A架构

Raspberry Pi Compute Module 4:
CPU系列:ARM Cortex-A系列
CPU架构:ARMv8-A架构

常见树莓派开发板CPU型号

由于本项目涉及到的软件比较多,我帮大家整理到一起了。

关注微信公众号:人工智能大讲堂,后台回复【rsb】获取模型和所有安装包。

开始吧。

准备硬件

除了开发板外,还需要USB电源,摄像头,miscro SD卡,以及读卡器。某宝上可以买到,然后按下图连接

在这里插入图片描述

准备推理框架

按理讲,硬件就绪后,接下来应该安装操作系统了,为什么要先说推理框架呢?也是出于无奈啊!

我选择的推理框架是tensorflow lite,但它对于ARMv6没有现成的pip安装包,也就是没办法通过下面的命令安装推理运行时。

python3 -m pip install tflite-runtime

有两种解决方法。

第一种是安装好树莓派操作系统后自己准备编译环境,然后从源码编译tensorflow lite whl安装包。

https://www.tensorflow.org/lite/guide/build_cmake_pip

第二种则是去网上找现成的针对ARM v6架构的安装包。

我选择了第二种。

开源的力量是强大的,我在Github上真就找到了一个针对ARM v6架构的whl安装包,虽然是完整的tensorflow安装包,但可以通过导出tensorflow lite来使用推理功能。

import tensorflow as tf
interpreter = tf.lite.Interpreter(model_path=args.model_file)

安装包下载连接

https://github.com/lhelontra/tensorflow-on-arm/releases/download/v2.4.0/tensorflow-2.4.0-cp37-none-linux_armv6l.whl

这里需要注意,该pip安装包是在python3.7环境下编译的,所以树莓派开发板也要安装自带python3.7的操作系统,这也是为什么先确定推理框架的原因。

准备操作系统

接下来就要找自带python3.7的树莓派操作系统。

除了python3.7外,另一个需要考虑的因素是内存,我们本次选择的Raspberry Zero w内存只有500M,为了运行效率,选择操作系统时建议选择不带桌面的Lite版本。

对于内存比较大的开发板,则可以选择带桌面的操作系统,甚至可以选择带预装各种软件环境的操作系统。

图片

幸好,我在Archive找到python3.7的操作系统。

操作系统下载链接

https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2021-05-28/

下载后保存到另一台电脑硬盘中等待使用。

接下来要通过树莓派自带的工具Raspberry pi Imager将操作系统烧录到miscro sd卡中。

将sd卡放入读卡器,插到另一台电脑USB接口上。

https://www.raspberrypi.com/software/

图片

启动刻录软件

图片

1.选择操作系统->使用自定义镜像

图片

2.选择SD卡

3.设置

3.1勾选设置主机名,输入主机名

3.2勾选开启SSH服务,选择使用密码登录

图片

3.3勾选设置操作系统用户名和密码,输入用户名和密码

3.4勾选配置WIFI,设置热点名和登录密码(可以用手机热点)

图片

4.烧录

烧录成功后,将miscro sd卡插到树莓派sd卡插槽上,连接电源就可以开机了。

远程连接树莓派

由于没有桌面环境,所以需要另一台电脑远程连接到树莓派上,此时Raspberry Zero w支持wifi就起到作用了,安装操作系统时我们会配置网络,树莓派启动后主动连接热点,另一台电脑也连接到同一个热点,就可以远程了。

通过手机热点查看树莓派IP地址。

另一台电脑连接同一个手机热点。

启动另一台电脑的Windows PowerShell。

输入ssh 树莓派用户名@树莓派IP

例如 ssh rsb@192.168.133.223,根据提示需要输入密码。

光有远程还不够,还需要能够在两个系统之间传输文件,推荐在另一台电脑中安装WinSCP。

启动WinSCP,输入树莓派主机名,用户名和密码。

图片

安装软件

安装tensorflow

wget https://github.com/lhelontra/tensorflow-on-arm/releases/download/v2.2.0/tensorflow-2.2.0-cp37-none-linux_armv6l.whl
sudo pip3 install tensorflow-2.2.0-cp37-none-linux_armv6l.whl

安装完成后通过下面命令查看是否安装成功

python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([100, 100])))"

如果报类似下面这样的错误

TypeError: Descriptors cannot not be created directly.
可以尝试通过下面命令解决

Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python

安装OpenCV

sudo apt-get -y install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get -y install libxvidcore-dev libx264-dev
sudo apt-get -y install qt4-dev-tools libatlas-base-dev
sudo apt-get install libgstreamer1.0-dev
sudo apt-get install libopenexr-dev
sudo apt-get install libilmbase-dev

根据环境的不同,可能有些已安装,可能还缺少其他安装包,根据情况安装。

pip3 install opencv-python==3.4.6.27

也可以把上面的版本去掉,安装最新版本。

开始推理

软硬件都准备好后,就可以开始进行推理了。

准备tflite模型

由于tensorflow lite仅支持tflite格式的模型,如果你使用其他框架训练的,需要转换成tflite格式。

由于我的目的是为了演示如何在嵌入式设备上运行推理,所以选择什么模型不重要。

我给大家准备了一个水果分类和检测的模型,关注微信公众号:人工智能大讲堂,后台回复【rsb】获取模型和前面所有安装包。

模型在model文件夹下,cls_model.tflite为分类模型,det_model.tflite为目标检测模型。

图片

分类模型类别标签

图片

目标检测模型类别标签

打开摄像头

树莓派开发板通过外接摄像头来拍摄图像。

sudo raspi-config

选择Interface Options—camera,选择yes,将摄像头权限开启,我们便可以使用树莓派进行摄像头拍照了。

在命令行执行如下命令测试,如果看到文件夹中新增了image.jpg文件,则代表配置成功。

raspistill -t 2000 -o image.jpg

开始推理

import tensorflow as tf
import numpy as np
import cv2



det = true//是分类还是目标检测

model_path="cls_model.tflite"
if det:
  model_path="det_model.tflite"

# 加载分类tflite文件
interpreter = tf.lite.Interpreter(model_path)
interpreter.allocate_tensors()
label_id_offset = 1


# Again, uncomment this decorator if you want to run inference eagerly
def detect(interpreter, input_tensor):
  """Run detection on an input image.

  Args:
    interpreter: tf.lite.Interpreter
    input_tensor: A [1, height, width, 3] Tensor of type tf.float32.
      Note that height and width can be anything since the image will be
      immediately resized according to the needs of the model within this
      function.

  Returns:
    A dict containing 3 Tensors (`detection_boxes`, `detection_classes`,
      and `detection_scores`).
  """
  input_details = interpreter.get_input_details()
  output_details = interpreter.get_output_details()

  # We use the original model for pre-processing, since the TFLite model doesn't
  # include pre-processing.
  preprocessed_image, shapes = detection_model.preprocess(input_tensor)
  interpreter.set_tensor(input_details[0]['index'], preprocessed_image.numpy())

  interpreter.invoke()

  boxes = interpreter.get_tensor(output_details[0]['index'])
  classes = interpreter.get_tensor(output_details[1]['index'])
  scores = interpreter.get_tensor(output_details[2]['index'])
  return boxes, classes, scores

# 定义摄像头
capture = cv2.VideoCapture(0)

while True:
    # 拍照并预处理照片
    ret, frame = capture.read()
    frame = cv2.flip(frame, 1)
    frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    
    if det:
      resized_image = cv2.resize(frame_rgb, (300, 300))
    else:
      resized_image = cv2.resize(frame_rgb, (224, 224))
      
    resized_image = resized_image .astype(np.float32)
    # 将像素值缩放到0-1范围
    resized_image /= 255.0
    # 将像素值缩放到-1到1范围
    resized_image = (resized_image - 0.5) * 2.0
        
    test = np.expand_dims(resized_image, axis=0)
    input_tensor = tf.convert_to_tensor(test, dtype=tf.float32)
    # 目标检测模型进行检测
    boxes, classes, scores = detect(interpreter, input_tensor)
    viz_utils.visualize_boxes_and_labels_on_image_array(
        test[0],
        boxes[0],
        classes[0].astype(np.uint32) + label_id_offset,
        scores[0],
        category_index,
        use_normalized_coordinates=True,
        min_score_thresh=0.8)
    # 呈现检测结果
    frame = cv2.cvtColor(test[0], cv2.COLOR_BGR2RGB)
    cv2.imshow("Object detector", frame)
    c = cv2.waitKey(20)
    # 如果按q键,则终止
    if c == 113:
        break
cv2.destroyAllWindows()

最终结果

图片

图片

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【深度学习】树莓派Zero w深度学习模型Python推理 的相关文章

  • 尽管极其懒惰,但如何在 Python 中模拟 IMAP 服务器?

    我很好奇是否有一种简单的方法来模拟 IMAP 服务器 例如imaplib模块 在Python中 without做很多工作 是否有预先存在的解决方案 理想情况下 我可以连接到现有的 IMAP 服务器 进行转储 并让模拟服务器在真实的邮箱 电子
  • 如何在刻度标签和轴之间添加空间

    我已成功增加刻度标签的字体 但现在它们距离轴太近了 我想在刻度标签和轴之间添加一点呼吸空间 如果您不想全局更改间距 通过编辑 rcParams 并且想要更简洁的方法 请尝试以下操作 ax tick params axis both whic
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例

随机推荐

  • FineReport.10 一(帆软)(报表基础练习)

    文章目录 一 FineReport 1 报表 2 安装 二 安装目录 2 1 设计器相关目录 2 2 工程相关文件夹 2 3 缓存文件 2 3 1 FineReportEnv xml 三 初始练习 四 遇见的问题记录 1 初始数据库出问题需
  • Python基础入门(五)——关于一个Number类型的小实例

    Number类型数据是我们在python当中经常要用到的数据类型 先上一些小知识点 再上实例 相关知识点 Number类型 Number类型 Number类型的定义和删除 一句话 赋值就是定义 删除要用DEL 定义 var1 1 var2
  • 大语言模型的演进

    大语言模型的演进 借着上次科技树剪枝的话题 大语言模型为人工智能科技树再次剪枝 让我们再来看看大语言模型这个分枝是如何生长的 也是经历6年的Google和OpenAI两家公司几次大战后的结果 第一回合 2017年6月 Google的6500
  • 从代码生成到问题解答,InsCode AI助你成为编程及写作高手

    目录 前言 InsCode AI写作助手 创造更好的写作体验 InsCode AI 创作助手 如何帮助创作者高效创作文章 结论 个人感受 一 你平时会使用这类AI工具吗 你对这类型的工具有什么看法 二 你可以花几分钟体验一下InsCode
  • 新的刷脸支付方式掘起手机支付将会終结

    手机支付将会終结 新的支付方式掘起 新的支付方式对很多人还是很陌生的 这就要很好的推广和布置 现在推出了二代的蜻蜓刷脸设备 向商户销售出了舒缓的二代蜻蜓刷脸支付设备 超市 快餐厅 自动贩卖机都已经实现商业直播 相信很快在每个城市 都会发现这
  • 重载new/delete(C++中的new/delete与operator new/operator delete)

    转 http blog csdn net zhangxiao93 article details 50768025 原文 http www cnblogs com luxiaoxun archive 2012 08 10 2631812 h
  • k8s的dashboard日常操作

    k8s的dashboard日常操作 一 k8s的dashboard介绍 1 dashboard介绍 2 dashboard的功能 集群管理 工作负载 服务发现和负载均衡 存储 配置 日志视图 三 查看集群的所有角色 四 查看集群的命令空间
  • Python数据结构-----递归实现快速排序

    目录 前言 快速排序 1 概念 2 示例 Python代码实现 递归实现快速排序 前言 今天我们就来一起学习快速排序的思想方法 然后通过Python语言来实现快速排序的功能 下面我们就开始今天的学习吧 快速排序 1 概念 快速排序其实是冒泡
  • 使用ggplot2包绘制分组带状图实战

    使用ggplot2包绘制分组带状图实战 在数据可视化中 分组带状图是一种常用的图表类型 可以直观地展示多个组别之间的差异和变化趋势 而R语言中的ggplot2包提供了丰富的绘图函数 其中geom jitter函数可以用来创建分组带状图 下面
  • SpringBoot + Websocket 实现实时聊天

    SpringBoot WebSocket 实现实时聊天 最近有点小时间 上个项目正好用到了websocket实现广播消息来着 现在来整理一下之前的一些代码 分享给大家 WebSocket协议是基于TCP的一种新的网络协议 它实现了浏览器与服
  • ctfshow-web10 with rollup 绕过

    0x00 前言 CTF 加解密合集 CTF Web合集 网络安全知识库 文中工具皆可关注 皓月当空w 公众号 发送关键字 工具 获取 0x01 题目 0x02 Write Up 基本方法 到处点一点 点到取消的时候 突然发现 可以下载一个文
  • C语言中signed和unsigned怎么理解?C语言unsigned long、long long 取值范围???

    C语言中signed和unsigned signed意思为有符号的 也就是第一个位代表正负 剩余的代表大小 例如 signed int 大小区间为 128 127 unsigned意思为无符号的 所有的位都为大小 没有负数 例如 unsig
  • java实现下载excel读取与生成超详细

    背景 没啥背景 就是要做这个功能 创建ExcelUtil工具类 具体导入导出方法如下 excel导入 param inputStream 导入的excel文件 return public static List
  • 酱香咖啡喝了没?用数据分析揭秘瑞幸咖啡的7500万用户增长策略

    瑞幸 X 茅台 这波联名赢麻了 不仅狂卖 542 万杯 甚至带动茅台市值飙升200亿 瑞幸这几年联名搞了不少 又是线条小狗的爱情故事 又是椰树 维密 周大福 足球的 下面老李就从数据分析角度 带大家来看一下近几年 瑞幸咖啡的用户增长策略 是
  • 数据结构笔记之链式栈的基本操作

    include stdio h include stdlib h include io h include math h include time h define OK 1 define ERROR 0 define TRUE 1 def
  • VMWare安装

    1 1 VMWare简介 VMWare是一个虚拟技术的合集 它提供了众多的相关软件 类似于Parallels VMWare是商业应用 而且价格非常的贵 所以 通常我们使用的是网上别人破解的版本 而不是使用官方的正版 VMWare官网 VMw
  • 【UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xd3 in position 0: invalid continuation byte】

    UnicodeDecodeError utf 8 codec can t decode byte 0xd3 in position 0 invalid continuation byte F jupyter work dir MMLAB m
  • 有一个公网IP,在内网如何架设多台服务器?

    进行内网ip到外网ip的映射 也就是pat 这个工作现在多半由防火墙来完成 不过如果没有防火墙 用路由器也可以完成 只不过会在高峰时加重路由器的负担 思科2600路由可以独立完成各种nat pat但是因为这款产品本身属于低端产品 所以能够担
  • Java8学习记录(一)——Lambda表达式

    这两天看了 Java8实战 做一下记录 目录 一 行为参数化 1 什么是行为参数化 二 函数式接口 1 概念 三 Lambda表达式 四 方法引用 注意点 1 静态方法引用 2 实例方法引用 重点来了 任意类型的实例方法引用 现有对象的实例
  • 【深度学习】树莓派Zero w深度学习模型Python推理

    在机器学习开发过程中 当模型训练好后 接下来就要进行模型推理了 根据部署环境可分为三类场景 边缘计算 一般指手机 嵌入式设备 直接在数据生成的设备上进行推理 因为能避免将采集到的数据上传到云端 所以实时性非常好 端计算 介于云和边缘设备之间