(B站TinyML 教程学习笔记)C19 - 使用手机测试推理功能 +C20 - 部署训练好的模型到 Arduino+C21 - 异常检测+C22 - 工业嵌入式机器学习演示+C23 - 第二模块复习
0:06) 模型测试Test Data部署模型前先用保留的测试集测试模型在 Edge Impulse 的模型测试页面全选测试样本点击“分类所选样本”如果预测错误会用红色高亮显示(0:31) 测试集准确率与过拟合如果动作每次都做得非常一致模型准确率可能接近 100%如果测试集准确率 训练集/验证集准确率则可能出现了过拟合Overfitting解决办法重新训练使用减少过拟合的方法正则化Dropout增加数据量数据增强等(0:54) 手机实时分类Live Classification进入实时分类页面步骤手机打开 SmartphoneAddToPulse 网站连接项目点击“开始采集”动作测试左右晃动上下移动画圈静止(1:23) 实时分类结果观察系统会显示原始加速度计数据各动作预测概率例如左右动作“左右”标签概率最高上下动作“上下”标签概率最高(1:54) 动作切换阶段的问题如果正在从左右动作切换到上下动作模型可能难以识别原因动作处于“过渡状态”不属于明确类别红色预测表示模型不确定(2:07) Arduino 也可实时分类除了手机连接到 Edge Impulse Daemon 的 Arduino 也能实时分类(2:19) 手机实时分类模式开启“切换到实时分类模式”流程手机采集 2 秒数据自动分类重复循环(2:53) WebAssembly 本地运行特点分类直接在手机本地运行使用JavaScriptWebAssembly不会再连接 Edge Impulse 服务器(3:03) WebAssembly 与 TensorFlow Lite可以下载训练模型打包成 WebAssembly也可以下载 TensorFlow Lite 模型直接在手机 App 中运行注意TensorFlow Lite 不包含特征提取代码需要自己编写特征提取部分Arduino Nano 33 BLE Sense 部署(4:16) 部署模型到 Arduino进入Deployment部署页面选择Arduino Library(4:49) EON Compiler默认TensorFlow Lite 模型以 FlatBuffer 形式运行EON Compiler将模型编译为 C 源码优点节省RAMFlash建议一般保持启用(5:30) Analyze分析Edge Impulse 会估算推理时间RAM 占用Flash 占用注意估算基于80MHz Cortex-M4F而 Arduino Nano 33 BLE Sense是 64MHz所以实际推理可能更慢(6:07) 量化Quantization建议使用量化模型优点更省 RAM更省 Flash缺点准确率略微下降(6:18) 生成 Arduino 库点击BuildEdge Impulse 会生成 Arduino ZIP 库注意不要解压 ZIP(6:47) Arduino 导入库Arduino IDE草图包含库添加 ZIP 库导入后会附带多个示例程序(7:00) 打开加速度计示例路径文件示例Edge Impulse 库Nano BLE 33 Sense AccelerometerArduino 示例代码结构(7:24) 代码内容代码主要包括导入库Edge Impulse 模型库加速度计库Setup()初始化串口初始化 IMU 加速度计Loop()执行采样保存到缓冲区转换 NumPy 信号数组RunClassifier()输出预测结果(8:31) Windows 长路径错误可能出现路径太长错误解决下载 Embed Platform Local TXT放入指定 Arduino 目录(9:16) 串口监视器测试上传后打开串口监视器测试动作左右上下圆周运动静止模型会输出各动作概率Model Metadata 信息(9:56) Model Metadata.h文件中包含标签顺序采样率参数信息(10:14) 采样率差异手机62.5HzArduino100Hz因此Arduino 每轴样本更多(10:38) 标签数组顺序标签顺序很重要例如左右标签可能索引为 2连续推理Continuous Inference(10:46) 加速度计连续演示特点使用多线程后台持续推理(11:16) 推理线程线程功能复制缓冲区转 NumPy 数组运行分类器每约 200ms 执行一次(11:46) 平滑Smoothing作用多次预测求平均提高稳定性因此动作需持续几秒钟(12:06) 主循环线程功能缓冲区滚动删除旧数据添加新数据保持 100Hz 采样(12:27) DSP 时间DSP 时间特征提取耗时Inference 时间模型推理耗时(13:11) 不确定性如果动作不规则动作在过渡中则不确定性上升异常检测Anomaly Detection(14:27) 异常检测简介作用判断系统是否异常可使用有监督学习无监督学习(14:47) 信用卡欺诈案例思想正常数据形成“分布区域”新数据超出边界判定为异常(16:17) 工业预测维护应用电机压缩机航天设备目标提前发现故障(17:18) 手机异常检测实验训练左右动作测试前后动作未训练结果分类器会误分类但光谱特征显示它形成了新的“簇”K-Means 异常检测(18:21) 添加异常检测模块在 Pulse Design 中添加 K-Means Anomaly Detection(18:37) K-Means属于无监督学习没有标签作用找数据簇Cluster(19:18) 异常分数每个样本会得到异常分数规则0.3认为异常(19:32) RMS 特征建议使用X RMSY RMSZ RMS因为分离效果最好(20:01) 实时异常检测输出新增Anomaly异常值含义数值越大越异常Arduino 异常检测(20:34) 单片机部署异常检测步骤添加 K-Means 模块重新训练下载新 Arduino 库导入 Arduino IDE(21:28) 异常检测代码变化新增Result.anomaly用途判断动作是否异常阈值0.3(22:17) 测试未训练动作例如前后运动现象分类器会尝试分类但异常分数会很高工业案例智能托盘(23:24) 工业嵌入式 ML应用物流工业自动化资产跟踪(24:02) 智能托盘项目使用单片机三轴加速度计识别静止移动升降(25:23) 信号处理与分类通过特征处理三种状态明显可分模型准确率约 95%(26:12) 实际意义企业可以知道托盘移动多久静止多久升降多久从而优化物流效率(27:05) 嵌入式 ML 的优势无需保存全部原始数据只记录状态变化优点节省存储降低功耗降低传输需求本章节总结(27:42) 神经网络回顾学习内容神经网络工作原理分类输出概率反向传播损失函数(28:46) 训练现象训练过程中Loss 下降Accuracy 提高(29:05) 混淆矩阵与指标指标包括AccuracyPrecisionRecallF1 Score(29:25) 欠拟合与过拟合学习如何发现如何解决(29:35) Edge Impulse 部署Edge Impulse 会自动封装模型库方便单片机部署(29:53) 单片机推理流程流程读取原始传感器数据提取特征模型推理输出分类结果