当前位置: 首页 > news >正文

VOC、COCO、YOLO、YOLO OBB格式的介绍

    • PASCAL VOC (XML格式)
    • COCO (JSON格式)
    • YOLO (TXT格式)
    • YOLO OBB格式
      • 5参数表示法
      • 8参数表示法
    • 异同

PASCAL VOC (XML格式)

在计算机视觉中,PASCAL VOC 数据集格式是进行目标检测任务时非常常见的一种标注格式。它使用 XML 文件来存储图像中目标的位置和类别信息
文件结构

VOC2012/
├── Annotations/       # 存放与 JPEGImages 文件夹中图像一一对应的 XML 标注文件。
├── JPEGImages/        # 存放所有原始图像文件
└── ImageSets/Main/    # 存放用于训练、验证和测试的图像列表文件train.txt、val.txt 和 test.txt

xml格式

<annotation><folder>VOC2007</folder><filename>000001.jpg</filename><source><database>The VOC2007 Database</database><annotation>PASCAL VOC2007</annotation><image>flickr</image><flickrid>341012865</flickrid></source><owner><flickrid>Junk Food</flickrid><name>E.J.</name></owner><size><width>353</width><height>500</height><depth>3</depth></size><segmented>0</segmented><object><name>dog</name><pose>Left</pose><truncated>1</truncated><difficult>0</difficult><bndbox><xmin>48</xmin><ymin>240</ymin><xmax>195</xmax><ymax>371</ymax></bndbox></object><object><name>person</name><pose>Left</pose><truncated>1</truncated><difficult>0</difficult><bndbox><xmin>8</xmin><ymin>12</ymin><xmax>352</xmax><ymax>498</ymax></bndbox></object>
</annotation>

标签说明:
`
annotation: 整个 XML 文件的根标签。
folder: 包含图像的文件夹名称。
filename: 图像文件的名称,例如 000001.jpg。这是最重要的信息之一,用于将标注文件与图像文件对应起来。
size: 描述图像的尺寸。
width: 图像的宽度(像素)。
height: 图像的高度(像素)。
depth: 图像的通道数,通常为 3(RGB)。
object: 每个目标都用一个 object 标签来描述。一个图像可以有多个 object 标签,代表多个目标。
name: 目标的类别名称,例如 dog、car、person 等。
pose: 目标的姿态信息,如 Unspecified。
truncated: 标记目标是否部分被截断或超出图像边界,1 表示是,0 表示否。
difficult: 标记目标是否难以识别(例如,目标很小或严重遮挡),1 表示是,0 表示否。在评估时,通常会忽略这些 difficult 的目标。
bndbox: 目标的边界框坐标。这是目标检测任务中最核心的信息。
xmin: 边界框左上角的 x 坐标。
ymin: 边界框左上角的 y 坐标。
xmax: 边界框右下角的 x 坐标。
ymax: 边界框右下角的 y 坐标

COCO (JSON格式)

与 VOC 格式不同,COCO 数据集的所有标注信息都集中在一个巨大的 JSON 文件中,例如 instances_train2017.json。这个 JSON 文件包含多个顶级键,每个键对应一类信息,这种集中式的存储方式非常适合大规模数据的管理和自动化处理。

coco/
├── train2017/       # 训练图片
├── val2017/         # 验证图片
└── annotations/     # 标注文件├── instances_train2017.json└── instances_val2017.json
{"info": {"description": "COCO 2017 Dataset"},"licenses": [],"images": [{"id": 1,"width": 640,"height": 480,"file_name": "000000000001.jpg"},],"annotations": [{"id": 1,"image_id": 1,"category_id": 1,"bbox": [198.8, 142.3, 37.8, 88.6],"area": 3350.28,"iscrowd": 0,"segmentation": [[200.0, 150.0, 230.0, 160.0, 235.0, 220.0, ...]]},],"categories": [{"id": 1,"name": "person","supercategory": "person"},{"id": 2,"name": "bicycle","supercategory": "vehicle"}]
}

images:
id: 图像的唯一 ID。这个 ID 用于在 annotations 中引用该图像。
file_name: 图像的文件名,例如 000000000001.jpg。
width 和 height: 图像的宽度和高度,以像素为单位。
annotations:
id: 标注的唯一 ID。
image_id: 关联的图像 ID。这是将标注与特定图像关联起来的关键。
category_id: 目标的类别 ID。这个 ID 对应 categories 列表中的 id。
bbox: 边界框。这是一个包含四个浮点数的列表,格式为 [x, y, width, height]。这里的坐标是非归一化的,即像素值。
x: 边界框左上角的 x 坐标(水平位置)。
y: 边界框左上角的 y 坐标(垂直位置)。
width: 边界框的 宽度。
height: 边界框的 高度。

area: 边界框的面积,单位为像素平方。
iscrowd: 标记该标注是否代表一个群组或密集区域。0 表示单个物体,1 表示一群物体。
segmentation: 实例分割的标注信息。对于目标检测任务,这个字段通常不使用或可以忽略。它通常是一个多边形点列表。
categories:
id: 类别的唯一 ID。
name: 类别的名称,例如 person、car。
supercategory: 超类别,用于组织相关联的类别,例如 bicycle 和 car 的超类别可以是 vehicle。

YOLO (TXT格式)

yolov5_dataset/
├── images/
│   ├── train/       # 训练图片
│   └── val/		 # 验证图片
├── labels/
│   ├── train/       # 标签(.txt)
│   └── val/
└── dataset.yaml     # 这是一个配置文件,用于指定数据集的路径、类别名称等信息
<class_id> <x_center> <y_center> <width> <height> 
0 0.534884 0.354167 0.170543 0.291667
1 0.768133 0.655833 0.457805 0.583333

class_id: 这是一个整数,代表目标的类别索引。通常从 0 开始。例如,0 可能代表“人”,1 代表“自行车”。这些索引与 data.yaml 文件中定义的类别名称列表相对应。
x_center, y_center: 这是边界框中心的归一化坐标。
width, height: 这是边界框的归一化宽度和高度。
归一化的意思是,坐标值已经被缩放到 0.0 到 1.0 的范围内。
x_center = 边界框中心x坐标 / 图像宽度
y_center = 边界框中心y坐标 / 图像高度

width = 边界框宽度 / 图像宽度
height = 边界框高度 / 图像高度

YOLO OBB格式

5参数表示法

它在原始的 YOLO 格式基础上增加了一个旋转角度参数

<class_id> <x_center> <y_center> <width> <height> <angle>

class_id: 类别 ID,从 0 开始。
x_center、y_center: 旋转边界框中心点的归一化坐标(0 到 1 之间)。
width、height: 旋转边界框的宽度和高度的归一化值。
angle: 旋转角度,通常也是归一化值,或以弧度、度为单位。

角度的表示方法:

角度的表示方式非常关键,因为它直接影响模型的训练和预测。常见的角度定义方式有:
弧度制: [-pi/2, pi/2] 或 [-pi, pi]。
角度制: [-90, 90] 或 [-180, 180]。
归一化角度: 将角度归一化到 [0, 1] 范围内。

角度的定义方向和范围需要明确。 例如,是逆时针旋转还是顺时针旋转?0 度代表什么方向?通常,width 是长边,height 是短边,angle 是 width 边与水平轴的夹角。

这种格式的缺点是,由于 width 和 height 的互换性,以及角度的周期性,可能会产生歧义。比如,一个 90 度旋转的边界框,其 width 和 height 互换后,角度就变成了 0 或 180 度,但表示的是同一个框。

8参数表示法

这种方法通过直接列出旋转边界框的四个角点坐标,来完全避免角度表示的歧义。

<class_id> <x1> <y1> <x2> <y2> <x3> <y3> <x4> <y4>

class_id: 类别 ID。
x1 y1 … x4 y4: 旋转边界框四个角点的归一化坐标。

角点的顺序需要预先约定,通常是顺时针或逆时针,从某个固定的点(如左上角)开始

优点:
无歧义: 直接用四个点唯一确定一个旋转框,没有角度周期性或宽高的互换问题。
表达更直接: 特别适合那些不规则形状的旋转目标。
缺点:
参数更多: 相比 5 参数,需要表示更多的信息。

异同

在这里插入图片描述

http://www.xdnf.cn/news/1458145.html

相关文章:

  • AgentThink:一种在自动驾驶视觉语言模型中用于工具增强链式思维推理的统一框架
  • 深入剖析Spring Boot / Spring 应用中可自定义的扩展点
  • elasticsearch学习(五)文档CRUD
  • 基于脚手架微服务的视频点播系统-界面布局部分(二):用户界面及系统管理界面布局
  • 02-ideal2025 Ultimate版安装教程
  • SPI flash挂载fatfs文件系统
  • 什么是静态住宅IP 跨境电商为什么要用静态住宅IP
  • More Effective C++ 条款28:智能指针
  • 稠密矩阵和稀疏矩阵的对比
  • 神马 M21 31T 矿机解析:性能、规格与市场应用
  • Python多序列同时迭代完全指南:从基础到高并发系统实战
  • vcruntime140_1.dll缺失?5个高效解决方法
  • 手机秒变全栈IDE:Claude Code UI的深度体验
  • SpringBoot实现国际化(多语言)配置
  • MySQL 8.0 主从复制原理分析与实战
  • 深入解析Java HashCode计算原理 少看大错特错的面试题
  • 多线程——线程状态
  • 并发编程——17 CPU缓存架构详解高性能内存队列Disruptor实战
  • ResNet(残差网络)-彻底改变深度神经网络的训练方式
  • linux——自定义协议
  • 多Agent协作案例:用AutoGen实现“写代码+测Bug”的自动开发流程
  • 秒店功能更新:多维度优化升级,助力商家经营
  • 当 LLM 遇上真实世界:MCP-Universe 如何撕开大模型 “工具能力” 的伪装?
  • 记录相机触发相关
  • 机器学习入门,第一个MCP示例
  • (D题|矿井突水水流漫延模型与逃生方案)2025年高教杯全国大学生数学建模国赛解题思路|完整代码论文集合
  • 生成式引擎优化(GEO):数字营销新标配,企业如何抢占AI搜索流量高地?
  • Trae + MCP : 一键生成专业封面的高阶玩法——自定义插件、微服务编排与性能调优
  • 设计模式六大原则2-里氏替换原则
  • Linux —— 环境变量