Skip to content

wuhanstudio/rt-libann

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rt-libann

1、介绍

这是一个轻量级的 ANN 库,可以运行在 Flash,RAM 都非常有限的 stm32 上面。隐藏层节点数目可以选择,但是每个隐藏层节点大小默认一样

以经典的 Iris 数据集为例,使用一层隐藏层、隐藏层节点为4,激活函数为 sigmoid,训练 150 个样本,迭代 500 次,下面是不同 MCU 训练时间。

MCU 工作主频 FLASH RAM 训练时间 预测时间 预测精度
STM32F429IGT6 180MHz 1024KB 256KB 9秒 7毫秒 96.0%
STM32F401RET6 84MHz 512KB 96KB 18秒 15毫秒 96.0%
STM32L475VET6 80MHz 512KB 128KB 24秒 22毫秒 96.0%
STM32F103RCT6 72MHz 256KB 20KB 32秒 26毫秒 96.0%
STM32F103C8T6 72MHz 64KB 20KB 32秒 26毫秒 96.0%
Arduino M0 Pro 48MHz 256KB 32KB 135秒 97毫秒 96.0%
ATmega 2560 16MHz 256KB 8KB 182秒 138毫秒 96.0%

iris 数据集在 doc/iris.data 里可以找到,也可以去官网下载 https://archive.ics.uci.edu/ml/datasets/Iris/

当然,示例程序只是为了 benchmark 计算力,并没有考虑 train test split,normalization 等等,不过这说明一些比较小的 ANN 模型在 stm32 上还是可以跑跑前向传播的,当然前提是内存足够大能够顺利加载模型。

这是用 asciinema 录制的演示视频,你可以在自己的电脑上回放,视频保存在 doc/rt-thread.cast:

asciinema play rt-thread.cast

asciicast

2、项目说明

2.1 目录结构

说明:目录结构

名称 说明
doc 文档目录
examples 例子目录
src 源代码目录

2.2 许可证

参见源码内许可证

2.3 项目依赖

  • 如果从外部加载训练集或者模型,需要打开文件系统支持,并且支持 POSIX 接口

3、如何使用 libann

使用 libann 需要在 RT-Thread 的包管理器中选择它,具体路径如下:

RT-Thread online packages
  miscellaneous packages  --->
      [*] libann: a light-weight ANN library, capable of training, saving and loading  models.

然后让 RT-Thread 的包管理器自动更新,或者使用 pkgs --update 命令更新包到 BSP 中。

4、注意事项

这个库只是为了测试不同开发板运行 ANN 的计算能力而设置的,实际的机器学习流程需要 train test split, noramalization 等等。

除了测试算力,这个软件包也可以帮助理解 ANN 模型结构,保存的模型使用的是 ASCII 格式,所以可以直接打开看模型各层大小和参数,每个隐藏层节点大小默认是一样的。

5、感谢

codeplea: https://github.com/codeplea/genann

6、联系方式

About

RT-Thread 运行 ANN 的速度测试库

Resources

Stars

Watchers

Forks

Packages

No packages published