tfhub 上的 pb 文件,为什么不能直接 在 opencv 中使用
时间: 2024-03-20 21:39:03 浏览: 52
TensorFlow Hub 上提供的模型是以 TensorFlow SavedModel 或者 TensorFlow Hub 格式保存的,无法直接在 OpenCV 中使用。因为 OpenCV 并不支持直接加载 TensorFlow 模型。
如果需要在 OpenCV 中使用 TensorFlow 模型,需要先将 TensorFlow 模型转换为 OpenCV 支持的格式,如 OpenCV DNN 支持的 `*.pbtxt` 或 `*.pb` 格式。
可以使用 TensorFlow 提供的工具 `freeze_graph.py` 将 SavedModel 格式的模型转换为 `*.pb` 格式,然后再使用 OpenCV DNN 模块提供的 `readNetFromTensorflow()` 函数加载模型。
具体的步骤如下:
1. 将 TensorFlow SavedModel 格式的模型转换为 `*.pb` 格式:
```shell
python3 -m tensorflow.python.tools.freeze_graph \
--input_saved_model_dir=/path/to/saved_model \
--output_graph=/path/to/frozen_graph.pb \
--output_node_names=output_node_name
```
其中,`/path/to/saved_model` 为 SavedModel 格式的模型所在目录,`/path/to/frozen_graph.pb` 为转换后的 `*.pb` 格式的模型保存路径,`output_node_name` 为模型输出节点的名称。
2. 加载转换后的 `*.pb` 格式的模型:
```python
import cv2
net = cv2.dnn.readNetFromTensorflow('/path/to/frozen_graph.pb')
```
其中,`/path/to/frozen_graph.pb` 为转换后的 `*.pb` 格式的模型保存路径。
然后就可以使用 OpenCV DNN 模块提供的函数进行推理了。
阅读全文