当前位置: 首页 > news >正文

Tensorflow调用训练好的yolov5模型进行推理

文章目录

  • 1、安装TensorFlow-GPU版本
    • 1.2、验证是否安装正常
  • 2、将训练好的pt文件转换成onnx文件
    • 2.2、什么是Onnx模型和Tensorflow模型
    • 2.1、将onnx文件转换成pb文件

1、安装TensorFlow-GPU版本

1、创建虚拟环境python=3.8
conda create -n TF2.4 python=3.82、进入虚拟环境
conda activate TF2.43、去官网查看tensorflow对应cuda的版本
https://tensorflow.google.cn/install/source_windows?hl=zh-cn

在这里插入图片描述
conda search找找当前源下的CUDA与cuDNN有没有我们要的版本:

conda search cuda
conda search cudnnconda install cudatoolkit=11.0.221
conda install cudnn=8.2.1# 安装tensorflow-gpu版本
pip install tensorflow-gpu==2.4.0

在这里插入图片描述
在这里插入图片描述

1.2、验证是否安装正常

import tensorflow as tf
print(tf.__version__)
print(tf.test.is_gpu_available())

2、将训练好的pt文件转换成onnx文件

2.2、什么是Onnx模型和Tensorflow模型

Onnx(Open Neural Network Exchange)是一种开放的深度学习模型交换格式,用于在不同的深度学习框架之间共享模型。它提供了一个中间格式,可以将模型从一个框架转换为另一个框架。
Tensorflow是一个广泛使用的深度学习框架,提供了强大的模型构建和训练工具。Tensorflow模型通常以.pb文件格式保存,它包含了模型的结构和参数。

2.1、将onnx文件转换成pb文件

可以通过yolov5中export.py文件进行转换

python export.py --weights weights/best.pt --include onnx engine --img 640 --device 0

pb文件是tensorflow中可以使用的文件

使用代码进行转换

pip install --user tensorflow_probability==0.7.0

import onnx
from onnx_tf.backend import prepare
import tensorflow.keras as keras# 加载Onnx模型
onnx_model = onnx.load('best.onnx')# 转换为Tensorflow模型
tf_model = prepare(onnx_model)# 保存为.pb文件
tf_model.export_graph('best.pb')

源码进行转换

源码下载:https://github.com/onnx/onnx-tensorflow#installation

之后再终端安装:

pip install -e.
pip install tensorflow-addons

都安装好之后就可以直接在终端进行转换了

onnx-tf convert -i D:\\yolov5_back\\weights\\best.onnx -o D:\\yolov5_back\\weights\\best.onnx.pb

转换过程中可能会报两个错误:
错误1:from keras import backend
ModuleNotFoundError: No module named ‘keras’

# 点击进入报错的文件中,修改这行
from tensorflow.keras import backend

在这里插入图片描述

错误2:
from tensorflow.keras.utils import tf_utils
ImportError: cannot import name ‘tf_utils’ from ‘tensorflow.keras.utils’ (C:\Users\Administrator.conda\envs\Tensorflow_gpu_2.4\lib\site-packages\tensorflow\keras\utils_init_.py)

# 解决方法直接将这行注释掉
from keras.utils import tf_utils
http://www.lryc.cn/news/150619.html

相关文章:

  • 【场景方案】我所积累的一些跨页面的数据传递方式,持续更新,欢迎补充~
  • ASP.NET Core 的错误页面
  • Android静态ip设置的坑
  • 电源管理(PMIC)TPS63070RNMR、TPS650942A0RSKR、LM5175RHFR器件介绍、应用及特点。
  • k8s(kubernetes)介绍篇
  • gRPC + Spring Boot 编程教程 - piot
  • 新建Spring Boot项目
  • Python数据分析的第三方库
  • EF列表分页查询(单表、多表),排除参数为空的条件
  • VisualStudio配置pybind11-Python调用C++方法
  • ZZULIOJ 1164: 字符串加密,Java
  • 联合体(共用体)的简单介绍
  • Ansible学习笔记8
  • 五子棋游戏禁手算法的改进
  • 基于 Debian 12 的 Devuan GNU+Linux 5 为软件自由爱好者而生
  • 算法系列-力扣234-回文链表判定
  • 算法通关村——海量数据场景下的热门算法题的处理方法
  • 【C++从0到王者】第二十五站:多继承的虚表
  • 老程序员教你如何笑对问题,轻松培养逻辑思考和解决问题的能力
  • Omni Recover for Mac(专业的iPhone数据恢复软件)
  • 视频垂直镜像播放,为您的影片带来新鲜感
  • 十一、MySQL(DQL)聚合函数
  • C语言:三子棋小游戏
  • JAVA - PO DTO 生成器
  • tcpdump
  • 数据通信——传输层TCP(可靠传输原理的ARQ)
  • Compose - 交互组合项
  • 【发版公告】Virbox Protector 3.1.3.19051 发版- elf 文件支持导入表保护
  • 点云数据做简单的平面的分割 三维场景中有平面,杯子,和其他物体 实现欧式聚类提取 对三维点云组成的场景进行分割
  • C++之std::search应用实例(一百八十九)