使用TensorFlow Object Detection API微调Mask R-CNN模型遇版本错误
解决ValueError: Checkpoint version should be V2问题
1. 检查Pipeline配置的路径设置
首先确认你的pipeline.config里的fine_tune_checkpoint字段,必须指向ckpt-0的前缀路径(不要加.index或.data后缀),绝对不能指向名为checkpoint的文本文件。正确示例:
fine_tune_checkpoint: "/content/pretrained-model/ckpt-0"
同时确保from_detection_checkpoint被设为true,这个参数会告知API从检测模型的预训练权重加载变量。
2. 转换TF1格式Checkpoint到TF2兼容版本
你下载的预训练模型大概率是TensorFlow 1.x格式,TF2.12无法直接兼容,可通过以下代码转换:
在Colab中运行(替换为你自己的路径):
import tensorflow as tf from object_detection.utils import config_util from object_detection.builders import model_builder # 加载pipeline配置 configs = config_util.get_configs_from_pipeline_file('/content/pipeline.config') model_config = configs['model'] # 构建训练模式的检测模型 detection_model = model_builder.build(model_config=model_config, is_training=True) # 从TF1 checkpoint加载权重 tf.compat.v1.train.init_from_checkpoint( '/content/pretrained-model/ckpt-0', {var.name.split(':')[0]: var for var in detection_model.trainable_variables} ) # 保存为TF2 V2格式的checkpoint checkpoint = tf.train.Checkpoint(model=detection_model) checkpoint.save('/content/converted-ckpt/ckpt-0')
转换完成后,将pipeline.config里的fine_tune_checkpoint路径改为转换后的/content/converted-ckpt/ckpt-0。
3. 直接下载TF2官方预训练模型(最简方案)
如果转换操作繁琐,直接下载TensorFlow Object Detection模型库中的TF2版本Mask R-CNN Inception ResNet V2 1024x1024模型(文件名通常带有tf2标识),替换现有预训练文件后重启训练即可。
4. 验证转换后的Checkpoint格式
运行以下命令确认格式是否符合要求:
python /content/models/research/object_detection/utils/inspect_checkpoint.py --checkpoint_path=/content/converted-ckpt/ckpt-0
若输出中包含Checkpoint is V2字样,说明格式转换成功。
内容的提问来源于stack exchange,提问作者Jon Fillip
相关产品推荐
相关产品推荐

