0:06 - 1:00 为什么使用 Edge Impulse
常见机器学习开发方式
传统机器学习通常会使用:
- TensorFlow
- Scikit-learn
这些框架功能强大,但:
- 学习成本高
- 需要写大量代码
- 对嵌入式开发者不太友好
Edge Impulse 的作用
Edge Impulse
核心特点:
- 图形化界面
- 不需要深入学习AI框架
- 自动完成训练流程
- 适合嵌入式AI/TinyML
- 可以快速部署到单片机
核心思想:
“让嵌入式工程师不用精通AI框架,也能做机器学习项目”
1:01 - 1:58 Edge Impulse 项目流程
创建项目流程
进入平台后:
- 创建项目
- 给项目命名
- 打开项目
Edge Impulse 的完整机器学习流程
左侧面板展示整个AI流程:
数据采集 ↓ Impulse(机器学习流水线) ↓ 训练模型 ↓ 部署到嵌入式设备这里的 Impulse:
可以理解为:
“数据处理 + 特征提取 + AI模型”的组合流程
1:31 - 2:04 API Key 与数据上传
API Key
作用:
- 连接手机
- 连接单片机
- 上传数据
- 实时测试
HMAC Key
用于:
- 自动上传数据
- 脚本化数据采集
- 自动训练流程
适合:
- 自动化AI训练
- 批量数据采集
2:04 - 3:00 Edge Impulse 支持的数据上传方式
方法1:直接上传文件
支持:
- 音频
- 图像
- JSON
- CSV
- 原始传感器数据
方法2:命令行工具上传
适合:
- 自动化
- 脚本上传
方法3:开发板实时上传
例如:
- Arduino Nano 33 BLE Sense
可以实时上传:
- 加速度计
- 陀螺仪
- 麦克风
- IMU数据
方法4:手机上传
手机可以作为:
- 传感器设备
- AI测试设备
非常适合入门实验。
3:06 - 3:23 手机连接 Edge Impulse
流程:
设备页面 ↓ 连接新设备 ↓ 显示二维码 ↓ 手机扫码 ↓ 连接成功连接后:
手机会出现在设备列表中。
3:29 - 6:33 Arduino Nano 连接流程
进入 Bootloader 模式
方法:
快速按两次 Reset 键。
现象:
黄色LED闪烁。
3:55 - 5:00 安装开发环境
需要安装:
1. Node.js
Node.js
作用:
运行 Edge Impulse CLI 工具。
2. Arduino CLI
Arduino CLI
作用:
命令行管理Arduino。
5:01 - 5:14 安装 Edge Impulse CLI
命令:
npm install -g edge-impulse-cli作用:
安装:
- edge-impulse-daemon
- 数据上传工具
- 设备连接工具
5:14 - 5:42 烧录 Edge Impulse 固件
流程:
下载固件 ↓ 解压 ↓ 运行脚本 ↓ 自动烧录烧录完成后:
按一次 Reset 重启开发板。
5:47 - 6:33 连接开发板到云端
命令:
edge-impulse-daemon功能:
- 登录账户
- 选择COM口
- 选择项目
- 上传数据
6:54 - 8:59 手势识别项目
项目目标
制作“魔法棒”手势识别:
识别:
- 左右挥动
- 上下挥动
- 画圆
7:15 - 8:24 为什么训练和部署必须用同类传感器
核心原则:
训练用什么传感器,部署最好也用什么传感器。
原因:
不同IMU:
- 精度不同
- 噪声不同
- 灵敏度不同
否则:
模型可能失效。
7:49 - 8:06 FFT 为什么重要
这里第一次提到:
傅里叶变换(FFT)
作用:
把:
时域信号转换成:
频域信号用于提取:
- 振动频率
- 周期特征
- 动作节奏
这是 TinyML 中非常重要的特征提取方法。
8:59 - 11:16 数据采集流程
四个类别
需要采集:
| 类别 | 动作 |
|---|---|
| left-right | 左右 |
| up-down | 上下 |
| circle | 画圆 |
| idle | 静止 |
9:10 - 11:16 数据采集要求
每类约200秒数据
因为:
每次采样10秒。
所以:
200秒 ÷ 10秒 ≈ 20个样本采集时的重要原则
保持一致性
包括:
- 握持方式
- 动作速度
- 动作频率
否则:
模型会变难训练。
数据质量非常重要
如果图像:
- 不规律
- 没有重复模式
- 噪声太大
就应该:
删除重新采集。
12:43 - 14:33 数据集划分
机器学习通常分:
| 数据集 | 作用 |
|---|---|
| Training | 训练模型 |
| Validation | 调参 |
| Test | 最终考试 |
推荐比例
| 类型 | 比例 |
|---|---|
| Train | 60~80% |
| Validation | 10~20% |
| Test | 10~20% |
13:08 - 13:42 验证集的作用
验证集用于:验证模型训练的结果好坏
如果模型在验证集上表现不好,就调整超参数:
- 学习率
- 网络大小
- Epoch数量等等
13:42 - 14:19 为什么测试集不能提前使用
因为:
如果一直根据测试集调参:
模型会:
“偷偷记住测试集”
导致:
测试结果失真。
14:52 - 17:47 数据集代表性问题(极其重要)
这是机器学习最核心的问题之一。
贵宾犬例子
如果训练集:
全是贵宾犬。
模型可能学到:
- 卷毛
- 垂耳
而不是:
“狗”的本质特征。
本质问题
模型不会真正“理解”。
它只是:
找统计规律。
16:47 - 17:47 糟糕数据集案例
问题:
1. 背景统一
模型会误认为:
黑背景 = 狗。
2. 全是狗头
导致:
看见全身狗反而不会识别。
3. 没有卡通图
模型无法泛化到:
- 插画
- 动画
- 卡通
17:35 经典原则
垃圾进 垃圾出 (Garbage In, Garbage Out)数据差:
模型一定差。
17:59 - 20:40 数据不平衡问题
例子
99% 空地
1% 有狗
模型最终会:
永远预测“空地”准确率还能有99%。
这叫:
朴素分类器(Naive Classifier)
特点:
- 什么都预测成最大类别
- 准确率虚高
- 实际没用
19:19 - 19:49 解决方法
方法1:更多数据
永远有效。
方法2:平衡数据集
例如:
四分类:
每类约25%20:40 - 21:47 Edge Impulse 自动平衡数据集
按钮:
Rebalance Dataset自动:
- 80% Train
- 20% Test
22:06 - 23:52 什么是特征(Feature)
定义
Feature:
可测量的属性。
例如:
加速度计:
X Y Z就是3个特征。
23:52 - 24:20 为什么单时刻数据是坏特征
因为:
动作本质是:
随时间变化。
单一时间点:
无法反映动作过程。
25:15 - 25:41 时间窗口思想(非常重要)
解决方案:
使用:
时间窗口(Window)
例如:
2秒数据。
25:24 - 25:41 本项目的数据规模
采样率:
62.5Hz2秒:
62.5×2=125
每轴:
125个点。
3轴:
125×3=375
总输入:
375维。
25:48 - 27:53 深度学习的缺点
虽然神经网络可以:
自动学习特征。
但代价:
- 算力大
- 内存大
- 数据量需求大
- 推理慢
对于嵌入式:
压力非常大。
27:53 - 28:56 手工特征提取
RMS(均方根)
对125个点:
提取一个统计值。
优点:
- 降低维度
- 保留整体特征
- 减少计算量
28:58 - 29:57 FFT 特征提取
FFT 的本质
把:
时间变化转换成:
频率成分为什么FFT适合动作识别
因为:
动作具有频率。
例如:
左右挥动:
大约1Hz。
FFT后:
会在1Hz出现峰值。
本节核心总结
Edge Impulse 是什么
一个:
面向嵌入式AI/TinyML的低代码机器学习平台。
本节最重要的几个概念
| 概念 | 核心 |
|---|---|
| Feature | 特征 |
| Dataset | 数据集 |
| Train/Validation/Test | 数据划分 |
| FFT | 频域特征 |
| Overfitting | 过拟合 |
| Data Balance | 数据平衡 |
| Time Window | 时间窗口 |
| TinyML | 小型嵌入式AI |
你现在应该真正理解的重点
AI项目真正最重要的东西
不是模型。
而是:
数据质量 + 特征提取很多时候:
- 数据集决定上限
- 特征工程决定效果
- 模型只是最后一步
这其实是很多AI初学者最容易忽略的地方。