常见模型转换大全

.H5转.tflite方法一:

import tensorflow as tf


saved_model_dir='evopose2d_S_f32.h5'

model=tf.keras.models.load_model(saved_model_dir)
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with open('model3.tflite', 'wb') as w:
    w.write(tflite_model)

.H5转.tflite方法二:

import tensorflow as tf
from tensorflow.python.framework import ops
from tensorflow.python.ops import math_ops
from tensorflow.python.keras import backend as K


#自定义损失
def ReprojectionLoss(y_true, y_pred):
    y_pred = ops.convert_to_tensor_v2(y_pred)
    y_true = math_ops.cast(y_true, y_pred.dtype)
    y_pred = K.reshape(y_pred,(-1,27,2))
    y_true = K.reshape(y_true, (-1, 27, 2))
    return K.sqrt(K.mean(K.sum(math_ops.squared_difference(y_pred, y_true),axis=-1),axis=-1))

def ReprojectionMetrics(y_true,y_pred):

    return ReprojectionLoss(y_true, y_pred)

if __name__ == "__main__":
    # 将h5模型转化为tflite模型方法1
    modelparh = r'evopose2d_XS.h5'
    model = tf.keras.models.load_model(modelparh, custom_objects = {'ReprojectionLoss': ReprojectionLoss, 'ReprojectionMetrics': ReprojectionMetrics})

    converter = tf.lite.TFLiteConverter.from_keras_model(model)

    tflite_model = converter.convert()
    savepath = r'model5.tflite'
    open(savepath, "wb").write(tflite_model)

.H5转.tflite方法三:

tflite_convert --output_file=my_model.tflite --keras_model_file=my_model.h5
hdf5转.pb
from keras.models import load_model
from keras import backend as K
import tensorflow as tf
from tensorflow.python.framework import graph_io

def freeze_session(session, keep_var_names=None, output_names=None, clear_devices=True):
    from tensorflow.python.framework.graph_util import convert_variables_to_constants
    graph = session.graph
    with graph.as_default():
        freeze_var_names = list(set(v.op.name for v in tf.global_variables()).difference(keep_var_names or []))
        output_names = output_names or []
        output_names += [v.op.name for v in tf.global_variables()]
        input_graph_def = graph.as_graph_def()
        if clear_devices:
            for node in input_graph_def.node:
                node.device = ""
        frozen_graph = convert_variables_to_constants(session, input_graph_def,
                                                      output_names, freeze_var_names)
        return frozen_graph

# 设置路径
h5_model_path = './models/muti_27models_zhenren/muti_27_weights-01186-2.1951.hdf5'
output_path = './models/muti_27models_zhenren/'
pb_model_name = 'muti_27_weights-01186-2.1951.pb'

# 加载keras模型
K.set_learning_phase(0)
net_model = load_model(h5_model_path)

print('input is :', net_model.input.name)
print('output is:', net_model.output.name)

# 冻结并保存为Tensorflow模型
sess = K.get_session()
frozen_graph = freeze_session(K.get_session(), output_names=[net_model.output.op.name])
graph_io.write_graph(frozen_graph, output_path, pb_model_name, as_text=False)

 .H5转.pb

import tensorflow as tf
from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2

saved_model_dir='model.h5'
model=tf.keras.models.load_model(saved_model_dir)


full_model = tf.function(lambda inputs: model(inputs))
full_model = full_model.get_concrete_function(inputs = (tf.TensorSpec((1, 256, 256, 3), model.inputs[0].dtype)))
frozen_func = convert_variables_to_constants_v2(full_model, lower_control_flow=False)
frozen_func.graph.as_graph_def()
tf.io.write_graph(graph_or_graph_def=frozen_func.graph,
                    logdir=".",
                    name="pb_model.pb",
                    as_text=False)

猜你喜欢

转载自blog.csdn.net/wzhrsh/article/details/116229397