如何将.h5模型转换为.pb模型?解决ImageAI加载.pb模型失败问题
ImageAI视频检测场景下H5转PB模型的适配方案
问题定位
当前调用ImageAI的VideoObjectDetection模块时,直接将目录下的saved_model.pb文件作为模型路径传入,会出现模型读取失败的问题。本质原因是ImageAI的YOLOv3加载逻辑仅支持读取TF SavedModel格式的模型目录,无法直接解析孤立的PB文件,需要完成H5权重到适配性SavedModel目录的转换流程。
具体转换操作
- 前置依赖准备
需安装匹配版本的依赖,避免版本不兼容导致图结构解析失败,执行命令:pip install tensorflow==2.4.0 keras==2.4.3 - H5转适配PB模型的核心代码
import tensorflow as tf from tensorflow import keras # 加载本地存储的H5格式YOLOv3权重,关闭编译避免自定义层缺失报错 h5_model = keras.models.load_model("你的本地yolov3权重文件.h5", compile=False) # 导出为ImageAI可识别的SavedModel(包含标准PB计算图与配套变量文件) tf.saved_model.save( h5_model, export_dir="./imageai_supported_pb_dir", signatures=h5_model.call )
- 原有调用代码修正
核心修正点:模型路径不要直接指向孤立的pb文件,要指向导出的SavedModel根目录
from imageai.Detection import VideoObjectDetection import os execution_path = os.getcwd() detector = VideoObjectDetection() detector.setModelTypeAsYOLOv3() detector.setModelPath(os.path.join(execution_path, "./imageai_supported_pb_dir")) detector.loadModel()
实操注意事项
- 导出模型时不要使用2.6以上版本的TensorFlow,高版本导出的模型签名格式不被当前ImageAI版本兼容,会触发计算图解析错误
- 检查导出的
imageai_supported_pb_dir目录结构,必须同时包含saved_model.pb文件、variables子目录,缺项会导致模型加载失败 - 若H5文件中包含YOLOv3的自定义层,需在加载代码前提前注册自定义层映射关系,否则会抛出“未知层”的加载报错
内容的提问来源于stack exchange,提问作者Tee Adkins
相关产品推荐
相关产品推荐

