人群计数数据集UCF-QNRF,验证图片标注,发现部分有问题。
比如0087这张图片,宽度是3648,但是标注文件中出现了大量的超过宽度的x坐标。如图所示。

有一部分图片标注是这样的,其他的正常。数据集是从官网下载的,4个多G。
请问,这个数据集就是这样的么?
人群计数数据集UCF-QNRF,验证图片标注,发现部分有问题。
比如0087这张图片,宽度是3648,但是标注文件中出现了大量的超过宽度的x坐标。如图所示。

有一部分图片标注是这样的,其他的正常。数据集是从官网下载的,4个多G。
请问,这个数据集就是这样的么?
上午好☀️☀️☀️️
本答案参考通义千问
你提到的 UCF-QNRF 数据集是一个广泛用于人群计数任务的经典数据集,包含大量真实场景下的图像及其对应的点标注(point annotations)。然而,你发现的部分图片中存在标注坐标超出图像边界的问题,确实可能是个别图片或标注文件中的异常情况。
UCF-QNRF 是由 University of Central Florida 提供的一个大型人群计数数据集,包含:
每个图像对应一个 .txt 文件,其中每一行表示一个人的坐标(x, y),以像素为单位。
你提到在 0087.jpg 图片中,有多个标注点的 x 坐标超过了 3648,这显然超出了图像的实际宽度。
标注错误
数据集中个别图片存在异常
标注文件格式问题
.txt 文件中可能包含非数字字符或格式错误,导致解析时读取到无效值。你可以编写脚本遍历所有 .txt 文件,检查每行的 x 和 y 坐标是否在图像范围内(0 ≤ x < 3648, 0 ≤ y < 2432)。
import os
def validate_annotations(image_width=3648, image_height=2432):
base_dir = "path/to/your/UCF-QNRF/Annotations" # 替换为你的标注目录
for filename in os.listdir(base_dir):
if filename.endswith(".txt"):
file_path = os.path.join(base_dir, filename)
with open(file_path, 'r') as f:
lines = f.readlines()
for i, line in enumerate(lines):
try:
x, y = map(int, line.strip().split())
if x < 0 or x >= image_width or y < 0 or y >= image_height:
print(f"Invalid annotation in {filename} at line {i+1}: ({x}, {y})")
except ValueError:
print(f"Invalid format in {filename} at line {i+1}: {line}")
你可以修改上述脚本,将无效标注点移除或标记为无效。
def clean_annotations(input_dir, output_dir, image_width=3648, image_height=2432):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for filename in os.listdir(input_dir):
if filename.endswith(".txt"):
input_path = os.path.join(input_dir, filename)
output_path = os.path.join(output_dir, filename)
with open(input_path, 'r') as fin, open(output_path, 'w') as fout:
for line in fin:
try:
x, y = map(int, line.strip().split())
if 0 <= x < image_width and 0 <= y < image_height:
fout.write(line)
except:
pass # 忽略格式错误的行
如果你发现某些图片的标注严重错误,可以:
.txt 文件,查看哪些点明显在图像外。你可以使用以下工具进行批量验证:
答案是:大部分情况下是正常的,但个别图片可能存在标注错误。
| 问题 | 解决方案 | |------|----------| | 标注点超出图像范围 | 编写脚本验证并清理 | | 标注文件格式错误 | 自动过滤非法行 | | 数据集整体质量 | 大部分正常,但需注意个别异常 |
如果你需要我提供完整的清洗代码或进一步解释某一部分,请告诉我!