本实验将为您介绍如何在e2 studio中使用Reality AI相关组件来进行AI开发,主要涉及如何使用Reality AI Data shipper/collector,Reality AI Data Storage Tool等工具来采集,存储数据文件,同时将数据文件上传到Reality AI portal中进行模型训练与生成,代码部署与调试。
本实验基于3轴加速度传感器的X,Y,Z,3轴加速度在不同动作下的变化,使用Reality AI tools训练并生成模型,来识别不同的动作。开发流程简单,快捷易用。
掌握Reality AI Data shipper/collector的基本使用方法
-
FPB-RA6E2开发板及其配件
-
ICM-42670-P模块
-
FSP 5.4.0
-
e2 studio 2024-04及以上
-
Reality AI Tools账号
安装和准备
本节要点
本节学习如何搭建实验以及如何将套件连接至电脑端。
步骤
1.1
首先确保已安装所有实验工具。
e2stduio 2024-04及以上版本:https://github.com/renesas/fsp/releases/download/v5.4.0/setup_fsp_v5_4_0_e2s_v2024-04.exe
JLink RTT-Viewer V7.96g及以上版本:https://www.segger.com/downloads/jlink/
1.2
-
Micro USB数据线1根
-
FPB-RA6E2 1块



1.3

用Micro USB线,一端接入FPB-RA6E2板Micro USB端口,另一端接入PC USB接口。
1.4
打开PC设备管理器,在端口(COM和LPT)中会显示“Jlink CDC UART Port(COMxx)”,表示PC已经识别到FPB-RA6E2板上的JLink CDC UART。在通用总线设备中会显示“BULK interface”(这个不是必要的,有些版本的windows不会显示这个信息)。
注意:中文版本的Windows显示信息会略有不同,会显示通信端口(COMxx)或者串行端口(COMxx)。

1.5
使用已经申请到的Reality AI Tools账号登录Reality AI Tools网站(您可点击下方链接查看)。账号申请需要联系Renesas代理商或者Renesas销售。
Reality AI Tools网站:https://portal.reality.ai/login


保持浏览器页面如上图所示。
数据采集
本节要点
本节学习e2 studio中Reality AI组件的使用。工程代码请访问以下地址(您可点击下方链接查看)(需登录后下载):
工程代码:https://gitee.com/recn-mcu-ae/fpbra6e2amrtraining
步骤
2.1

2.2
选择General->existing Projects into Workspace,运行“Next”。

2.3
导入FPBRA6E2_AMR_training工程文件按照下图所示,然后运行“Next”。

2.4
返回到Reality AI Tools网页界面,创建一个新的项目“Asset Tracking”。
Name填写Asset Tracking。
Description主要是用来描述项目简略情况的,可以不填,或者按照自己的需要填写。

2.5
单击网页右上角的用户名,选择“Api Key”。

2.6
单击下面的“Generate New API Key”后,再单击右侧的Copy按钮复制显示的“API Key”。

2.7
点击e2 studio中的Renesas AI->Reality AI Authentication。

粘贴上一步复制的API Key,并运行“Apply and Close”。

2.8
点击“Test Connection…”,进行连接测试。

如果显示下面界面,表示e2 Studio已经成功连接到Reality AI Tools。

2.9
点击e2 studio中的Renesas AI->Show View->Reality AI Data Storage Tool。

2.10
将项目切换到FPBRA6E2_AMR_training,再点击“Data connection…”。

COM port选择1.4步骤中的Jlink CDC UART Port,波特率选择115200,其他配置参考下图显示。
点击“Connect”。然后再点击“Close”。

2.11


2.12


2.13
如果你遇到下面所示弹出的窗口,勾选“Remember my decision”,并点击“Switch”。

2.14


2.15
点击Reality AI Data Storage Tool视图中的Data file setting…。
这里可以设置

2.16
点击Reality AI Data Storage Tool视图,可以看到三种实时运行的波形图。

注意:如果波形没有出现或者波形图不动,点击红色框中的File review,再点击Live view。如果还是没有波形图出现,检查上述步骤中的JLink CDC UART是否连接正常。
2.17
在Class name中输入当前的数据标签normal/shake/drop,生成的数据文件会以标签名为前缀名,并加上采集的data collector的ID号和时间戳。
如:drop_id0_20240813222558879.csv,表示该数据文件是drop类别的数据,它是由data collector0在2024年8月13日22点25分58秒879毫秒采集的。

本实验一共需要采集3类数据,normal(正常)、shake(摇晃)、drop(跌落)。每类数据采集1分钟左右即可。
注意:尽量做到每类数据采集的时间相同,这样可以确保接下来的训练数据处于平衡的状态。
normal是板子处于静止的状态下采集的数据。
-
shake是拿着板子左右摇晃,前后摇晃或者移动板子的状态下采集的数据。
-
drop是拿着板子离桌面10cm左右,自由落体跌落的状态下采集的数据。(建议在泡沫或者软材质垫子上进行,避免板子损坏)。
点击“Start new capture”,开始进行数据采集。点击“Stop capture”停止采集。

2.18
选择已经采集的数据文件,点击右下角的upload…按钮,上传数据到Reality AI Tools中。

2.19
在弹出的窗口中选择“Asset Tracking”,并输入采样率1600。点击OK,等待数据上传。

数据上传完成后,会有如下提示窗口弹出。同时,文件列表中的Status显示为Uploaded。

2.20

创建模型与部署
本节要点
在第二步采集到的数据基础之上,用Reality AI Tools创建模型。
步骤
3.1
点击Asset Tracking,激活此项目。

点击Curate。
点击数据文件展开按钮。
勾选数据文件。
点击Action。
点击Format Selected。

3.2
-
点击#1 Data,并下拉到最下面,选择Ignore。(注意:这一步非常重要)。
-
输入采样率1600。
-
点击Confirm。

3.3
点击Action->Segment List From Selected,进行数据分段。

3.4
-
Window Length Datapoints选择512。
-
Offset Datapoints选择50%。
-
List名称为amr_512_50_percent_overlap。
-
点击Submit。

-
Sample 1和2之间有50%重叠。
-
Sample 2和3之间有50%重叠。

3.5
在e2 studio中的configuration.xml中的stack部分Properties页面中Data Shipper/Data Collector/General/Frame Buffer Length,可以设置MCU采集数据时的滑动窗口大小。
本实验滑动窗口的设置是512。

3.6
当数据分段完成后,点击左侧AI Explore->Classes。

3.7
点击先前创建的amr_512_50_percent_overlap。再点击界面下部的Start exploring。

此时,模型正在生成中。模型生成的过程中,允许退出系统或者进行其他操作。这些操作并不会中断或者影响模型生成。

3.8
大概等待10~25分钟左右后,模型生成完成,模型生成时长与训练数据大小有关。
如何选择适合自己的模型呢?主要关注Complexity和KFold Accuracy两个指标。
点击Complexity列的三角图标,它显示当前模型的相关参数。
X Operations表示模型运行中的MAC(乘累加)操作数量。
注意:上述的RAM和FLASH的数值,是以云端服务器硬件平台为基准显示的,仅供参考。部署到实际项目中的MCU/MPU平台中的RAM和FLASH的数值,可能会与这个不同。
KFold Accuracy表示K折交叉验证的模型精度。交叉验证的基本思想是将原始数据集分成多个部分,一部分当作训练集,另一部分作为验证集。先用训练集对算法模型进行训练,再用验证集测试训练得到的算法模型,反复利用这些部分进行模型的训练和验证。Overall %表示本模型的整体精度,数值越高越好,Worst %表示本模型的最差精度,数值越高越好。

点击图中“Create Base Tool”,来生成嵌入式端的模型。

注意:Reality AI Tools会生成许多模型,点击右下角的” Show more results” 可以看到被折叠隐藏的更多模型。
3.9
使用默认的名称,或者输入模型名称和描述。点击“Add”。

3.10

3.11
输入DeployName,这个名字就是待会生成的API的前缀。在Inputs中的Data type中选择float32(float)。因为采集的数据是float32类型的。中间的outputs区域,显示了API的输出类型和含义。右侧的Build Options涵盖目标设备类型(目前RA6E2没有在列表清单中,暂时选择RA6E1),FPU类型选择M33 FPU,hard fp abi,Toolchain选择GNU GCC 13.2.1,优化类型选择Speed。

点击Generate New Package,创建模型。

3.12

3.13
生成的模型文件名称为amr.zip,里面一共有9个文件,
-
README.txt和model_info.xml是模型相关的信息,包括占用的ROM和RAM信息等。
-
librai_edsp_f32_arm.a是库文件。
-
example_classifier.c是模型调用的例子代码,实际使用的时候,不需要添加到工程中。
-
其余5个文件是模型相关的.c和.h文件。

将上述的librai_edsp_f32_arm.a,amr_model.c,amr_model.h,RealityAI.h,RealityAI_Config.h,RealityAI_Types.h文件复制到Asset Tracking工程中的src/rai文件夹中。

3.14
在hal_entry.c中添加#include "amr_model.h"。

同时把hal_entry.c中的宏定义
#define DATA_COLLECTION_EN (1)
修改成
#define DATA_COLLECTION_EN (0)
表示代码进入推理阶段。
3.15

3.16

3.17
打开Debug文件中的FPBRA6E2_AMR_training.map文件。

搜索到.bss._SEGGER_RTT字段并复制红色框处地址。
注意:下图中的地址可能和实际的工程不相符,以自己手中的文件为准。

3.18
打开J-Link RTT-Viewer,点击File->Connect。

在弹出的窗口中,按照以下图片配置。注意,左下角的地址,输入的是上一步骤复制的地址,点击OK。

看到下面的Log输出框,表示连接成功。

3.19
点击Terminal 0标签页。

3.20


如果在运行的工程中,发现程序停留在startup.c中Default_Handler中。

参考先前3.14步骤中下载的模型中的README.txt的Estimated Memory Utilization中的Parameters,Stack Usage和Pre-Allocated之和。还要考虑加上工程本身没有使用模型推理的代码的stack消耗。

这是工程的stack设定过小,导致堆栈溢出,从而进入Default_Handler。需要在configuration.xml->BSP->Properties->RA Common中的Main stack size(bytes)进行修改。

3.21
观察J-Link RTT Viewer中的打印信息。通过扔(10cm高处跌落)、摇晃、静止FPB-RA6E2。可以发现得到如下信息:
-
红色表示FPB-RA6E2处于drop状态。
-
黄色表示FPB-RA6E2处于shake状态。
-
绿色表示FPB-RA6E2处于normal状态。

可以尝试采集更多类型动作数据,再次上传数据并训练,以便识别更多的动作。