基于MAX78000的跌倒检测
现如今许多年轻人都外出打工,家里只剩老人,因此对老人的监控就显得十分重要,特别是要预防老人跌倒。
标签
嵌入式系统
ADC
开发板
LCHAOM
更新2024-01-10
中南民族大学
137



一、项目介绍

随着社会的快速发展,家里的年轻人都选择了外出挣钱,家里只留下老人,而老人年纪大行动不便,在日常行动中容易摔倒,因此对老人的监控,特别是跌倒实时检测就显得十分重要,在老人发生跌倒时可以及时通知家属和医院并提供救助。基于MAX78000设计一款实时监测器,实时监测老人的状态,通过AI技术实时分析老人是否发生跌倒,若老人跌倒了可以发出警报并联系家人或者医院。此外,可用电池为这款监测器供电。由于整体系统运行在MCU之上,整体功耗极低。

二、项目设计和素材搜集思路

2.1 基本思路

通过传感器(如:陀螺仪)采集摔倒时的数据,多次采集并在电脑上训练神经网络,部署到单片机上运行,使用芯片内置的CNN神经网络加速器。

训练、部署神经网络主要参考板卡官方的Github仓库:

  1. ai8x-training仓库,用于在电脑上训练神经网络:https://github.com/MaximIntegratedAI/ai8x-training
  2. ai8x-synthesis仓库,用于把训练好的模型文件转换成c语言代码:https://github.com/MaximIntegratedAI/ai8x-synthesis
  3. msdk仓库,用于编写单片机程序:https://github.com/Analog-Devices-MSDK/msdk

2.2 环境准备

(1)相关软件

  1. MaximMicrosSDK_win (官方工具包)
  2. VScode (硬件编程及烧录)
  3. Ubuntu(模型训练)

(2)软件安装

链接https://pan.baidu.com/s/1eboDnag9OPlScf0jA1_76A?pwd=LM23 
提取码:LM23 

  1. 双击MaximMicrosSDK_win.exe安装:参考教程:【window下配置Maxim SDK环境】_maximmicrossdk下载_2345VOR的博客-CSDN博客
  2. VScode安装和配置:教程:https://analog-devices-msdk.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code

安装所需插件:

  • 推荐插件:
    • Atom One Dark Theme
    • C/C++
    • C/C++ Extension Pack
    • C/C++ Theme
    • Chinese(Simplified)
    • CMake
    • CMake Tools
    • GitLens
    • Header Source Switch
    • Maekfile Tools
    • Serial Montior
    • vscode-icons

相关配置:

使用 CTRL + SHIFT + P后输入Open User Settings 并选择"Preferences: Open User Settings (JSON)"FhqwO5JI38-M0w332lKlcTzWz9h9

添加完以下配置代码后保存重启

"MAXIM_PATH": "E:/learning/MaximSDK/MAX78000/MaximSDK",//MaximMicrosSDK_win的安装目录
"update.mode": "manual",
"extensions.autoUpdate": false,
"cmake.configureOnOpen": true,


3.Ubuntu系统安装:参考官方教程网址GitHub - MaximIntegratedAI/ai8x-training: Model Training for ADI's MAX78000 and MAX78002 AI Devices

  • 安装一些基础工具:
sudo apt update
sudo apt upgrade
sudo apt install python3-pip
sudo apt-get install python-is-python3//安装python3.8
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
...

其它具体的资源下载可参考官方教程网址,也可根据直播视频进行安装。

安装资源时可能会失败,可多次尝试。因为我的电脑没有英伟达的GPU,所以无需安装pytorch。如果电脑有CUDA且安装了pytorch,可以用此命令检查CUDA 硬件加速是否可用

(ai8x-training) $ nvidia-smi -q
...
Driver Version : 470.57.02
CUDA Version : 11.4

Attached GPUs : 1
GPU 00000000:01:00.0
Product Name : NVIDIA TITAN RTX
Product Brand : Titan
...

如果可用再验证 PyTorch 是否识别 CUDA:

(ai8x-training) $ python check_cuda.py
System: linux
Python version: 3.8.11 (default, Jul 14 2021, 12:46:05) [GCC 9.3.0]
PyTorch version: 1.8.1+cu111
CUDA acceleration: available in PyTorch

2.3 硬件烧录

(1)VScode:

用VSode打开“..\MaximSDK\Examples\MAX78000...”该路径下任意一个需要用到的demo,例如Hello_World

然后修改“.vscode/settings.json”里关于板子配置"board"的参数,将"board": "EvKit_V1"修改为"board": "FTHR_RevA",修改保存后需要重新加载一下窗口。

Futr-c52Q5in9DPbXt4wF4nKRoHB

之后按下CTRL + SHIFT + B------>运行“clear”清理任务------>运行“build"编译任务------>运行”flash&run“进行烧录并运行------->最后打开串口助手进行测试

FvwVVza9Z8M0BH1rzpymLF5M7UEo

三、模型训练

教程网站https://github.com/MaximIntegratedAI/MaximAI_Documentation/blob/master/Guides/Making Your Own Audio and Image Classification Application Using Keyword Spotting and Cats-vs-Dogs.md

也可参考作者zzzz的教程进行训练:https://www.eetree.cn/project/detail/2187(需要安装Anaconda和PyCharm)

当然也可以根据大赛里的老师直播的教程进行模型训练:

3.1 例程训练

按照教程或者直播视频对官方给出的例程进行训练,一边熟悉相关操作和知识。本次,对catsdogs例程进行训练量化。


(1)训练:首先使用以下命令进入ai8x-training环境

$ ​cd ai8x-training
$ source venv/bin/activate

之后使用scripts/train_catsdogs.sh "$@"命令进行训练

(ai8x-training) dl@DESKTOP-UK0GTDF:/mnt/e/luospace/ai8x-training$ scripts/train_catsdogs.sh "$@"

训练完成后会在“ai8x-training\logs”目录下生成6个文件,之后对其中的best文件进行量化。


(2)量化:退出ai8x-training环境,进入ai8x-synthesis环境,先用以下命令在\ai8x-synthesis\training目录下生成“best-q.pth.tar”文件

python quantize.py trained/ai85-catsdogs-qat8.pth.tar trained/ai85-catsdogs-qat8-q.pth.tar --device MAX78000 -v "$@"

之后再用此命令进行量化

scripts/gen_catsdogs_max78000.sh

gen_catsdogs_max78000.sh文件里也可对相关信息进行修改,例如量化后文件的保存路径。

最后在/Examples/$DEVICE/CNN目录下可以找到训练的文件。


(3)将量化后的文件用MaximMicrosSDK或者VScode将其打开便可写入MAX78000硬件进行测试识别。

效果如下:按SW1键开始拍照识别

狗:

猫:


3.2 实际训练

因为本人时初次接触深度学习以及时间原因,所以就直接使用官方例程中的猫狗模型进行训练。cat_vs_dog中的网络模型是一个七层的神经网络

// Configuring 7 layers
// Input data: HWC
// Layer 0: 3x128x128 streaming, no pooling, conv2d with kernel size 3x3, stride 1/1, pad 1/1, ReLU, 16x128x128 output
// Layer 1: 16x128x128 streaming, max pool 2x2 with stride 2/2, conv2d with kernel size 3x3, stride 1/1, pad 1/1, ReLU, 32x64x64 output
// Layer 2: 32x64x64, max pool 2x2 with stride 2/2, conv2d with kernel size 3x3, stride 1/1, pad 1/1, ReLU, 64x32x32 output
// Layer 3: 64x32x32, max pool 2x2 with stride 2/2, conv2d with kernel size 3x3, stride 1/1, pad 1/1, ReLU, 32x16x16 output
// Layer 4: 32x16x16, max pool 2x2 with stride 2/2, conv2d with kernel size 3x3, stride 1/1, pad 1/1, ReLU, 32x8x8 output
// Layer 5: 32x8x8, no pooling, conv2d with kernel size 3x3, stride 1/1, pad 1/1, ReLU, 16x8x8 output
// Layer 6: 16x8x8 flattened to 1024x1x1, no pooling, linear, no activation, 2x1x1 output

开始训练前可以对\ai8x-training\scripts目录下的“train_catsdogs.sh”文件进行修改

python train.py --epochs 200 --optimizer Adam --lr 0.001 --wd 0 --deterministic --compress policies/schedule-catsdogs.yaml --qat-policy policies/qat_policy_cd.yaml --model ai85cdnet --dataset cats_vs_dogs --confusion --param-hist --embedding --device MAX78000 "$@"

各个参数的含义如下:

--epochs 200:训练的次数

--optimizer Adam:优化器

--lr 0.001:learning rate 学习率

--wd 0:weight decay

--deterministic:设置随机数种子,制造可重复的训练结果

--compress:设置压缩和学习率时间表

--qat-policy policies/qat_policy_cd.yaml:量化参数的策略

--model ai85cdnet:模型选择,模型定义在models文件夹下

--dataset cats_vs_dogs:数据集名称,之前在数据集加载文件中定义的

--confusion:显示混淆矩阵

--param-hist:收集参数统计信息

--embedding:显示嵌入

--device MAX78000:单片机芯片型号

(1)数据收集:因为时间有限所以就随便在网上找了个数据集进行训练,数据集来源:https://www.bilibili.com/video/BV1F94y1S7Tg/?spm_id_from=333.337.search-card.all.click&vd_source=69791353ee016d00d12531c613ff05e8


(2)将数据集放入ai8x-training/data目录下后便可按照上面的3.1例程训练进行模型训练

训练结果如下

训练完成后会生成如下文件


(3)训练完成后进行量化

量化结束后可在demo目录下找到量化后的文件


(4)将量化好的文件用VScode打开进行测试,本次测试使用了B站的相关视频进行验证。结果如下:


  • 没有检测到目标时

  • 检测到目标

站立时:屏幕

串口


跌倒时:屏幕

串口:

这些测试结果可以说是失败的,数据集和模型都还可以改进,之后会继续学习的,争取下次可以做的更好。


3.3 屏幕连接

屏幕:TFT LCD:ILI9341

image.png

接法:

屏幕和MAX78000FTHR开发板连接好后,在有使用屏幕的例程中修改部分程序,例如cats-dogs_demo,然后修改 main.c:设置RESET、BLK控制引脚

#if defined(BOARD_FTHR_REVA)
    // Wait for PMIC 1.8V to become available, about 180ms after power up.
    //MXC_Delay(200000);
    mxc_gpio_cfg_t tft_reset_pin = {MXC_GPIO0, MXC_GPIO_PIN_19, MXC_GPIO_FUNC_OUT, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIOH};
    mxc_gpio_cfg_t tft_blen_pin = {MXC_GPIO0, MXC_GPIO_PIN_9, MXC_GPIO_FUNC_OUT, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIOH};
    MXC_TFT_Init(MXC_SPI0, 1, &tft_reset_pin, &tft_blen_pin);
    /* Enable camera power */
    Camera_Power(POWER_ON);
    //MXC_Delay(300000);
    printf("\n\nFall_Recognition Feather Demo\n");
#else
    printf("\n\nFall_Recognition Evkit Demo\n");
#endif

其他信息可参考电子森林的HonestQiao作者的内容。


四、遇到的问题及解决方法

1.安装Ubuntu系统是电脑C盘内存不够,可按照此教程安装到其他盘:https://blog.csdn.net/wgqabc/article/details/127745880?ops_request_misc=&request_id=&biz_id=102&utm_term=ubuntu%20%E5%AE%89%E8%A3%85%E9%9D%9Ec%E7%9B%98&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-6-127745880.142

2.git(http)拉取代码一直失败

FslUyV9P4RiFIYSOGh_TeBnTAVQe

这个是因为网络不稳定无法连接到网址,可以多次尝试或者挂梯子,也可以改用git(ssh)拉取代码 (首次使用需要配置一下)教程https://zhuanlan.zhihu.com/p/108972475

3.训练时发现缺少模块,可重新安装环境或者使用命令$pip install "缺少的模块名"进行安装

FmNcl4UsGOmVtkalIZLxosQpLcd7


五、总结

总的来说这是一次失败的训练,十月份和十一月份一直生病,住院了一个多月,并且我还是初学者,所以很多地方都没做好,不过我还会继续学习,完成这个项目的,争取用上imu。

附件下载
Fall.zip
代码
团队介绍
LCHAOM
团队成员
LCHAOM
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号