目标检测标注格式

这是一个非常核心且重要的问题。理解这三种主流标注格式的区别,对于进行目标检测任务至关重要。

我将通过一个 核心对比表格详细的逐一解析 来帮助你彻底弄懂它们。

核心对比一览表

|-----------|-------------------------------------------------------------|--------------------------------------------------------------------------|----------------------------------------------------------|
| 特性 | PASCAL VOC 格式 | YOLO 格式 | COCO 格式 |
| 文件类型 | XML (.xml) | 文本文件 (.txt) | JSON (.json) |
| 文件结构 | 每个图像一个标注文件 | 每个图像一个标注文件 | 整个数据集一个总标注文件 |
| 坐标表示 | 绝对像素坐标 (角点)<br><xmin>, <ymin>, <xmax>, <ymax> | 归一化相对坐标 (中心点)<br><x_center>, <y_center>, <width>, <height> | 绝对像素坐标 (左上角+宽高)<br>[x_min, y_min, width, height] |
| 标注丰富度 | 中等 (主要用于目标检测) | 简单 (专为目标检测设计) | 极高 (检测、分割、关键点、描述等) |
| 易用性 | 较易读,但冗长 | 非常简单,易于手动创建和脚本处理 | 复杂,不适合手动编辑,需工具支持 |
| 典型应用 | 早期研究,许多工具的基础格式 | YOLO系列模型,追求速度和简洁 | 学术界标准,大型复杂数据集,多任务 |


1. PASCAL VOC (Visual Object Classes) 格式

这是早期目标检测研究中非常流行的格式,许多标注工具都支持导出为这种格式。

  • 特点:

    • 文件类型: XML 格式,具有良好的可读性。

    • 文件结构: 一对一。每张图片(如 image001.jpg)都有一个同名的XML文件(image001.xml)与之对应。

    • 坐标系统: 使用绝对像素值来定义边界框的左上角和右下角两个点。

      • <xmin>: 边界框左上角点的 x 坐标。

      • <ymin>: 边界框左上角点的 y 坐标。

      • <xmax>: 边界框右下角点的 x 坐标。

      • <ymax>: 边界框右下角点的 y 坐标。

  • 示例 (image001.xml):

    复制代码
          <annotation>
        <folder>images</folder>
        <filename>image001.jpg</filename>
        <path>/path/to/images/image001.jpg</path>
        <size>
            <width>800</width>
            <height>600</height>
            <depth>3</depth>
        </size>
        <object>
            <name>cat</name>
            <pose>Unspecified</pose>
            <truncated>0</truncated>
            <difficult>0</difficult>
            <bndbox>
                <xmin>150</xmin>
                <ymin>200</ymin>
                <xmax>450</xmax>
                <ymax>500</ymax>
            </bndbox>
        </object>
    </annotation>

2. YOLO (You Only Look Once) 格式

这是为YOLO系列模型量身定制的格式,追求极致的简洁和高效。

  • 特点:

    • 文件类型: TXT 纯文本格式。

    • 文件结构: 一对一。和VOC一样,每张图片(image001.jpg)都有一个同名的TXT文件(image001.txt)。

    • 坐标系统: 使用归一化的相对坐标,所有值都在 0 到 1 之间。这使得它对图像尺寸变化不敏感。

      • <class_id>: 物体类别的索引(整数),从0开始。通常需要一个单独的 classes.txt 或 data.yaml 文件来映射索引和类别名称。

      • <x_center>: 边界框中心的 x 坐标 / 图像总宽度。

      • <y_center>: 边界框中心的 y 坐标 / 图像总高度。

      • <width>: 边界框的宽度 / 图像总宽度。

      • <height>: 边界框的高度 / 图像总高度。

  • 示例 (image001.txt):

    假设 cat 在 classes.txt 中是第0类,图片尺寸为 800x600,猫的边界框是 (xmin:150, ymin:200, xmax:450, ymax:500)。

    • x_center = (150 + 450) / 2 / 800 = 0.375

    • y_center = (200 + 500) / 2 / 600 = 0.583

    • width = (450 - 150) / 800 = 0.375

    • height = (500 - 200) / 600 = 0.5

    image001.txt 文件的内容将是(每行代表一个物体):

    复制代码
          0 0.375000 0.583333 0.375000 0.500000

    IGNORE_WHEN_COPYING_START

    content_copydownload
    Use code with caution.

    IGNORE_WHEN_COPYING_END


3. COCO (Common Objects in Context) 格式

这是目前学术界和工业界最流行、功能最强大的标注格式,由微软团队推出。

  • 特点:

    • 文件类型: JSON 格式,结构化但非常庞大。

    • 文件结构: N对一。整个数据集(如训练集或验证集)只有一个JSON文件,里面包含了所有图片的信息、所有物体的标注信息、类别信息等。

    • 坐标系统: 使用绝对像素值,但格式与VOC不同。

      • x_min, y_min, width, height\]: 分别是边界框左上角点的x、y坐标,以及边界框的宽度和高度。

      • 实例分割 (Instance Segmentation): 用多边形点集精确勾勒物体轮廓。

      • 关键点检测 (Keypoint Detection): 标注人体关节点等。

      • 图像描述 (Image Captioning): 对图片进行文字描述。

  • 示例 (JSON文件片段):

    复制代码
          {
        "info": {...},
        "licenses": [...],
        "images": [
            {
                "id": 1,
                "width": 800,
                "height": 600,
                "file_name": "image001.jpg"
            }
        ],
        "annotations": [
            {
                "id": 1,
                "image_id": 1, // 关联到ID为1的图片
                "category_id": 17, // 关联到ID为17的类别
                "segmentation": [[150, 200, 450, 200, 450, 500, 150, 500]], // 分割多边形
                "area": 90000,
                "bbox": [150, 200, 300, 300], // [x, y, width, height]
                "iscrowd": 0
            }
        ],
        "categories": [
            {
                "id": 17,
                "name": "cat",
                "supercategory": "animal"
            }
        ]
    }

    IGNORE_WHEN_COPYING_START

    content_copydownload
    Use code with caution. Json

    IGNORE_WHEN_COPYING_END


我应该用哪种格式?

  • 如果你正在训练 YOLO 模型: 首选 YOLO 格式。如果你的数据是其他格式,最好先将其转换为YOLO格式。

  • 如果你想进行复杂的任务(如实例分割、关键点检测): 必须使用 COCO 格式。它是这类任务的事实标准。

  • 如果你需要一个易于人类阅读和调试的格式: VOC 格式 是一个不错的选择,但它的功能不如COCO。

  • 如果你刚开始学习目标检测:YOLO 格式 入手最简单,因为它只需要创建简单的文本文件。

许多标注工具(如 LabelImg, CVAT, LabelMe)都支持在这些格式之间进行导出和转换,非常方便。

相关推荐
小王爱学人工智能6 分钟前
OpenCV的图像金字塔
人工智能·opencv·计算机视觉
北京地铁1号线32 分钟前
Qwen-VL(阿里通义千问视觉语言模型)模型架构和损失函数介绍
人工智能·语言模型·自然语言处理
阿豪341 分钟前
2025 年职场转行突围:除实习外,这些硬核证书让你的简历脱颖而出(纯经验分享)
大数据·人工智能·经验分享·科技·信息可视化·产品经理
阿杜杜不是阿木木1 小时前
开始 ComfyUI 的 AI 绘图之旅-Stable Diffusion图生图之局部重绘(Inpaint)和扩图(Outpaint)(三)
人工智能·ai·ai作画·aigc·图生图
阿杜杜不是阿木木1 小时前
开始 ComfyUI 的 AI 绘图之旅-Stable Diffusion图生图(二)
人工智能·ai·ai作画·aigc·图生图
九章云极AladdinEdu1 小时前
存算一体芯片生态评估:从三星PIM到知存科技WTM2101
人工智能·pytorch·科技·架构·开源·gpu算力
张驰课堂1 小时前
老树发新芽:六西格玛培训为石油机械制造注入持久活力
大数据·人工智能·制造
和光同尘@1 小时前
66. 加一 (编程基础0到1)(Leetcode)
数据结构·人工智能·算法·leetcode·职场和发展
飞哥数智坊2 小时前
放弃 Cursor 后,我又试了 CodeBuddy,感觉国产又行了
人工智能·codebuddy