• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【得捷之选】+MAX78000机器学习初体验

本来就是做机器视觉的,一直想用上手体验下机器学习,但是忙于工作,一直没得逞,正好借这次试用感受一下,体验下流程。整体主要是跑下流程,体验下机器学习,所以很多是借鉴别人的方案。

MAX78000FTHR为快速开发平台,帮助工程师利用MAX78000 Arm® Cortex® M4F处理器快速实施超低功耗、人工智能(AI)方案,器件集成卷积神经网络加速器。评估板包括MAX20303 PMIC,用于电池和电源管理。评估板规格为0.9in x 2.6in、双排连接器,兼容Adafruit Feather Wing外设扩展板。评估板包括各种外设,例如CMOS VGA图像传感器、数字麦克风、低功耗立体声音频CODEC、1MB QSPI SRAM、micro SD存储卡连接器、RGB指示LED和按键。MAX78000FTHR为概念验证和早期软件开发提供经过功率优化管理的便捷、灵活开发平台,加快产品上市。

先来一睹板子真容:

自带摄像头,唯一遗憾点就是没有带屏幕

基本硬件外设:

然后就是安装软件环境了

Maxim SDK下载

官网地址:https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0010820A

安装步骤,基本就下一步,这里稍微留意一下,不用全部安装,要不费时费空间,我们用max78000,只勾选它就可以了,然后就等待安装完成

安装完成后就可以搜索栏中找到这全家桶

Eclipse就是调试编译下载全覆盖的UI编程软件;

Maxim就是辅助下载的软件;

MinGW就是命令行方式的编译下载的软件;

环境搭建

打开Eclipse

编译调试下载

将Maxim通过安卓数据线连接到电脑上

电脑端显示

构建项目

鼠标右键项目,点击build project,编译项目(build)

编译成功

下载程序

鼠标右键项目,点击Debug as,选择Debug configurations(Debug)

选择GDB Openocd Debugging下的Helloworld,点击Debug就开始下载程序啦!

板载绿灯一直闪烁,下载成功

 预训练实现过程

预训练主要参照官方 AI 文档:https://github.com/MaximIntegratedAI/MaximAI_Documentation
 
MAX78000 中使用 AI 算法主要有 training、synthesis、deployment 三个步骤,前两个步骤分别对应独立的 Github 仓库,第三个步骤则可以使用集成开发环境完成。IDE 的安装及配置主要参考了MaximAI_Documentation,写的非常详细
 
在神经网络模型方面,对常见对象检测模型进行调研,主要有 yolo、SSD、centerNet 及对应的变种方法,并未发现为边缘端定制的对象检测模型。后续查阅官方 Github 仓库,发现受支持的模型主要为分类模型,仅有一项 tinySSD 模型可用于对象检测。随后尝试部署 AI 训练及综合环境,并完成了对 tinySSD 模型的训练及量化。
模型训练

为训练 tinySSD 模型,需要手动访问 http://ufldl.stanford.edu/housenumbers/train 下载数据并解压到对应文件夹 /data/SVHN,后续执行训练脚本 ./scripts/train_svhn_tinierssd.sh 。训练过程的输出如下图所示:

Configuring device: MAX78000, simulate=False.
Log file for this run: /home/embed2/maxim/ai8x-training/logs/2022.11.21-214418/2022.11.21-214418.log
{'start_epoch': 25, 'weight_bits': 8, 'shift_quantile': 0.995}
{'multi_box_loss': {'alpha': 2, 'neg_pos_ratio': 3}, 'nms': {'min_score': 0.2, 'max_overlap': 0.3, 'top_k': 20}}
Optimizer Type: <class 'torch.optim.adam.Adam'>
Optimizer Args: {'lr': 0.001, 'betas': (0.9, 0.999), 'eps': 1e-08, 'weight_decay': 0.0005, 'amsgrad': False}

训练到最后的结果:

2022-11-22 01:43:22,884 - ==> Best [mAP: 0.801739   vloss: 5.124822   Sparsity:0.22   Params: 334562 on epoch: 48]
2022-11-22 01:43:22,884 - Saving checkpoint to: logs/2022.11.28-215122/qat_checkpoint.pth.tar
2022-11-22 01:43:22,901 - --- test ---------------------
2022-11-22 01:43:22,902 - 12251 samples (16 per mini-batch)
2022-11-22 01:43:44,156 - Test: [  200/  766]    Loss 5.123171    mAP 0.775422    
2022-11-22 01:43:58,389 - Test: [  400/  766]    Loss 5.132284    mAP 0.773612    
2022-11-22 01:44:12,862 - Test: [  600/  766]    Loss 5.131513    mAP 0.769577    
2022-11-22 01:44:24,824 - Test: [  766/  766]    Loss 5.132510    mAP 0.767998    
2022-11-22 01:44:24,864 - ==> mAP: 0.76800    Loss: 5.133

进行量化:

./scripts/quantize_svhn_tinierssd.sh
Configuring device: MAX78000
Converting checkpoint file trained/ai85-svhn-tinierssd-qat8.pth.tar to trained/ai85-svhn-tinierssd-qat8-q.pth.tar
......

实现效果

按下连接MCU按钮,上位机与MCU建立通信。点击“循环预览”后摄像头开始循环捕获图片并在上位机显示,以便调整摄像头位置。点击“捕获并识别当前图像”按钮,文本框会输出当前的检测结果,带有标注信息的图片也会在右侧显示。点击“保存图片到上位机”按钮,程序将保存当前捕获的图片,可用于小型数据集的制作。

 总结
项目完成了上位机控制MCU捕获图像并检测数字的功能,上位机支持识别图像显示,达成了预期指标。与此同时,得益于Maxim神经网络独特的加载方式,经过简单的修改本上位机程序可应用于其他视觉相关任务。通过本项目,我熟悉了Maxim嵌入式端人工智能的开发流程,感到了边缘人工智能的广阔前景,今后将拓宽这方面的学习,期待有一天在开发板上实现更多更有趣的智能应用
全部回复(0)
正序查看
倒序查看
现在还没有回复呢,说说你的想法