TensorFlow 2.3.0目标检测项目如何输出精度及mAP等评估指标?
解决TensorFlow 2.x目标检测训练中查看Accuracy、mAP等指标的问题
首先,你已经在配置文件里正确配置了coco_detection_metrics,这个指标集本身就包含了mAP(不同IoU阈值)、precision、recall等核心检测指标,不需要修改model_lib_v2.py的代码——问题大概率出在指标的查看方式或者训练命令的执行细节上,下面一步步帮你解决:
一、先确认训练命令的关键参数
你当前的训练命令已经包含了评估训练集的参数,但要注意两个细节:
--num_eval_steps={num_eval_steps}:这个值不能设得太小。比如你的训练集有1000张图,sample_1_of_n_eval_on_train_examples=10意味着每次评估会抽取100张图,若你batch_size是16,num_eval_steps至少要设为7左右,否则评估没跑完就终止,不会生成完整的指标。- 确保
eval_input_reader指向的test.record是有效的,包含完整的标注数据。
二、正确在TensorBoard中查看指标
你提到只能看到loss,是因为TensorBoard默认显示训练的基础scalar指标,而COCO检测指标需要主动筛选:
- 在Colab中启动TensorBoard,指向你的模型保存目录:
%load_ext tensorboard %tensorboard --logdir={model_dir}
- 在TensorBoard界面中操作:
- 切换到SCALARS标签页
- 在左侧搜索框输入
coco,就能看到所有COCO相关指标,比如:coco_detection_metrics/mAP:整体平均精度coco_detection_metrics/mAP@0.5:IoU=0.5阈值下的mAPcoco_detection_metrics/precision:精度指标
- 若要查看训练集的评估结果,找带有
_train后缀的指标(因为你开启了--eval_training_data=True)
三、如果还是看不到指标,排查以下几点
- 检查训练日志:
训练过程中,控制台会打印评估结果,你可以在Colab的输出日志里搜索Eval metrics at step,后面会跟着所有计算好的指标(包括COCO的mAP、precision等)。如果日志里有这些值,说明指标已经生成,只是TensorBoard没加载完成,刷新页面或等待几分钟即可。 - 放弃TF1.x的
eval.py:
TF2.x的目标检测API已经把训练和评估整合到model_main_tf2.py中,单独使用TF1的脚本必然会报错,你当前用TF2脚本的方向是完全正确的。 - 确认配置文件的
eval_config:
你的eval_config配置是正确的,metrics_set: "coco_detection_metrics"已经涵盖了你需要的所有精度相关指标,无需修改。
四、如果需要额外添加自定义Accuracy指标(可选)
如果你想要单独的分类accuracy指标(比如每个类别的检测准确率),可以在model_lib_v2.py的评估逻辑里补充,但其实COCO指标已经覆盖了这类需求。若确实需要,可参考以下方式修改你提到的845-858行代码:
# 在eval_metrics.update(evaluator.evaluate())之后添加 from object_detection.utils import metrics # 需根据模型输出的预测类别、真实类别数据调整 accuracy = metrics.accuracy(predictions, groundtruth_classes) eval_metrics['classification_accuracy'] = accuracy.result()
最后提醒:训练过程中评估会定期执行(默认每1000步一次,可在train_config中添加evaluation_interval_steps调整频率),耐心等待几个评估周期,就能在日志和TensorBoard里看到完整的指标了。
内容的提问来源于stack exchange,提问作者TechEnth
相关产品推荐
相关产品推荐

