如何使用Tensorflow 2 Object Detection API恢复微调模型并测试
你当前的操作逻辑基本可行,但存在几个容易引发异常或结果偏差的疏漏:
- 手动修改的checkpoint索引文件需要保证路径、检查点前缀和你存放的ckpt-14文件完全匹配,任何拼写错误都会导致检查点加载失败
- 测试用的pipeline配置除了输入数据集路径外,其余模型结构、预处理逻辑、
use_moving_averages等超参数必须和训练配置完全一致,否则会出现精度偏差或加载报错 - 要确保
test.record的标注格式、类别数量和训练用的数据集完全对齐,否则COCO指标计算会出现异常
TensorFlow 2 Object Detection API 指定检查点测试的规范流程
无需手动复制检查点文件或修改checkpoint索引文件,直接通过修改配置+官方脚本执行即可,步骤如下:
1. 修改pipeline配置文件
只需修改两个字段即可:
# 替换评估输入为测试集 eval_input_reader: { label_map_path: "/label_map.pbtxt" shuffle: false num_epochs: 1 tf_record_input_reader { input_path: "/test.record" # 替换为你的测试集路径 } } # 评估配置新增指定检查点、单次执行参数 eval_config: { metrics_set: "coco_detection_metrics" use_moving_averages: false # 必须和训练时的配置保持一致 batch_size: 1; checkpoint_path: "/你的训练输出目录/ckpt-14" # 直接指定要加载的检查点前缀,无需加.index、.data后缀 run_once: true # 跑完一次测试就退出,不需要轮询新检查点 }
2. 执行测试命令
直接调用官方提供的model_main_tf2.py脚本启动评估即可:
python models/research/object_detection/model_main_tf2.py \ --pipeline_config_path=你的pipeline.config文件路径 \ --model_dir=指定一个空文件夹存放测试日志和结果 \ --checkpoint_dir=你的训练输出目录路径 \ --eval_training_data=False
可选:导出模型后离线测试
如果需要多次测试或者复用最优模型,可以先将指定检查点导出为SavedModel格式,再运行评估:
python models/research/object_detection/exporter_main_v2.py \ --input_type=image_tensor \ --pipeline_config_path=你的pipeline.config文件路径 \ --trained_checkpoint_dir=你的训练输出目录路径 \ --output_directory=导出模型的保存目录 \ --checkpoint_number=14 # 指定要导出的检查点编号
导出完成后,你可以直接基于SavedModel文件运行自定义的评估逻辑,也可以继续用官方评估脚本跑测试集指标。
内容的提问来源于stack exchange,提问作者F.M.
相关产品推荐
相关产品推荐

