[i=s] 本帖最后由 南来之风 于 2025-11-2 19:58 编辑 [/i]
#申请原创#
一、DeepCraft简介
2023年英飞凌科技股份公司(FSE代码:IFX / OTCQX代码:IFNNY)宣布已收购位于斯德哥尔摩的初创企业Imagimob有限公司。这家公司自2013年创建便推动边缘人工智能和微型机器学习的前沿创新,推广AI在汽车、制造业、医疗保健和生活方式领域的全球客户的产品上使用。
DEEPCRAFT ™是英飞凌收购Imagimob后推出的全面的全新 Edge AI 软件和工具产品。借助 DEEPCRAFT 产品和解决方案,开发者可以显著加快创新、可信和便捷的机器学习实施之路。利用英飞凌广泛的产品组合为嵌入式设备添加低功耗和低内存的智能功能。
二、实验目标
本次实验旨在详细记录如何上手Deepcraft工具进行英飞凌MCU的AI训练以及如何在ModusToolbox中部署模型代码到PSOC 6 AI KIT上。
板载的六轴IMU提供了加速计数据与陀螺仪数据,本次训练PSOC 6 AI KIT识别开发板是否翻转过来,用到了其中的加速度计数据。
本次实验的数据采集、标注、分类、训练、评估、生成C代码均使用Deepcraft完成。代码部署到PSOC 6 AI KIT使用的是Modus Toool box 工具。

三、Deepcraft部分
3.1 数据采集
在Deepcraft Studio中新建一个Graph UX的空白项目,然后在Node Explorer中找到IMU,拖拽到画布上,然后找到Data track也拖拽到画布上,把imu的输出连接到data track的输入。

点击播放图标进行编译,之后自动进入自动录制数据流的imsession界面。
3.2 数据采集标注
点击中间的⚪启动录制,此时IMU数据波形会实时显示,可以录制一段,然后自行打上标签。如下所示的是录制后数据流后,在发生开发板翻转的时刻,打上“fall”标签。

一共是准备了97个带标签的数据。
之后保存这个imsession文件,其中包含了:data track + label track。
3.3 数据分类
数据的分类工作开始之前,需要再新建一个类型为improj的项目。对于本次实验,选择的项目模板是Classification.

双击新建的improj项目名称,进入到如下界面。之后点击Add Data,然后选定包含存储有步骤3.2中imsession文件的路径。

之后点击Resdistrubute Sets把数据集进行分类。

默认选项即可,点击Redistribute。之后数据会分成Train, test, validation三类。

在训练之前根据需要选择Preprocessor: 参考:Processing. https://developer.imagimob.com/deepcraft-studio/preprocessing#preprocessing

3.4 训练
点击Generate Model list生成模型:

点击Start New Training Job来开始新的训练。

点击右上角的“Imagimob Cloud”可以查看历史训练记录,以及剩余可用的训练时长。

双击任务,即可进入到训练详细页,包含了各种训练参数,数据。

训练完成后,点击Download下载H5文件到本地,后续用于模型评估与代码生成。

3.5 评估
参考:https://developer.imagimob.com/deepcraft-studio/model-evaluation/evaluating-classification-model/evaluating-model-using-graph-ux
把.h5模型拖拽到画布上,然后连接IMU输出到模型输入,然后在模型的输出,添加data track与label track

点击⚪,启动数据流录制,翻转开发板,看到模型的输出有显著的变化。说明模型经过训练可以识别预期的动作。

3.6 生成代码
双击.h5文件,进入Code Gen,选择PSoc,以及当前的improj项目。

生成的代码位于项目内的模型文件夹下的infineon目录。

打开model.h文件,可以看到标签与项目里数据标注的一致。
#define IMAI_DATA_OUT_SYMBOLS {"unlabelled", "fall"}
四、代码部署与测试:
开发环境:ModusToolbox,基于DEEPCRAFT_Deploy_Model_Motion项目。
4.1 代码部署
首先要用生成的model.c与model.h替换原始项目中的model.c与model.h
main.c源文件中,包含模型的头文件:
#include "models/model.h"
接着初始化PSOC6 AI KIT系统与外设,初始化模型,初始化IMU:
init_board();
printf("\x1b[2J\x1b[;H\x1b[?25l");
result = IMAI_init();
halt_error(result);
imu_init(&imu);
然后在循环中读取IMU数据,提供给模型,然后获取推理结果。
printf("\\033[H");
printf("DEEPCRAFT IMU Model Example\\r\\n\\n");
/\* Read sensor data \*/
memset(data\_buffer, 0, sizeof(data\_buffer));
if(!imu\_read(&imu, data\_buffer))
{
continue;
}
/\* Give sensor data to model \*/
result = IMAI\_enqueue(data\_buffer);
halt\_error(result);
/\* Check if there is any model output \*/
best\_label = 0;
max\_score = -1000.0f;
switch(IMAI\_dequeue(label\_scores))
{
case IMAI\_RET\_SUCCESS: /\* We have data, display it \*/
for(int i = 0; i < IMAI\_DATA\_OUT\_COUNT; i++)
{
printf("label: %-10s: score: %f\\r\\n", label\_text[i], label\_scores[i]);
if (label\_scores[i] > max\_score)
{
max\_score = label\_scores[i];
best\_label = i;
}
}
printf("\\r\\n");
printf("Output: %-30s\\r\\n", label\_text[best\_label]);
break;
case IMAI\_RET\_NODATA: /\* No new output, continue with sampling \*/
break;
case IMAI\_RET\_ERROR: /\* Abort on error \*/
halt\_error(IMAI\_RET\_ERROR);
break;
}`
4.2 实物测试:

识别的精确度还是非常高的。至此也完成了本次实验的目标:熟悉Deepcraft,走通整个开发流程,完成了识别板子翻转的动作。
总结:
AI + DEEPCRAFT+ PSOC,使得边缘人工智能的开发变得更加容易。对于笔者这种对AI训练了解不多的新手,也可以快速入门AI边缘计算并完成小项目。对于有经验的开发者,可以在Deepcraft中对数据采集、标注进行精细化,对模型的结构与参数进行调整,基于Imagimob Cloud的云端训练使得用户不用担心本地计算资源,数次迭代使得模型的精度与大小最优化,极大缩短开发周期。