深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式

简介: 将Keras训练好的.hdf5模型转换为TensorFlow的.pb模型,然后再转换为TensorRT支持的.uff格式,并提供了转换代码和测试步骤。

环境
tensorflow1.15,cuda10.0,cudnn7.6.4

将keras训练好保存的.hdf5格式模型转为tensorflow的.pb模型,然后转为tensorrt支持的uff格式。

keras(.hdf5)模型转TensorFlow(.pb)

# h5_to_pb.py

from keras.models import load_model
import tensorflow as tf
import os
import os.path as osp
from keras import backend as K

# 路径参数
input_path = 'D:/pycharm/facenet/models/'
weight_file = 'resnet50.hdf5'
weight_file_path = osp.join(input_path, weight_file)
output_graph_name = weight_file[:-3] + '.pb'

# 转换函数
def h5_to_pb(h5_model, output_dir, model_name, out_prefix="output_", log_tensorboard=True):
    if osp.exists(output_dir) == False:
        os.mkdir(output_dir)
    out_nodes = []
    for i in range(len(h5_model.outputs)):
        out_nodes.append(out_prefix + str(i + 1))
        tf.identity(h5_model.output[i], out_prefix + str(i + 1))
    sess = K.get_session()
    from tensorflow.python.framework import graph_util, graph_io
    init_graph = sess.graph.as_graph_def()
    main_graph = graph_util.convert_variables_to_constants(sess, init_graph, out_nodes)
    graph_io.write_graph(main_graph, output_dir, name=model_name, as_text=False)
    if log_tensorboard:
        from tensorflow.python.tools import import_pb_to_tensorboard
        import_pb_to_tensorboard.import_to_tensorboard(osp.join(output_dir, model_name), output_dir)

# 输出路径
output_dir = osp.join(os.getcwd(), "trans_model")
# 加载模型
print(weight_file_path)
h5_model = load_model(weight_file_path)
# model.load_weights
h5_to_pb(h5_model, output_dir=output_dir, model_name=output_graph_name)
print('model saved')

TensorFlow(.pb) 转TensorRT(.uff)

只需要安装好TensorRT之后通过终端运行convert-to-uff resnet50.pb即可得到resnet50.uff 。

测试:如果你想实验一下可以根据tensorrt自带的例子来进行实验,过程如下:

  • 在jetson nano上测试tensorRT,tensorrt是当时安装镜像的时候就自带有得,通过import tensorrt和import
    uff都能够成功,进行测试得时候我用得是在/usr/src/tensorrt/samples/python文件夹下有很多python的例子,我们以第一个end_to_end_tensorflow_mnist的例子为例,

    mkdir models python model.py

    然后下载数据mnist.npz,并开始训练,完成后在models文件夹下生成lenet5.pb文件
    在这里插入图片描述
    然后在进行格式转换,要将tensorflow的pb文件转化为uff格式的文件,首先找到convert_to_uff文件,看自己用的是哪个版本的python,如果是python3,则在/usr/lib/python3.5/dist-packages/uff/bin文件夹下,如果是python2,则在/usr/lib/python2.7/dist-packages/uff/bin文件夹下,我们在终端中进入end_to_end_tensorflow_mnist,运行以下指令

python3 /usr/lib/python3.6/dist-packages/uff/bin/convert_to_uff.py --input_file models/lenet5.pb

则会在models文件夹中生成lenet5.uff文件,完成转换,在通过sample.py进行测试,出现报错没有安装pycuda,后发现这个库是用于GPU加速的。

再次运行python3 sample.py 报错Could not find 9.pgm。

解决:在/usr/src/tensorrt/data/mnist下找到download_pgms.py文件并通过python3运行即可。
后面就通过了,运行sample.py之后出现
Test Case:8
Prediction:8

目录
相关文章
|
1天前
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
81 2
|
2天前
|
机器学习/深度学习 vr&ar
深度学习笔记(十):深度学习评估指标
关于深度学习评估指标的全面介绍,涵盖了专业术语解释、一级和二级指标,以及各种深度学习模型的性能评估方法。
7 0
深度学习笔记(十):深度学习评估指标
|
2天前
|
机器学习/深度学习 Python
深度学习笔记(九):神经网络剪枝(Neural Network Pruning)详细介绍
神经网络剪枝是一种通过移除不重要的权重来减小模型大小并提高效率的技术,同时尽量保持模型性能。
8 0
深度学习笔记(九):神经网络剪枝(Neural Network Pruning)详细介绍
|
2天前
|
机器学习/深度学习 算法 TensorFlow
深度学习笔记(五):学习率过大过小对于网络训练有何影响以及如何解决
学习率是深度学习中的关键超参数,它影响模型的训练进度和收敛性,过大或过小的学习率都会对网络训练产生负面影响,需要通过适当的设置和调整策略来优化。
28 0
深度学习笔记(五):学习率过大过小对于网络训练有何影响以及如何解决
|
2天前
|
机器学习/深度学习 算法
深度学习笔记(四):神经网络之链式法则详解
这篇文章详细解释了链式法则在神经网络优化中的作用,说明了如何通过引入中间变量简化复杂函数的微分计算,并通过实例展示了链式法则在反向传播算法中的应用。
10 0
深度学习笔记(四):神经网络之链式法则详解
|
1天前
|
机器学习/深度学习 编解码 计算机视觉
深度学习笔记(十一):各种特征金字塔合集
这篇文章详细介绍了特征金字塔网络(FPN)及其变体PAN和BiFPN在深度学习目标检测中的应用,包括它们的结构、特点和代码实现。
5 0
|
2天前
|
机器学习/深度学习 数据可视化 Windows
深度学习笔记(七):如何用Mxnet来将神经网络可视化
这篇文章介绍了如何使用Mxnet框架来实现神经网络的可视化,包括环境依赖的安装、具体的代码实现以及运行结果的展示。
9 0
|
2天前
|
机器学习/深度学习 Python
深度学习笔记(六):如何运用梯度下降法来解决线性回归问题
这篇文章介绍了如何使用梯度下降法解决线性回归问题,包括梯度下降法的原理、线性回归的基本概念和具体的Python代码实现。
10 0
|
3天前
|
机器学习/深度学习 边缘计算 人工智能
探讨深度学习在图像识别中的应用及优化策略
【10月更文挑战第5天】探讨深度学习在图像识别中的应用及优化策略
14 1
|
3天前
|
机器学习/深度学习 存储 数据处理
深度学习在图像识别中的应用与挑战
【10月更文挑战第5天】 本文旨在探讨深度学习技术在图像识别领域的应用及其所面临的挑战。随着深度学习技术的飞速发展,其在图像识别中的应用日益广泛,不仅推动了相关技术的革新,也带来了新的挑战。本文首先介绍了深度学习的基本原理和常见模型,然后详细探讨了卷积神经网络(CNN)在图像识别中的具体应用,包括图像分类、目标检测等任务。接着,分析了当前深度学习在图像识别中面临的主要挑战,如数据标注问题、模型泛化能力、计算资源需求等。最后,提出了一些应对这些挑战的可能方向和策略。通过综合分析,本文希望为深度学习在图像识别领域的进一步研究和应用提供参考和启示。

热门文章

最新文章