1. Descripción del problema
Como se menciona en el título, se informa un error al usar tf2onnx para convertir el modelo tensorflow a onnx, AttributeError: el objeto 'FuncGraph' no tiene el atributo '_captures'.
La versión de python es 3.9, la versión de tensorflow es 2.13 y el comando de conversión para ejecutar es:
python -m tf2onnx.convert --saved-model keras_graph_model --output model.onnx --opset 11 --verbose
2. Soluciones
Hay dos soluciones, una de las cuales es causada por la discrepancia de versión entre tensorflow y python, que debe reemplazarse con la versión correcta.
Otra forma más sencilla y rápida es modificar el código en el archivo tf2onnx. La solución en github se muestra a continuación:
El funcionamiento real es el siguiente. Modifique el siguiente código en el archivo tf_loader.py:
graph_captures = concrete_func.graph.captures
captured_inputs = [t_name.name for _, t_name in graph_captures.values()]
cambie a:
graph_captures = concrete_func.graph.captures
captured_inputs = [t_name.name for t_val, t_name in graph_captures]