Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
在 STM32 上训练机器学习 ANN 模型
发布于 2019-06-20 18:43:12 浏览:3230
订阅该版
* 本帖最后由 wuhanstudio 于 2019-6-26 13:23 编辑 * 一直对于 STM32 训练 ANN 模型的计算力比较好奇,于是移植了一个轻量级的 ANN 软件包,可以在 STM32 这样 flash,ram 都非常有限的 MCU 上训练小型的 ANN 模型。 **这是最新的训练结果** ![TIM截图20190626132259.png](/uploads/201906/26/132329pw1wf7wt5sa7tw5a.png) STM32 模型训练速度 以经典的 Iris 模型为例,使用一层隐藏层、隐藏层节点为4,训练 150 个样本,迭代 500 次。 在 STM32L475VET6 上训练时间为 24 秒,预测时间为 22 毫秒,预测精度为 96.0%。 在 Ubuntu i5-8400 上训练加预测时间一共为 16ms,训练精度 96.7%,差距还是相当大的。 ![iris_train_and_predict.png](/uploads/201906/20/181640ir61ffrbbr3xulvx.png) ![TIM截图20190620182159.png](/uploads/201906/20/182331e5o5ty8udfididod.png) 如何使用 libann 进行速度测试 我已经提交了一个新的软件包 libann,如果 PR 接收之后可以直接在 env 里用软件包管理器选中 libann 和对应的 Iris 实例。 ```RT-Thread online packages miscellaneous packages ---> (*) libann: a light-weight ANN library, capable of training, saving and loading models. (*) Iris train model and predict example (*) Iris load model and predict example```虽然 libann 本身是一个纯软件的算法并没有额外的依赖,但是由于示例里需要先从文件系统加载训练集 iris.data,所以需要先确保可以访问文件系统。 特别说明 这个测试用例主要是为了进行算力测试,虽然训练得到了一个可用的模型,但是这并不是一个标准的机器学习过程。 例如,我并没有对训练数据进行 normalization,因为 Iris 训练数据各个参数本身量级差距不大,所以可以成功训练,如果使用其他的数据集一定需要做 normalization。 另外,我也没有做 train test split,一个正常的机器学习流程应当将数据集分为训练集和测试集,利用训练集训练模型,而测试集用来测试模型精度,甚至为了避免人为选择 ANN 模型带来的 bias,有时会加入 cross validation,而这些在例程当中都是没有考虑的。 顺便一提, libann 的 activation function 只实现了 sigmoid 函数,实际上现在使用 relu 可以得到更好的结果。 总结 综上所述,之后我有时间会添加一个标准的 python 机器学习流程,这个 example 主要用作 benchmark,可以看看在只有几十 KB RAM 的 MCU 上训练 ANN 速度怎样。 当然,从结果来看,如果已经有训练好的模型,只是做前向传播,一个小模型在 stm32 上只有 22ms 的计算时间还是挺不错的。
查看更多
7
个回答
默认排序
按发布时间排序
bernard
2019-06-20
这家伙很懒,什么也没写!
很赞,又有了libann
whj467467222
认证专家
2019-06-20
开源,分享,交流,共同进步
好酷啊,学习学习
shadowliang
2019-06-20
Hello,world!!!
楼主666....学习学习。
来一颗糖
2019-06-21
这家伙很懒,什么也没写!
楼主好强!
还没想好
2019-06-21
这家伙很懒,什么也没写!
楼主 666 ,看不懂的高端玩意
insect2006
2019-06-21
这家伙很懒,什么也没写!
希望有机会能测试下H7上面的表现
wuhanstudio
2019-06-26
这家伙很懒,什么也没写!
>希望有机会能测试下H7上面的表现 --- F1 F4 L4 都测过了,可以在这里看到结果 [https://github.com/wuhanstudio/rt-libann](https://github.com/wuhanstudio/rt-libann) H7 暂时还没有板子,以后有机会也试试,不过 H7 都可以做 OpenMV 机器视觉了,跑 ANN 肯定没问题 :lol
撰写答案
登录
注册新账号
关注者
0
被浏览
3.2k
关于作者
wuhanstudio
这家伙很懒,什么也没写!
提问
12
回答
243
被采纳
6
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
简单两步配置RTT源码阅读环境 vsc+clangd
2
恩智浦[FRDM-MCXN947]初探 之 ADC与DAC
3
LVGL使用字库IC芯片显示中文
4
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
5
freemodbus主机在freertos的适配,参考rtthread例程
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部