过去的很长一段时间里,恩智浦在各个渠道发表了很多篇关于AI机器学习的文章。里面有介绍神经网络基础知识的,模型设计原理的,还有一些人脸识别,图像分类的示例。
很多童鞋看了心痒痒,想要验证一番。奈何没有配套软硬件,无法施展。是不是有种空有屠龙技,没有风火轮,混天绫的遗憾啊!
在这里向大家隆重推出,基于MCU平台的AI机器学习开发套件:OpenART。
智能车参赛的童鞋可能已经听说过了。没错,OpenART的首发亮相就是今年智能车竞赛,AI视觉组里的图像识别模块。
OpenART的软件是由NXP研发。原型开发使用的硬件平台是i.MX RT1060 EVK,最近又乔迁到了逐飞(SeekFree)公司的SeekFree ART开发板上。野火公司也很快会推出一款Fire ART开发板。这三款开发板使用的都是i.MX RT1060系列高性能跨界处理器。但OpenART项目不止限于高性能的AI应用,后面,我们还打算移植到与逐飞合作的一款基于LPC55xx的IoT开发板。
NXP i.MX RT1060-EVK
OpenART的硬件采取模块化设计,有两排扩展口,其中一排兼容树莓派的通信接口,支持多种数据采集运算。高度集成设计,尺寸与名片大小相仿,可以方便集成到各种使用场景。
输入端口
OMV4 Camera
- 板载支持2个I2S麦克风,可扩展8个I2S麦克风阵列
- 支持8路ADC数据采集
- 支持SPI高速WIFI模块
输出控制端口
一只贴片喇叭或者3.5毫米耳机接口,由MQS.LEFT通过D类功放来驱
- RGB LED和一个独立LED
- USB device口,模拟出虚拟串口
- TF卡接口,存储脚本和数据
- SPI LCD显示
- IO扩展8080
- 云台载具(PTV)扩展口
看到这些这些明星阵容,各位童鞋有没有怦然心动啊?没错,就是这么大方。
OpenART的BSP主要实现如下功能:
基于神经网络的机器学习和深度学习,比如:
- 图像处理,图像分类,人脸识别
- 语音触发,音源定位
- 多媒体数据的机器学习(异常检测,姿态识别,智能控制策略)
- 智能可运动物体(模仿+强化学习)-机电联动:云台载具
- 模型验证,人工智能教育
OpenART里包含了3个各有千秋的神经网络推理引擎,分别是NN, NNCU, 和TF。
- NN 这是OpenMV在3年前最早实现的简易引擎,是开山之石般的存在,也启迪了我们的工作。
虽然现在看上去比较单薄了,但可以运行OpenMV早期提供的一些例子(.network文件),包括识别手写数字的lenet.network。它需要Caffe来训练模型,并且使用OpenMV提供的2个脚本来量化,只支持线性拓扑。不建议为它训练新模型。
- NNCU,去年了解过电磁AI的同学可能对它已经有印象了。
NNCU是我们基于CMSIS-NN和自己的扩展制作的一套完整的工具,使用CMSIS-NN传统API,可以达到最高的性能。尤其是在搭配了我们特色的权重缓存功能,在大型模型上的性能提升可达2-5倍!不过,由于量化机制比较简单,只支持2的方幂的放大倍数,在 8位量化精度在大型模型上稍有下降。
NNCU使用Keras来训练模型,它的工具可以从https://pan.baidu.com/s/1eQADEHg8UVhTsZWT_lRRgw来下载。
- TF,这是OpenMV最新基于TensorFlow lite micro制作的引擎,使用CMSIS-NN的新一代”_s8” API,量化系数不再有2的方幂的限制,并且每个通道有自己的量化系数,可以达到最高的8位量化精度,但牺牲了少量性能。它甚至可以支持浮点模型,当然这也是以牺牲性能为代价的。
TF可以导入.tflite文件,一般使用TensorFlow来训练模型。
下面的小表总结了这3个引擎各自的特色。
由于NNCU和TF都可以使用Keras API,我们建议使用Keras或tf.keras训练模型。如果模型不大(小于10层主运算)先使用NNCU上量化,否则先用TF量化,在精度与性能间权衡。
机器视觉处理:OpenART项目包含了OpenMV软件在i.MX RT1060上的移植,可以使用OpenMV的功能和示例。
MCU教育。基于MicroPython,实现了python对基础外设的控制。并且独创了管脚动态管理模块CMM,通过CMM动态配置管脚,不用更改烧录固件既可以切换管脚不同的功能。
从图中可以看出,OpenART集成了现在最火爆的RTOS:RT-Thread。基于RTOS,各位童鞋可以愉快地添加自己的应用而不影响其它模块。而且通过RT-Thread的开发环境,可以集成RT-Thread Online packages。
试想一下机器学习+Cloud,是不是很炫酷呢!
小编在这里透露一下,OpenART预计第一季度,也就是三月份与大家见面。代码计划在GitHub开源。未来可能会允许有想法,有能力的童鞋提交一些比较好的应用代码,软件模块。是不是特别的期待呢??