使用TensorFlow Object Detection API评估自定义数据集时的标注警告问题
groundtruth difficult flag警告 嘿,这个警告我之前也碰到过!别担心,它不是说你没给img05.jpg做真值标注,而是你的标注数据里缺了difficult这个标记字段——TensorFlow Object Detection API默认要求每个groundtruth bounding box都带这个属性,用来标记那些难以检测的目标(比如被遮挡、模糊的物体)。
下面给你两种靠谱的解决办法,选哪种都行:
方法一:补全标注里的
difficult字段
如果你的标注是PASCAL VOC格式的XML,打开img05.jpg对应的XML文件,确保每个<object>标签下都加一行<difficult>0</difficult>(0表示非困难样本,绝大多数情况都用0就行)。示例如下:<object> <name>your_target_class</name> <bndbox> <xmin>120</xmin> <ymin>80</ymin> <xmax>250</xmax> <ymax>180</ymax> </bndbox> <difficult>0</difficult> <!-- 必须添加这个字段 --> </object>如果是用TFRecord格式存储的数据集,那你需要在生成TFRecord的脚本里,给每个样本添加
groundtruth_difficulties特征,类型设为tf.int64,值全填0就行,长度要和groundtruth_boxes一致。方法二:修改评估配置文件跳过检查
要是不想改标注数据,直接在你的pipeline配置文件(.config)里找到eval_config区块,添加一行ignore_groundtruth_difficult_in_eval: true,这样API就会忽略这个字段的检查,警告自然就消失了。示例:eval_config: { metrics_set: "coco_detection_metrics" use_moving_averages: false ignore_groundtruth_difficult_in_eval: true # 新增这一行 }这个设置不会影响你的mAP结果,因为它只是告诉评估流程:我们没有困难样本,不用考虑这个字段。
你之前说评估能正常跑还能出mAP,说明这个警告只是个提示,不影响核心功能,但解决掉之后日志会清爽很多,也避免以后搞混问题~
内容的提问来源于stack exchange,提问作者rlg

