TensorFlow Object Detection API迁移至Jupyter Notebook后无法检测物体
排查模型迁移后无法检测的问题
针对你把Colab训练的手语检测模型迁移到Jupyter Notebook后无检测结果的问题,按以下步骤排查:
1. 确认模型权重完整加载
- 检查本地
D:/Conda/sample_project/models/content/training/目录下的 checkpoint 文件是否完整,必须包含.index、.data-00000-of-00001、.meta三个文件,缺一不可。 - 打印
model_dir确认路径正确:
确保输出路径对应到完整的ckpt前缀(比如print(model_dir)D:/Conda/sample_project/models/content/training/model.ckpt-XXXX),且该路径下的所有ckpt文件都存在。
2. 修正标签映射路径
- 你的代码从
configs['eval_input_config'].label_map_path读取标签路径,但这个路径可能还是Colab上的绝对路径,本地无法访问。直接手动指定本地的label_map路径:
避免依赖config文件里的旧路径导致标签加载失败。# 替换成你本地label_map.pbtxt的实际路径 label_map_path = 'D:/Conda/sample_project/models/content/training/label_map.pbtxt'
3. 检查TensorFlow版本兼容性
- 对比Colab和本地Jupyter的TensorFlow版本:
如果版本差异较大(比如Colab用TF2.15,本地用TF2.8),可能出现模型权重不兼容的情况。建议将本地TF版本升级到和Colab一致,或者重新在本地环境微调模型。import tensorflow as tf print(tf.__version__)
4. 调低检测阈值排查结果
- 当前代码设置的
min_score_thresh=.5可能过高,本地推理的检测分数可能普遍偏低。先调低阈值到0.1,看看是否有检测框出现:
同时打印所有检测分数,确认是否有有效结果:viz_utils.visualize_boxes_and_labels_on_image_array( # ... 其他参数不变 min_score_thresh=.1, # ... )print("所有检测分数:", detections['detection_scores'][0].numpy()[:10])
5. 验证输入图片预处理一致性
- 检查
load_image_into_numpy_array函数的处理逻辑是否和训练时一致,比如图片的尺寸缩放、通道顺序(RGB/BGR)、像素值范围(是否归一化到0-1或0-255)。 - 打印输入图片的基本信息:
确保和训练数据集的输入格式完全匹配。print("图片形状:", image_np.shape) print("像素值范围:", image_np.min(), "-", image_np.max())
6. 补全模型权重恢复步骤
- 你的代码中构建了检测模型,但可能遗漏了从ckpt恢复权重的步骤。添加以下代码:
这一步是加载训练好的权重到模型的关键,Colab代码可能默认包含了,但迁移时可能遗漏。detection_model = model_builder.build( model_config=model_config, is_training=False) # 新增:从checkpoint恢复权重 ckpt = tf.compat.v2.train.Checkpoint(model=detection_model) ckpt.restore(model_dir).expect_partial() detect_fn = get_model_detection_function(detection_model)
内容的提问来源于stack exchange,提问作者Grandpa
相关产品推荐
相关产品推荐

