小优智能科技有限公司成立于2015年底,是一家专注于高精度3D机器视觉模组研发、生产及销售的高科技企业。
公司自主研发的3D机器视觉模组采用激光/DLP白光编码光栅结构光+双工业相机方案,还原物体三维信息,广泛应用于消费电子领域、工业领域和安防领域,具有精度高、速度快、成本低的优势。
神经网络算法非传统终端部署
随着生产力的发展和以单片机为代表的微控制器的性能提高,越来越多的神经网络模型可以部署在原来无法部署的平台上,用来助力神经网络算法在工业生产领域更好的发挥作用,尤其是在安防识别,故障检测等领域卷积神经网络一直都有着非常不错的表现,下面我们就以Tensorflow这一种常见的神经网络算法库为例,简单聊一下神经网络算法如何部署到以单片机为代表的非传统终端上。
TensorFlow Lite 简介
TensorFlow 可提供强大的功能,以便您在任何环境(包括服务器、边缘设备、浏览器、移动设备、微控制器、CPU、GPU、FPGA)中部署模型。TensorFlow Serving 可以在先进的处理器(包括 Google 的自定义张量处理单元 [TPU])上以生产规模运行机器学习模型。
如果您需要在靠近数据源的位置分析数据,以缩短延迟时间并更好地保护数据隐私,可以借助 TensorFlow Lite 框架在移动设备、边缘计算设备甚至微控制器上运行模型,还可以借助 TensorFlow.js 框架仅使用网络浏览器就能运行机器学习模型。
TensorFlow Lite是google为深度学习在嵌入式物联网应用而推出的轻量级框架。它提供了python、java和C++接口,同时可以将浮点运算转换为整数运算,从而在特定的硬件平台上加快推理速度。TensorFlow Lite使用的模型不是pb文件,而是更小的基于FlatBuffers的模型文件。
TensorFlow Lite主要有两个组件:推理组件和模型转换组件。推理组件用于运行模型;模型转换组件用于将需要的模型转换为TensorFlow Lite模型文件。
TensorFlow Lite 部署模型
import tensorflow as tf
img = tf.placeholder(name="img", dtype=tf.float32, shape=(1, 64, 64, 3))
var = tf.get_variable("weights", dtype=tf.float32, shape=(1, 64, 64, 3))
val = img + var
out = tf.identity(val, name="out")
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
converter = tf.lite.TFLiteConverter.from_session(sess, [img], [out])
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)
2. 部署模型(加载模型文件)
interpreter = tf.lite.Interpreter(model_path=tflite_file)
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
TensorFlow Lite 实例(水果分类)
部署运行后效果图:
模型用途:在给定图像或视频流的情况下,目标检测模型可以识别可能存在已知目标集合中的哪些目标,并提供关于它们在图像中的位置的信息。
部署步骤:
1. 可以自行训练模型或者到Tensorflow Lite Model Market中下载已经训练好的模型。
2. 将模型转换成Model.tflite文件。
3. 将文件传输到终端
4. 加载模型文件Model.tflite 实现识别。
参考文献:https://tensorflow.google.cn/lite/examples/object_detection/overview?hl=zh-cn