为何处理Oxford building数据集时代码统计值为4390而非官方标注的5062?
问题原因排查
- query标注文件的解析逻辑错误:good、ok、junk三类标注文件每行仅存储无后缀的纯图像名,你的处理逻辑对这三类是有效的。但query标注文件每行的格式为
[图像名] [x1] [y1] [x2] [y2],包含了查询目标的边界框坐标,你直接对整行内容做strip后拼接.jpg,得到的字符串根本不是合法的图像文件名,这部分的统计是无效的,会拉低有效条目的总数。 - 统计逻辑不符合预期:你统计的
z值是所有标注条目的总出现次数,而非去重后的唯一图像总数。同一张图像可能被多个查询的gt文件标注为相关(比如同一张图属于A查询的good类,也属于B查询的ok类),如果你要统计的是总图像数,需要先对allnames列表去重后再统计长度,而不是直接统计累加的z值。 - groundtruth标注本身不会覆盖所有5062张图像:官方提供的gt仅标注了和55个查询相关的图像,剩下的图像属于所有查询的无关负样本,不会出现在good/ok/junk/query四类标注文件中,所以你遍历gt条目统计到的数量本身就不可能等于总图像数5062,你要获取全量图像列表应该直接遍历
images文件夹统计,而不是通过gt文件反向统计。 - 补充排查点:先核对groundtruth文件夹的文件总数,标准Oxford 5k数据集的gt文件共220个(11个建筑类别,每个类别对应5个查询,每个查询对应4个标注文件),如果文件数少于220,会直接导致统计的条目数偏少。
- 冗余操作提醒:你的代码中对gt路径列表转set的操作完全多余,
os.listdir返回的文件名本身就是唯一的,转set不会带来任何收益,反而会打乱文件遍历顺序。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

