- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I have trained a YoloV3 model with keras and get the H5 format. Then l use the "keras_to_tf.py" file(shown as follows) to convert the H5 format to Pb format.
import os
import sys
import argparse
from pathlib import Path
import tensorflow as tf
from tensorflow.python.framework import graph_util
from tensorflow.python.framework import graph_io
from keras import backend as K
from keras.models import load_model
def setKerasOptions():
K._LEARNING_PHASE = tf.constant(0)
K.set_learning_phase(False)
K.set_learning_phase(0)
K.set_image_data_format('channels_last')
def getInputParameters():
parser = argparse.ArgumentParser()
parser.add_argument('--input_model', '-m', required=True, type=str, help='Path to Keras model.')
parser.add_argument('--num_outputs', '-no', required=False, type=int, help='Number of outputs. 1 by default.', default=1)
return parser
def export_keras_to_tf(input_model, output_model, num_output):
print('Loading Keras model: ', input_model)
keras_model = load_model(input_model)
print(keras_model.summary())
predictions = [None] * num_output
predrediction_node_names = [None] * num_output
for i in range(num_output):
predrediction_node_names = 'output_node' + str(i)
predictions = tf.identity(keras_model.outputs, name=predrediction_node_names)
sess = K.get_session()
constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph.as_graph_def(), predrediction_node_names)
infer_graph = graph_util.remove_training_nodes(constant_graph)
graph_io.write_graph(infer_graph, '.', output_model, as_text=False)
def main():
argv = getInputParameters().parse_args()
input_model = argv.input_model
num_output = argv.num_outputs
output_model = str(Path(input_model).name) + '.pb'
predrediction_node_names = export_keras_to_tf(input_model, output_model, num_output)
print('Ouput nodes are:', predrediction_node_names)
print('Saved as TF frozen model to: ', output_model)
if __name__ == '__main__':
main()
But there are some errors like name 'yolo_head' is not defined, name 'tf' is not defined, name 'box_iou' is not defined and Unknown loss function:<lambda>.
Then l change the code in the following way:
-
from yolo3.model import yolo_head, box_iou
-
keras_model = load_model(input_model,{"yolo_head":yolo_head, "tf":tf, "box_iou":box_iou,'<lambda>': lambda y_true, y_pred: y_pred})
And in this way , I successfully covert Pb format to H5 format.
After that, l try to convert Pb format to IR format but some errors occurred. I use this code:
python mo_tf.py --input_model ./trained_weights_final.h5.pb --input_shape [1,416,416,3] --disable_nhwc_to_nchw --output_dir ./keras-yolo3-master --tensorflow_use_custom_operations_config ./deployment_tools/model_optimizer/extensions/front/tf/yolo_v3.json --data_type=FP16
ERRORS:
Model Optimizer version: 2019.3.0-408-gac8584cb7 [ ERROR ] Original placeholders: 'input_1, input_2, input_3, input_4'. Freezing was requested for ''. --input_shape was provided without --input. Can not deduce which node shape to override Exception occurred during running replacer "REPLACEMENT_ID" (<class 'extensions.front.user_data_repack.UserDataRepack'>): Original placeholders: 'input_1, input_2, input_3, input_4'. Freezing was requested for ''. --input_shape was provided without --input. Can not deduce which node shape to override
l think there may be some mistakes in the yolo_v3.json file but l don't know how to figure out the correct node names for the entry points for my model.
[
{
"id": "TFYOLOV3",
"match_kind": "general",
"custom_attributes": {
"classes": 4,
"anchors": [10, 13, 16, 30, 33, 23, 30, 61, 62, 45, 59, 119, 116, 90, 156, 198, 373, 326],
"coords": 4,
"num": 9,
"masks":[[6, 7, 8], [3, 4, 5], [0, 1, 2]],
"entry_points": ["detector/yolo-v3/Reshape", "detector/yolo-v3/Reshape_4", "detector/yolo-v3/Reshape_8"]
}
}
]
I was wondering if someone could help me out. It is been quite some time and I still could not solve it. I am kind of stuck so I would really appreciate any help.
I upload pb files and some relevant screenshots.
Best regards,
Kathryn
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
And when l use this code:
python mo_tf.py --input_model C:/Users/倪妹/Desktop/NJM_test/keras-yolo3-master/trained_weights_final.h5.pb --output_dir C:/Users/倪妹/Desktop/NJM_test/keras-yolo3-master --tensorflow_use_custom_operations_config C:/Users/倪妹/Desktop/NJM_test/keras-yolo3-master/deployment_tools/model_optimizer/extensions/front/tf/yolo_v3.json --batch 1
The error shows as follows:
Model Optimizer version: 2019.3.0-408-gac8584cb7 [ ERROR ] TensorFlow YOLO V3 conversion mechanism was enabled. Entry points "detector/yolo-v3/Reshape, detector/yolo-v3/Reshape_4, detector/yolo-v3/Reshape_8" were provided in the configuration file. Entry points are nodes that feed YOLO Region layers. Node with name detector/yolo-v3/Reshape doesn't exist in the graph. Refer to documentation about converting YOLO models for more information. Exception occurred during running replacer "TFYOLOV3" (<class 'extensions.front.tf.YOLO.YoloV3RegionAddon'>): TensorFlow YOLO V3 conversion mechanism was enabled. Entry points "detector/yolo-v3/Reshape, detector/yolo-v3/Reshape_4, detector/yolo-v3/Reshape_8" were provided in the configuration file. Entry points are nodes that feed YOLO Region layers. Node with name detector/yolo-v3/Reshape doesn't exist in the graph. Refer to documentation about converting YOLO models for more information.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page