harvitronix / five-video-classification-methods

Code that accompanies my blog post outlining five video classification methods in Keras and TensorFlow
https://medium.com/@harvitronix/five-video-classification-methods-implemented-in-keras-and-tensorflow-99cad29cc0b5
MIT License
1.18k stars 478 forks source link

lrcn model to onnx error #145

Open Magsun opened 4 years ago

Magsun commented 4 years ago

@harvitronix hello Harvey, thanks to your really good tutorial for video classification.

I followed your instruction to train my own lrcn video classification model and it works well under tensorflow&keras. But when I tried to convert this .hdf5 model to .onnx, I met this error below:

env info: tf-gpu 1.14 tb-nightly cuda10.1 onnx 1.7.0 keras2onnx 1.6.1 python3.6

Traceback (most recent call last): File "/workspace/h52onnx.py", line 15, in onnx_model = keras2onnx.convert_keras(model, model.name) File "/opt/conda/lib/python3.6/site-packages/keras2onnx/main.py", line 95, in convert_keras return convert_topology(topology, name, doc_string, target_opset, channel_first_inputs) File "/opt/conda/lib/python3.6/site-packages/keras2onnx/topology.py", line 243, in convert_topology get_converter(operator.type)(scope, operator, container) File "/opt/conda/lib/python3.6/site-packages/keras2onnx/ke2onnx/main.py", line 94, in convert_keras_flatten shape_len = len(iop.input_shape) File "/opt/conda/lib/python3.6/site-packages/keras/engine/base_layer.py", line 918, in input_shape raise AttributeError('The layer has never been called ' AttributeError: The layer has never been called and thus has no defined input shape.

image

For your information, I only changed input size from self.input_shape = (seq_length, 80, 80, 3) to self.input_shape = (seq_length, 320, 320, 3).

Convert code listed below:

import keras import keras2onnx import onnx from keras.models import load_model

model = load_model('/workspace/lrcn-images.050-1.443.hdf5') onnx_model = keras2onnx.convert_keras(model, model.name) temp_model_file = '/workspace/model.onnx' onnx.save_model(onnx_model, temp_model_file)

Kindly help. Thanks again.