概述
TinyML最近几年才提出,TinyML的书去年才见到,中文版今年在国内才买到。TFLite micro技术也就今年左右才成熟。之前所有的依靠动物身上传感器进行姿态识别的,有一说一,应该都是经典的特征抽取,加上随机森林之类的经典算法实现的。实现起来,需要领域专家进行特征抽取,选择特征反复迭代;部署嵌入式由于实现困难有可能返回去修改模型,重新搞一套;解决完一个问题,新问题又得再来一次流程....
TinyML特别Google的TFLite-micro技术框架,强大之处在于用一套系统性框架(工具链+方法论),将模型训练-模型移植应用,PC计算和嵌入式平台无缝链接起来;系统性的解决一类问题,而不是case by case 解决单个问题。
利用TinyML技术解决应用到畜牧业比如牛养殖的姿态识别,笔者应该是国内前几人。预测这种“革命性”技术会对AI下沉实体产业产生重大影响。不涉密的前提下分享一些心得,希望对面临相似问题的开发者有所借鉴。
过程
目标识别状态
0:走 "walking",
1:躺 "lying",
2:站立 "standing",
3:采食 "feed"
数据预处理
数据预处理就是将一条采集记录,按状态标签切分为单状态标签的记录,然后从中按预设规则提取等长的子序列构成样本。可以抽象理解成在一条长时序记录,用一个固定长度窗口进行数据截取,取新样本数据时,滑动窗口移动距离(或者说连续窗口的重叠长度)。项目选用初始50%的重叠率,步进64个数据点。
样本数据
对比不同运动状态标签的acc_data曲线模式,可以直观的感受不同。这个分类问题可以用CNN模型来处理,也可以用LSTM来处理。
算法模型
模型尝试了CNN和LSTM。实践发现CNN模型执行推断速度更快。
训练
Epoch accuracy
Epoch loss
Epoch 1000得到最后的训练精度是0.95,验证集精度0.87,在test数据集上测试的精度是0.86。
后续探索方向
1)状态标签分布不平衡的处理
2)尝试不同的序列长度(seq=32,64, 128)
3)尝试对输入tensor做优化(float32 -> int16),可以节省写RAM空间