TinyML构建卷积神经网络(CNN)模型声控Arduino机器车

2023-11-16

本教程介绍了如何将机器学习与 Arduino 结合使用。在微控制器上运行由TinyML构建的机器学习语音识别模型,控制Arduino机器车运行。

要构建这个项目,至少有两个步骤:

  • 训练一个新的机器学习模型并使其适应在 Arduino 上运行

  • 使用上一步训练的 Tensorflow Lite 构建汽车

您可能已经知道,我们无法在 Arduino 上直接运行 Tensorflow 模型,因为该设备资源有限。 因此,在训练模型后,有必要缩小它的大小。 我们将逐步描述如何构建模型,然后如何以与 Arduino 兼容的方式对其进行转换。

构建TinyML模型

如前所述,该项目使用了本教程中已经完成的工作。您可能已经知道,构建在 Arduino 上运行的机器学习模型需要遵循几个步骤。下面是此步骤的列表:

  • 定义要使用的模型

  • 训练模型

  • 冻结模型

  • 量化模型

  • 转换成与Arduino兼容的Tensorflow模型

TinyML介绍

为了使用 Arduino 识别语音命令,我们需要一个使用 CNN 的 Tensorflow 模型。 第一步是获取语音并对其应用 FFT(快速傅立叶变换)。 使用快速傅立叶变换提取的数据将提供给 CNN。 识别命令的问题是一个分类问题。

训练模型

  • 一开始需要指定我们要识别的命令或单词。这些是标签。在这个例子中,由于我们想使用语音命令控制汽车,我们将实现 4 个不同的命令:

    • go

    • stop

    • left

    • right

  • 接下来需要安装 Tensorflow。您会注意到它不会安装最新版本。此版本将创建与 Arduino 兼容的 Tensorflow 模型

  • 之后,需要克隆 TensorFlow 存储库。我们将使用它来运行训练过程

  • 最后,运行模型。 要运行模型,需要提供一些参数。 我建议你不要改变它们。 训练过程大约需要 2 个小时,所以请放轻松。 无论如何,您可以通过更改 TRAINING_STEPS 使其减短时间。 更改此值时要小心,因为它会使模型不太准确。

冻结模型

训练任务完成后,需要冻结模型。在这一步之后,我们就不能再修改 Tensorflow 模型了。这将是我们将在接下来的步骤中使用的模型,为 Arduino 创建一个 Tensorflow 模型。

创建微控制器Tensorflow模型
如何在 Arduino 中使用 Tensorflow 模型
导入模型
调整模型标签
模型控制电机
测试模型和通讯模块
调整

源代码

详情参阅 - 亚图跨际

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

TinyML构建卷积神经网络(CNN)模型声控Arduino机器车 的相关文章

  • AI在广告中的应用——预测性定位和调整

    营销人员的工作就是在恰当的时间将适合的产品呈现在消费者面前 从而增加他们购买的可能性 随着时间的推移 营销人员能够深入挖掘越来越精准的客户细分市场 他们不仅具备了实现上述目标的能力 而且这种能力还在呈指数级提升 在AI技术帮助下 现在的营销
  • 3D点云检测神技 | UFO来了!让PointPillars、PV-RCNN统统涨点!

    作者 AI驾驶员 编辑 智驾实验室 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 3D目标检测 技术交流群 本文只做学术分享 如有侵权 联系删文 在这篇论文中提出了一个关于在3D点云中检测未
  • 史上最全自动驾驶岗位介绍

    作者 自动驾驶转型者 编辑 汽车人 原文链接 https zhuanlan zhihu com p 353480028 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 求职交流 技术交流群 本
  • 5_机械臂运动学基础_矩阵

    上次说的向量空间是为矩阵服务的 1 学科回顾 从科技实践中来的数学问题无非分为两类 一类是线性问题 一类是非线性问题 线性问题是研究最久 理论最完善的 而非线性问题则可以在一定基础上转化为线性问题求解 线性变换 数域 F 上线性空间V中的变
  • 自动驾驶离不开的仿真!Carla-Autoware联合仿真全栈教程

    随着自动驾驶技术的不断发展 研发技术人员开始面对一系列复杂挑战 特别是在确保系统安全性 处理复杂交通场景以及优化算法性能等方面 这些挑战中 尤其突出的是所谓的 长尾问题 即那些在实际道路测试中难以遇到的罕见或异常驾驶情况 这些问题暴露了实车
  • Fedora 中的 Arduino 上传错误“stk500_recv(): 程序员没有响应”

    我正在尝试上传库存Blink在 Fedora Core 15 Linux 中使用 Arduino IDE 绘制草图 我收到此错误 avrdude stk500 recv 程序员没有响应 要重现该问题 通过 USB 线插入 Arduino U
  • Android 和 Arduino 都通过蓝牙接收奇怪的值

    我正在 Android 端使用 BluetoothChat 代码使用聊天框向 Arduino UNO 发送开 关信号 我发送 110 119 或下面定义的其他情况 但是当我显示接收到的值时 它显示奇怪的Arduino 串行监视器中的值 即
  • 如何将值从 Arduino 发送到 Python,然后使用该值

    我正在构建一个使用 Python 进行远程控制的机器人 通过简单的 GUI 通过互联网发送控制消息 我的部分代码 GUI 和控制系统 运行得很好 但我陷入了困境 我正在尝试使用视差平传感器来获取与物体的距离信息Arduino Mega ht
  • C-如何使用PROGMEM存储和读取char数组

    我有三个字符数组 我不希望 Arduino 将它们存储在SRAM http en wikipedia org wiki Static random access memory 所以我想使用PROGMEM来存储和读入flash http en
  • 终止导致设备或资源繁忙的进程:“/dev/ttyUSB0”?

    我使用以下 Python 代码连接到我的 Arduino 板 device glob glob dev ttyUSB 0 time sleep 1 arduino serial Serial device 115200 timeout 5
  • 是否有通用 I2C 命令来查看设备是否仍然存在于总线上?

    是否有通用的 I2C 命令来查看设备在初始化一次后是否仍然存在于总线上 例如 OLED 显示器 我问这个的原因是为了避免主程序由于库代码中存在无限循环而冻结 当设备断开连接时 例如 Wire 库 在 MCU 启动时 我想检查设备是否可用 并
  • C#读取Arduino

    我正在尝试制作一个从 Arduino 读取传出信号的应用程序 但我无法使其在 C 中工作Windows 窗体 http en wikipedia org wiki Windows Forms 仅在控制台中 我的 C Windows 窗体代码
  • 使用 Java 控制 Arduino

    我正在寻找一个LED http en wikipedia org wiki Light emitting diode用Java程序打开和关闭 我用 C 完成了这个项目大约 5 分钟 但用 Java 似乎更具挑战性 我让 Arduino 等待
  • 从 iBeacon 接收 BLE 信号到 Bluno(arduino with BLE)

    我想从 iBeacon 到 Bluno 接收 rssi 信号和 UUID Arduino 板具有 BLE 对此有一些疑问 有没有从 BLE 到 BLE 接收 UUID 和 rssi 的解决方案 两个BLE设备可以互相通信吗 我想找一些网站来
  • 编译器:如果条件始终为真/假怎么办

    我想到了条件和编译器 我正在为 Arduino 编写一个应用程序 因此我需要该应用程序尽可能快 在我的代码中我有这个 define DEBUG false if DEBUG String pinName pinName Pin pinNam
  • Arduino串口数据解析

    我正在编写一个应用程序 通过蓝牙用我的 Android 手机控制我的机器人 一切都很顺利 数据得到回显和验证 但我在协议方面遇到了一些问题 特别是我希望我的机器人的轮子在我发送时转动一个命令 例如s 10 100 or s 30 10 数值
  • Arduino C++ 代码:可以使用虚函数和异常吗?

    跟进这条评论 https stackoverflow com questions 452139 writing firmware assembly or high level 452401从问题中编写固件 汇编还是高级 https stac
  • Python串口通信

    我正在开发一个 Arduino 项目 由于内存限制 我将其与 Python 脚本连接起来 在Python方面 我有一个二维矩阵 其中包含各自的x y坐标值 并且在此列表中有26000个坐标对 因此 为了向大家澄清数据结构 pathlist
  • 使用 Arduino 来操作 Android [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有人尝试过让 Android 和 Arduino 相互通信吗 我在网上找到了几个项目 Amarino http www amarino tool
  • 仅从日期计算夏令时

    我正在使用 Arduino 和实时时钟芯片 该芯片补偿了闰年等 因此它始终具有正确的日期 但我认为由于区域复杂性 它不处理夏令时 时钟可以给出日 月 年 从 1 开始 以及星期几 星期日 0 到星期六 6 因为我需要与用户输入的日期和时间进

随机推荐

  • 用Python搭建http文件下载服务器

    写这篇主要是为了Assetbundle 二 热更新方案设计 中涉及的下载服务器搭建 Python功能能强大 用起来也很方便 我们在做资源更新模块时 需要搭建一个http文件下载服务器 用于模拟从外网下载Assetbundle等 有很多种方法
  • nginx配置多个server

    nginx配置多个server server listen 80 server name localhost root C Users Administrator Desktop dist location try files uri in
  • Android 9.0修改recovery 菜单项字体大小

    1 前言 在Android9 0rom定制化开发中 在原生系统中 对于recovery模块这部分也是相当重要的部分 所以当进入recovery模式后 界面会g menu actions 菜单选项和 提示文字 而这些文字的 大小不像上层一样是
  • E: Unmet dependencies. Try ‘apt --fix-broken install‘ with no packages (or specify a solution).

    ubuntu 安装 dos2unix的时候提示 出错 apt install dos2unix Reading package lists Done Building dependency tree Reading state inform
  • vue仿淘宝购物车的实现

    先看效果图 实现的功能有 1 选中店铺 店铺下的商品全选中 2 店铺下的商品全选中 相对应的店铺也会被选中 3 所有的店铺全选中 底部的全选也会被选中 4 所有的商品全选中 底部的全选也会被选中 5 底部的全选选中 所有的店铺和商品都会被选
  • 【VUE】npm打包报错 Syntax Error: Error: Cannot find module ‘imagemin-gifsicle‘

    一 Syntax Error Error Cannot find module imagemin gifsicle npm run build 报错 报错如下 原因 这个错误消息显示缺少了 imagemin gifsicle 模块 而它是
  • 聚类算法——最大最小距离算法(python实现)

    每篇一句 You re gonna have to face your fear sooner or later 冰河世纪 最大最小距离算法 最大最小距离算法也成为小中取大距离算法 这种方法首先根据确定的距离阈值寻找聚类中心 然后根据最近邻
  • 获取和分析Dump的几种工具简介

    最近在进一步学习support技能的时候 了解到分析Dump的重要性 经过学习 做一些笔记 一 什么是Dump文件 Dump文件时进程的内存镜像 可以把程序的执行状态保存到Dump文件中 Dump文件分为内核模式Dump和用户模式Dump
  • SQL-labs的第26a关——空格和注释被过滤 延时盲注(Get)

    注意该关的or和and也被过滤了 1 判断闭合方式 输入语句 id 1 返回页面如下 我们猜测闭合符号是 再进行验证 输入语句 id 1 00 返回页面如下 依然报错 说明闭合符号除了 之外还有其他的符号 我们输入 id 1 00 返回页面
  • pgsql:远程连接时出现报错“发生致命错误:没有用于主机“…”,用户“…”,数据库“…”,SSL关闭的pg_hba.conf记录“,或者英文乱码

    问题 在用Navicat Premium远程连接pgsql时出现报错 发生致命错误 没有用于主机 用户 数据库 SSL关闭的pg hba conf记录 或者英文乱码 其实是与上述是同一个意思 解决方案 按提示找到pg安装目录下的 data
  • springboot 整合 redis

    springboot 整合 redis 1 导入依赖
  • {CTFshow} 萌新web1 详解

    练习ctf当然不止一个平台啦 所以我打算也写一写ctfshow的题目 好家伙 直接明了 就是让我审计代码 看完发现 我们要用get方式提交 flag在id 1000 但是直接提交id 1000会返回错误 所以我们需要再添加一个id用来防止被
  • springboot 访问远程服务器文件,springboot使用JSch远程读取sshd服务器上的文件

    JSch 是SSH2的一个纯Java实现 它允许你连接到一个sshd 服务器 使用端口转发 X11转发 文件传输等等 你可以将它的功能集成到你自己的 程序中 同时该项目也提供一个J2ME版本用来在手机上直连SSHD服务器 实现一个java工
  • 前后端分离ajax接收文件流的实践

    一般ajax post请求不能实现的原因 开始的想法 在页面上用jQuery的 post方法发送一个请求给服务器 然后服务器根据这个参数再生成相应的一个文件流返回给客户端 但是 在 post方法的回调函数中 只能处理xml json scr
  • 手机android端安装配置cpolar内网穿透

    cpolar作为一款强大的内网穿透工具 能够在不同操作系统平台中得到应用 真正打通了不同操作系统之间的围墙 让我们能方便的从一个操作平台中 读取到另一个操作平台中的数据 甚至对另一操作平台中运行的程序进行调试 今天 我们就为大家介绍 如何在
  • .Net Core缓存及问题规避

    目录 一 什么是缓存 二 客户端响应缓存 三 服务器端响应缓存 四 内存缓存 五 缓存穿透问题的规避 六 缓存雪崩问题的规避 七 缓存数据混乱的规避 八 分布式缓存 九 缓存方式的选择 一 什么是缓存 缓存是系统优化中简单又以有效的工具 只
  • 【C语言】小知识点

    Hello 各位小伙伴们 大家好啊 又和大家见面了 本期我会讲一点C语言的一些小知识点 希望大家可以学到有用的知识点哦 文章目录 Hello 各位小伙伴们 大家好啊 又和大家见面了 本期我会讲一点C语言的一些小知识点 希望大家可以学到有用的
  • "VT-x is disabled in BIOS"的解决办法

    当创建模拟器的时候发生了如下图的问题 解决办法 1 重启电脑 2 按F2进入BIOS 3 找到 Intel Virtual Technology 他这时会显示disable 按Enter把他改成enable即可 当时我在网页上寻找帮助时 好
  • 【华为OD机试真题】最左侧冗余覆盖子串(C++&java&python)100%通过率 超详细代码注释 代码优化

    华为OD机试真题 2022 2023 真题目录 点这里 华为OD机试真题 信号发射和接收 试读 点这里 华为OD机试真题 租车骑绿道 试读 点这里 最左侧冗余覆盖子串 知识点滑窗 时间限制 1s 空间限制 256MB 限定语言 不限 题目描
  • TinyML构建卷积神经网络(CNN)模型声控Arduino机器车

    本教程介绍了如何将机器学习与 Arduino 结合使用 在微控制器上运行由TinyML构建的机器学习语音识别模型 控制Arduino机器车运行 要构建这个项目 至少有两个步骤 训练一个新的机器学习模型并使其适应在 Arduino 上运行 使