canntoolkit版本是:8.3.RC1
tensorflow版本是:2.10.0
numpy版本是:1.23.5
protobuf版本是:3.20.1
onnx版本是:1.12.0
yolov7_frozen_graph.pb获取方式:
方法1:
获取yolov7源码,然后通过export.py导出yolov7.onnx模型,使用onnx-tf工具将onnx模型转成yolov7_saved_model.pb文件夹,然后使用下边命令将yolov7_saved_model.pb文件夹转成atc命令可以识别的冻结图模型:
方法2: 直接使用tensorflow生成yolov7_saved_model文件夹代码如下:
将上述生成的yolov7_saved_model.pb文件夹转成atc命令可以识别的东截图模型:
最后使用atc命令将yolov7_frozen_graph.pb转om格式的时候报错如下:
报错如下:
此问题该如何解决?
canntoolkit版本是:8.3.RC1
tensorflow版本是:2.10.0
numpy版本是:1.23.5
protobuf版本是:3.20.1
onnx版本是:1.12.0
yolov7_frozen_graph.pb获取方式:
方法1:
获取yolov7源码,然后通过export.py导出yolov7.onnx模型,使用onnx-tf工具将onnx模型转成yolov7_saved_model.pb文件夹,然后使用下边命令将yolov7_saved_model.pb文件夹转成atc命令可以识别的冻结图模型:
import tensorflow as tf saved_model_dir='yolov7_saved_model' converter=tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) frozen_func=converter.convert() with open('yolov7_frozen_graph.pb','wb')as f: f.write(frozen_func)方法2: 直接使用tensorflow生成yolov7_saved_model文件夹代码如下:
import tensorflow as tf import numpy as np def build_yolov7_tf_model(): """构建TensorFlow版本的YOLOv7模型""" # 输入层 inputs = tf.keras.Input(shape=(640, 640, 3), name='input') # 简化的YOLOv7骨干网络 def conv_bn(x, filters, kernel_size, strides=1): x = tf.keras.layers.Conv2D( filters, kernel_size, strides=strides, padding='same', use_bias=False )(x) x = tf.keras.layers.BatchNormalization()(x) x = tf.keras.layers.LeakyReLU(alpha=0.1)(x) return x # 骨干网络 x = conv_bn(inputs, 32, 3, 1) x = conv_bn(x, 64, 3, 2) x = conv_bn(x, 32, 1, 1) x = conv_bn(x, 64, 3, 1) # 添加更多层... for filters in [128, 256, 512]: x = conv_bn(x, filters//2, 1, 1) x = conv_bn(x, filters, 3, 2) # 输出层 - 简化的检测头 outputs = tf.keras.layers.Conv2D( 255, 1, activation='sigmoid', name='output' )(x) # 创建模型 model = tf.keras.Model(inputs=inputs, outputs=outputs, name='yolov7_tf') return model def save_as_pb(model, save_dir='yolov7_saved_model'): """将模型保存为.pb格式""" # 使用SavedModel格式保存 tf.saved_model.save(model, save_dir) # 验证保存的模型 loaded_model = tf.saved_model.load(save_dir) print(f"模型已保存到: {save_dir}") print("模型包含的文件:") for file in os.listdir(save_dir): print(f" - {file}") return save_dir # 构建并保存模型 model = build_yolov7_tf_model() model.summary() # 保存为.pb格式 save_dir = save_as_pb(model)将上述生成的yolov7_saved_model.pb文件夹转成atc命令可以识别的东截图模型:
import tensorflow as tf saved_model_dir='yolov7_saved_model' converter=tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) frozen_func=converter.convert() with open('yolov7_frozen_graph.pb','wb')as f: f.write(frozen_func)最后使用atc命令将yolov7_frozen_graph.pb转om格式的时候报错如下:
报错如下:
ATC start working now, please wait for a moment. ... ATC run failed, Please check the detail log, Try 'atc --help' for more information [PID: 43381] 2025-11-24-14:14:32.667.714 Failure_to_Parse_File(E19005): Failed to parse file [yolov7_frozen_graph.pb]. Solution: Check that a matched Protobuf version is installed and try again with a valid file. For details, see section "--framework" in ATC Instructions. TraceBack (most recent call last): ATC model parse ret fail.[FUNC:ParseGraph][FILE:omg.cc][LINE:803]此问题该如何解决?