LabVIEW深度学习实践:基于TensorFlow框架的调用与应用教程

部署运行你感兴趣的模型镜像

labview调用TensorFlow深度学习教程

最近在自动化实验室折腾数据采集,突然发现处理实时信号的时候传统算法有点力不从心。想着能不能把之前用Python训好的TensorFlow模型直接塞进LabVIEW里用,结果踩了三天坑终于跑通了,顺手整理个野路子教程。

先甩个结论:LabVIEW本身确实没法原生跑TensorFlow,但通过Python这个桥梁能曲线救国。核心操作就是把训练好的模型导出成.pb格式,然后用LabVIEW的Python节点调库预测。

第一步:模型冻成冰棍(Freeze Graph)

用Keras训好的模型得先固化,不然LabVIEW调用时会各种找不到操作。这里有个坑要注意TF2.x的保存方式和老版本不一样:

import tensorflow as tf

model = tf.keras.models.load_model('my_model.h5')
tf.saved_model.save(model, 'frozen_model')

这样会生成包含.pb文件的saved_model格式,比直接转冻结图更省事。如果用TF1.x的话可能需要下面的传统艺能:

from tensorflow.python.framework import graph_util

with tf.Session() as sess:
    saver = restore(sess, 'model.ckpt')
    output_graph_def = graph_util.convert_variables_to_constants(
        sess, sess.graph_def, ['output_layer'])
    with tf.gfile.GFile('frozen_model.pb', 'wb') as f:
        f.write(output_graph_def.SerializeToString())

LabVIEW里搭桥接器

在Block Diagram里右键插入Python节点,关键是要配置好Python环境路径。实测发现用Anaconda环境时得在脚本里先import sys再添加路径:

import sys
sys.path.append(r'C:\my_project')  # 模型路径
import tensorflow as tf
import numpy as np

def predict(data):
    loaded_model = tf.saved_model.load('frozen_model')
    infer = loaded_model.signatures['serving_default']
    return infer(tf.constant(data))['output_0'].numpy()

这里有个骚操作:TF2的SavedModel会自动生成signature,用serving_default这个签名直接调用比用tf.Session方便得多。输入数据记得转成numpy数组,LabVIEW传过来的数据默认是list需要手动转换。

数据管道对接

LabVIEW这边处理图像或信号时,如果是多维数组建议先转成JSON字符串传递。实测发现直接传二维数组到Python节点可能会维度错乱,用这个法子稳如老狗:

import json

def predict(json_data):
    data = np.array(json.loads(json_data))
    # ...处理逻辑...
    return json.dumps(result.tolist())

前端用LabVIEW的JSON工具包处理数据打包,实测720p图像处理能跑到30fps,比用TCP通信中转快得多。如果遇到内存泄漏问题,记得在Python脚本里显式清除TF图:

tf.keras.backend.clear_session()  # 每次预测后清内存

性能玄学优化

在循环结构里调用Python节点时,把模型加载放在初始化阶段。亲测把模型加载写在Python函数的全局区域能提速3倍:

# 写在函数外部
loaded_model = tf.saved_model.load('frozen_model')
infer = loaded_model.signatures['serving_default']

def predict(data):
    global infer
    return infer(...)  # 省去每次加载模型时间

最后上个效果图:用LabVIEW控制USB摄像头采集图像,实时调用YOLO模型做目标检测,FPS能跑到25左右。虽然比不上Python直接部署,但对于需要结合硬件控制的场景来说,这套方案算是能用了。

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

我们很容易掌握AI深度学习。让机器能够模仿人脑的思考方式,从而摆脱原来的固有数据库比较的限制。深度学习的发展课件:链接:https://pan.baidu.com/s/1Ck4GN9N0OCzQgH0MxZOqeQ 提取码:b74k随着机器学习, 深度学习的发展,很多人眼很难去直接量化的特征, 深度学习可以搞定, 这就是深度学习带给我们的优点和前所未有的吸引力。很多特征我们通过传统算法无法量化,或者说很难去做到的, 深度学习可以搞定。特别是在图像分类, 目标检测这些问题上取得了显著的提升。下图是近几年来深度学习在图像分类问题上取得的成绩。●   机器视觉缺陷检测的痛点●   仍存在下面主要的问题和难点 1) 受环境、光照、生产工艺和噪声等多重因素影响,检测系统的信噪比一般较低,微弱信号难以检出或不能噪声有效区分。如何构建稳定、可靠、鲁棒的检测系统,以适应光照变化、噪声以及其他外界不良环境的干扰,是要解决的问题之一。 2) 由于检测对象多样、表面缺陷种类繁多、形态多样、复杂背景,对于众多缺陷类型产生的机理以及其外在表现形式之间的关系尚不明确,致使对缺陷的描述不充分,缺陷的特征提取有效性不高,缺陷目标分割困难;同时,很难找到“标准”图像作为参照,这给缺陷的检测和分类带来困难,造成识别率尚有待提高。 3) 机器视觉表面缺陷检测,特别是在线检测,其特点是数据量庞大、冗余信息多、特征空间维度高,同时考虑到真正的机器视觉面对的对象和问题的多样性,从海量数据中提取有限缺陷信息的算法能力不足,实时性不高。 4) 机器视觉表面检测密切相关的人工智能理论虽然得到了很大的发展,但如何模拟人类大脑的信息处理功能去构建智能机器视觉系统还需要理论上的进一步研究,如何更好的基于生物视觉认识、指导机器视觉得检测也是研究人员的难点之一。 5) 从机器视觉表面检测的准确性方面来看,尽管一系列优秀的算法不断出现,但在实际应用中准确率仍然满足实际应用的需求尚有一定差距,如何解决准确识别模糊特征之间、实时性准确性之间的矛盾仍然是目前的难点。 传统算法在某些特定的应用中已经取得了较好的效果,但仍然存在许多不足。例如:图像预处理步骤繁多且具有强烈的针对性,鲁棒性差;多种算法计算量惊人且无法精确的检测缺陷的大小和形状。而深度学习可以直接通过学习数据更新参数,避免了人工设计复杂的算法流程,并且有着极高的鲁棒性和精度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值