1. 项目简介:
本项目采用美信MAX78000智能边缘计算微控制器作为主要核心模块进行开发设计, 旨在通过 78000板卡自速12位并行摄像头接口采集 周围环境信息进行目标避障识别与深度距离识别, 并与ESP麦克纳母轮小车模块进行通信控制小车变向,避障.
本项目暂定分为以下几方面准备:
- 美信MAX78000FTHR开发板相关技术学习与调试开发环境准备;
- 美信MAX78000FTHR开发板小功能项目开发与调试;
- 美信MAX78000FTHR开发板AI项目流程相关技术学习环境搭建;
- 美信MAX78000FTHR开发板AI项目摄像头调试与图像数据传输;
- 方案设计思路;
- 模型数据收集与准备;
- 训练模型与量化
- 项目生成
下面将分别对上述几方面工作进行总结, 以便广大电子爱好者少走弯路,在先进技术的海洋里畅游...
2. 相关技术学习与调试开发环境准备:
A. 初见:
MAX78000是我接触到的第一个支持边缘AI计算 MCU, 很快收到硬禾 发的开发板, 刚拿到它时, 我被它的小巧精艳到了, 没想到一个边缘AI设备可以做这么小,就是它:

B. 相互了解:
学习研究当然是先参照“官家” 正规文档, 以下列出文档地址供大家参考 do research:
相关资料:
https://github.com/MaximIntegratedAI/MaximAI_Documentation
AI相关文档:
C. 更新调试 适配器固件:
参照
MAX78000_Feather 说明更新固件, 这里遇到一个小问题, 固件地址无法打开, 然后google一个同名的文件, 拷贝里MAINTENANCE目录不好使, 在硬禾组织开发群里的小伙伴帮助下拿了一份, 可以work了, 这里我特意共享一下, 以便同样问题小伙伴下载使用:
链接: https://pan.baidu.com/s/1jTG3cJsSElA10xKJ9NOIhA 提取码: ldim
D. 小试牛刀-HelloWorld:
参照
MAX78000_Feather 流程, 小试demo项目Helloworld必须安排上, 参照 参考流程 的
Developing with Eclipse步骤,测试hello world程序, 初次配置没有成功, 编译成功了, 但是没有成功刷新固件, 后来又多试了几次, 就成功了. 如果大家也有类似问题, 可以关了电脑重来一次.
最后得到喜悦的输出:
3. 方案设计思路与原理流程:
A. 猜想:
按照常规剧本流程来走, 现在到了项目方案设计与讨论这步了, 本项目受自动驾驶周围环境感知方法启发, 从低成本需求出发, 现在自动驾驶方案均向摄像头感知方向探索, 就是要便宜, 这里我也想再便宜一点,做个“弱智”版智能感知, 用单用图像使用小的神经网络模型预测各个像素点深度, 即距离相机的距离, 如果检测到目标距离在一定阀值内, 小车就自动转弯, 避开目标障碍物 “阉割版智能感知”.

B. 方案原理图:
啊? 这步到了最正经阶段了, 也来系统设计原理图吧, 请看大屏幕4,MAX7800作为主角担当对周围环境进行检测分析, 由于自带“火眼金晴”拍摄前方图片送给AI算法模型进行检测感知, 判断前方是否存在障碍物,进行前进与转变等决策, 发送指令到ESP8266控制端进行控制执行, 检测算法精度视真实情况而定, 如果深度预测精度不高, 可能退而求其次, 采用分类算法进行检测识别.

4. 硬件(垃圾)收集与拼凑:
经过在小区周围不懈的翻找,终于拼凑出如下的硬件混搭, 中央感知与决策中心使用我们的主角MAX78000 AI开发板进行障碍目标检测与感知, 并通过串口和引脚向执行端节点发送相关指令. 执行端节点采用EPS8266作为主控模块驱动麦纳母轮车小车进行行进或转弯, 其实本人更喜欢阿克曼底盘, 它具有良好的操控性.

5. AI项目流程相关技术学习环境搭建:
-
收集室内场景 有障碍物和无障物数据集;
-
使用开源项目对所收集的数据集进行深度标注和标签生成;
-
使用ai8x-training中的UNET项目进行模改, 可能需要改损失函数为L1损失, 整体方法与流程与本项目任务相似度最高;
-
B. AI训练环境搭建与初试:
AI环境搭建本人使用docker+conda环境进行搭建, 由于官方没有这种流程, 所以这里给出大体流程, 以供大家参考:
拉取镜像:
docker pull nvidia/cuda:11.0.3-cudnn8-ubuntu18.04
运行实例
docker run --gpus all -it --shm-size 20480m -v /home/xxx/MAX78000/:/workspace/ -d nvidia/cuda:11.0.3-cudnn8-ubuntu18.04 bash
查看实例:
docker ps
进入实例:
docker exec -it <instance name or ID> bash
安装wget下载工具:
apt-get install wget
下载ananconda安装角本:
wget https://repo.anaconda.com/miniconda/Miniconda3-py38_4.12.0-Linux-x86_64.sh
anaconda安装
bash Miniconda3-py38_4.12.0-Linux-x86_64.sh
Do you wish the installer to initialize Miniconda3
by running conda init? [yes|no]
[no] >>> yes
加载conda 环境变量:
root@6d2233724511:/workspace/ai8x-training# source /root/.bashrc
(base) root@6d2233724511:/workspace/ai8x-training#
创建新环境:
conda create -n MAX78 python=3.8
进入环境:
conda activate MAX78
(MAX78) root@6d2233724511:/workspace/ai8x-training#
安装trainging环境依赖:
(MAX78) root@6d2233724511:/workspace/ai8x-training# pip install -r requirements-cu11.txt
同时也要安装美信SDK开发工具集: 参照 Embedded Software Development Kit (SDK)
运行示例训练代码:
scripts/train_mnist.sh

6. 数收集与训练准备工作:
A. 在家里环境下进行数据收集与准备工作,把MAX78000开发板固定到电脑机箱托盘上, 其中采集场景如图所示:
B. 给MAX78000 烧录数据采集CameraIF项目代码, 这个可以根据需要自行调节图像分辩率, CAMERA=OV7692, 然后使用pc_utility目录下的grap_image.py,本人对代码做了如下修改以便于采集的图片数据可以不断存储在images/文件夹下, 文件名递增序存储,否则,图片会被不断的覆盖:
C. 手动标注数据准备数据集进行训练, 我对近景图片分类为0类别也就是cat的类别, 远景图分类为1类别即狗类型, 为什么这个弄呢? 因为我想用 cats-dogs的项目进行训练与部署, 目录结构类似:
data
|----- cats-vs-dogs
|------train
|-----cats
|- imag1
|- imag2
|----- dogs
|- imag1
|- imag2
|------test
|-----cats
|- imag1
|- imag2
|----- dogs
|- imag1
|- imag2
并在ai8x-training放置data目录数据集,由于本人保存的图片是PNG格式, 因此要对数据集代码进行相应改动, 使其兼容我的数据集格式, 改动内容可在后续上传网盘内容附件可以找到, 然后就是使用script中解train_catsdogs.sh角本进行权重训练, 并会在logs目录生成训练结果及相应的权重文件、训练log等, 数据集样例如下图所示:
7. 模型量化与SDK项目代码生成:
A. 模型量化前SDK开发工具集准备, 由MAX78000/ai8x-synthesis下项目进行量化与代码生成工作, 在配置ai8x-synthesis的python虚拟环境后, 还进行了LINUX系统下美信SDK开发集安装工作, 下载到linux 美信安装包工具, MaximMicrosSDK_linux.run, 给予执行权限并进行安装:
chmod 755 MaximMicrosSDK_linux.run
./MaximMicrosSDK_linux.run
安装完工具集后, 需要配置环境变量以使命令行系统可以找到相应工具:
export PATH=/root/MaximSDK/Tools/SBT/bin:/root/MaximSDK/Tools/GNUTools/10.3/bin:/root/MaximSDK/Tools/xPack/riscv-none-embed-gcc/10.2.0-1.2/bin:/root/MaximSDK/Tools/OpenOCD:/root/miniconda3/envs/MAX78/bin:/root/miniconda3/condabin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
使用以下指令进行相应开发工具安装验证:
arm-none-eabi-gcc -v
arm-none-eabi-gdb -v
make -v
openocd -v
至此, ai8x-synthesis生成环境准备完毕.
B. 模型量化:
python quantize.py /workspace/ai8x-training/logs/2023.01.14-084932/qat_best.pth.tar trained/catdog_best_q8_bihai.pth.tar --device MAX78000
生成量化后的权重文件: catdog_best_q8_bihai.pth.tar
C. 开发代码生成:
生成模型的C代码以及工程文件 在sdk/Examples/MAX78000/CNN/下会自动新建目录cats-dogs用于保存生成的工程文件,在终端中执行下面的命令如下:
python ai8xize.py --test-dir sdk/Examples/MAX78000/CNN --prefix cats-dogs --checkpoint-file trained/catdog_best_q8_bihai.pth.tar --config-file networks/cats-dogs-hwc.yaml --fifo --softmax --device MAX78000 --compact-data --mexpress --timer 0 --display-checkpoint --verbose --overwrite
最后, 根据项目需求修改调试代码, 项目相关代码等已经上传到网盘:
8. 遇到的主要难题及解决方法:
A. 小车跑的太快且抖动,无法稳定采集图像:
最开始 小车使用 麦克纳姆轮时, 小车抖动很厉害,采集到的图像质量比较差,后来从网上买了普通的车轮, 不得不换作双侧轮差速转向. 由于减速电机减速比不高, 所以小车还是跑的太快一不小心, 就跑出很远撞到东西了, 后来不得不调试采用PWM方案对小车进行驱动, 也就是相当于走走停停, 这样的话, 也同时实现了调速功能.
B. 本项目有很大的局限性, 就是只能在收集数据集的场景下工作:
模型对我收集的图片相似的场景可以分类, 对于没见过的场景可能就不work了, 由于数据规模不大,收集场景单一, 所以模型基本没有什么泛化能力, 以后可能调试大一点的网络模型, 训练场景多样化深度数据,进行真正的深度预测, 而不是 “远”,“近”二分类这种方案, 以使小车能适用于更加广泛的场景中.
附录:
相关工程权重及代码、训练LOG在网盘进行共享:
链接: https://pan.baidu.com/s/18UYsDyw45e5iLIh0OaK15A?pwd=6vap 提取码: 6vap
小结:
通过本次项目开发与调试, 学习到许多AI边缘部署相关知识与流程, 更能熟悉美信相关产品与开发板, 同时也向群里小伙伴们学习到很多知识与技能, 感谢 电子森林、美信和ADI 主办方给予本次实践动手的机会, 同时也祝主办方 业务 蒸蒸日上!