【云+社区年度征文】TinyML实践-3:牛运动姿态识别的落地实现

概述

TinyML最近几年才提出,TinyML的书去年才见到,中文版今年在国内才买到。TFLite micro技术也就今年左右才成熟。之前所有的依靠动物身上传感器进行姿态识别的,有一说一,应该都是经典的特征抽取,加上随机森林之类的经典算法实现的。实现起来,需要领域专家进行特征抽取,选择特征反复迭代;部署嵌入式由于实现困难有可能返回去修改模型,重新搞一套;解决完一个问题,新问题又得再来一次流程....

TinyML特别Google的TFLite-micro技术框架,强大之处在于用一套系统性框架(工具链+方法论),将模型训练-模型移植应用,PC计算和嵌入式平台无缝链接起来;系统性的解决一类问题,而不是case by case 解决单个问题。

利用TinyML技术解决应用到畜牧业比如牛养殖的姿态识别,笔者应该是国内前几人。预测这种“革命性”技术会对AI下沉实体产业产生重大影响。不涉密的前提下分享一些心得,希望对面临相似问题的开发者有所借鉴。

过程

目标识别状态

0:走 "walking", 

1:躺 "lying", 

2:站立 "standing", 

3:采食 "feed"

数据预处理

image.png

数据预处理就是将一条采集记录,按状态标签切分为单状态标签的记录,然后从中按预设规则提取等长的子序列构成样本。可以抽象理解成在一条长时序记录,用一个固定长度窗口进行数据截取,取新样本数据时,滑动窗口移动距离(或者说连续窗口的重叠长度)。项目选用初始50%的重叠率,步进64个数据点。

样本数据

image.png

对比不同运动状态标签的acc_data曲线模式,可以直观的感受不同。这个分类问题可以用CNN模型来处理,也可以用LSTM来处理。

算法模型

模型尝试了CNN和LSTM。实践发现CNN模型执行推断速度更快。

image.png

训练

Epoch accuracy

image.png

Epoch loss

image.png

Epoch 1000得到最后的训练精度是0.95,验证集精度0.87,在test数据集上测试的精度是0.86。

后续探索方向

1)状态标签分布不平衡的处理

2)尝试不同的序列长度(seq=32,64, 128)

3)尝试对输入tensor做优化(float32 -> int16),可以节省写RAM空间