曾比黄花瘦 2025-11-30 10:54 采纳率: 0%
浏览 1

人群计数数据集UCF-QNRF标注问题

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

img

有一部分图片标注是这样的,其他的正常。数据集是从官网下载的,4个多G。
请问,这个数据集就是这样的么?

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2025-11-30 11:01
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    你提到的 UCF-QNRF 数据集是一个广泛用于人群计数任务的经典数据集,包含大量真实场景下的图像及其对应的点标注(point annotations)。然而,你发现的部分图片中存在标注坐标超出图像边界的问题,确实可能是个别图片或标注文件中的异常情况。


    ✅ 一、UCF-QNRF 数据集简介

    UCF-QNRF 是由 University of Central Florida 提供的一个大型人群计数数据集,包含:

    • 1500 张图像
    • 约 12,000 个标注点
    • 图像分辨率:3648 × 2432 像素(即宽度为 3648)

    每个图像对应一个 .txt 文件,其中每一行表示一个人的坐标(x, y),以像素为单位。


    ✅ 二、你遇到的问题分析

    你提到在 0087.jpg 图片中,有多个标注点的 x 坐标超过了 3648,这显然超出了图像的实际宽度。

    📌 可能原因如下:

    1. 标注错误

      • 部分标注点可能是手动输入时出错,导致 x 值超过图像尺寸。
      • 有些标注点可能是误标,比如将“宽”和“高”混淆了。
    2. 数据集中个别图片存在异常

      • UCF-QNRF 虽然整体质量较高,但并非所有图片都完美无缺,可能存在个别异常标注。
    3. 标注文件格式问题

      • 某些 .txt 文件中可能包含非数字字符或格式错误,导致解析时读取到无效值。

    ✅ 三、解决方案

    🔧 1. 验证并修复标注文件

    步骤一:检查标注文件中的坐标范围

    你可以编写脚本遍历所有 .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  # 忽略格式错误的行
    

    🔧 2. 手动检查和修正

    如果你发现某些图片的标注严重错误,可以:

    • 手动打开图像和对应的 .txt 文件,查看哪些点明显在图像外。
    • 删除或修正这些点,确保最终标注文件准确。

    🔧 3. 使用工具辅助验证

    你可以使用以下工具进行批量验证:

    • Python 脚本(如上)
    • 图像标注工具(如 LabelImg、VIA 等),用于可视化标注点是否正确。

    ✅ 四、UCF-QNRF 数据集是否正常?

    答案是:大部分情况下是正常的,但个别图片可能存在标注错误。

    • UCF-QNRF 是一个高质量的数据集,绝大多数标注是正确的
    • 但正如你所发现的,个别图片的标注文件中确实存在异常点,这可能是由于人工标注时的疏忽或数据处理过程中的错误。

    ✅ 五、建议

    • 建议你对整个数据集进行自动化校验,确保标注点都在图像范围内。
    • 如果你打算用于训练模型,务必清理这些异常标注点,否则会影响模型性能。
    • 如果你希望分享你的清理结果,也可以考虑发布一个经过清洗后的版本,帮助其他研究者。

    ✅ 六、总结

    | 问题 | 解决方案 | |------|----------| | 标注点超出图像范围 | 编写脚本验证并清理 | | 标注文件格式错误 | 自动过滤非法行 | | 数据集整体质量 | 大部分正常,但需注意个别异常 |


    如果你需要我提供完整的清洗代码或进一步解释某一部分,请告诉我!

    评论

报告相同问题?

问题事件

  • 创建了问题 11月30日