目标检测常见数据集格式(YOLO、VOC、COCO)

目录

1.YOLO格式数据

1.1数据格式

1.2YOLO格式数据示例

1.3YOLO格式可视化 

2.COCO数据格式

2.1数据格式

2.2COCO格式数据示例

2.3COCO格式可视化 

3.VOC数据格式

3.1数据格式

3.2VOC格式数据示例

3.3COCO格式可视化 


🍓🍓1.YOLO格式数据

🍭1.1数据格式

        YOLO格式数据后缀为txt

🍋1.2YOLO格式数据示例

        YOLO格式数据一般包含图片路径、图片宽度和高度、物体类别和物体位置信息等。其中物体位置信息通常由目标框的左上角坐标(x,y)、目标框的宽度和高度 (w,h) 构成,统称为bounding box (BBox)。

        以下是一个YOLO格式数据的示例:

1 0.5685714285714286 0.39084507042253525 0.02 0.03051643192488263
0 0.8114285714285714 0.5363849765258216 0.022857142857142857 0.04460093896713615
1 0.845 0.6666666666666666 0.024285714285714285 0.046948356807511735
2 0.6335714285714286 0.18427230046948356 0.01 0.01643192488262911

        每一行表示一个目标框,每个目标框由一组5个数字(归一化)组成,每个数字代表的含义如下。

  • label_index :为标签名称在标签数组中的索引,下标从 0 开始。
  • cx:标记框中心点的 x 坐标,数值是原始中心点 x 坐标除以 图宽 后的结果。
  • cy:标记框中心点的 y 坐标,数值是原始中心点 y 坐标除以 图高 后的结果。
  • w:标记框的 宽,数值为 原始标记框的 宽 除以 图宽 后的结果。
  • h:标记框的 高,数值为 原始标记框的 高 除以 图高 后的结果。

🍇1.3YOLO格式可视化 

         YOLO格式的label可视化python代码:

import cv2

# 画在原图001.jpg上
img = cv2.imread('001.jpg')
h, w, _ = img.shape


# yolo标注数据文件名为001.txt
with open('001.txt', 'r') as f:
	temp = f.read()
	temp = temp.split()

# 根据公式进行转换
x_, y_, w_, h_ = eval(temp[1]), eval(temp[2]), eval(temp[3]), eval(temp[4])

x1 = w * x_ - 0.5 * w * w_
x2 = w * x_ + 0.5 * w * w_
y1 = h * y_ - 0.5 * h * h_
y2 = h * y_ + 0.5* h * h_

# 画图验证,注意画图坐标要转换成int格式
cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (255, 0, 0))
cv2.imshow('yolo_display', img)
cv2.waitKey(0)

🍓🍓2.COCO数据格式

🍭2.1数据格式

        coco格式数据后缀为json

        COCO 数据集的格式是基于 JSON(JavaScript Object Notation)的,使用一个主 JSON 文件来描述整个数据集,以及其他辅助的 JSON 文件来存储图像和标注等信息。在 COCO 数据集格式中,主要的 JSON 文件通常被称为 "instance" 文件,它包含了以下重要字段:

  •  "info" 字段:用于描述数据集的基本信息,例如名称、版本、年份等。
  • "license" 字段:包含了数据集使用的许可证信息,可以指定数据集的使用和共享方式。
  • "images" 字段:存储了每张图像的相关信息,包括图像的唯一标识符、文件名、高度、宽度等。
  • "annotations" 字段:记录了每个图像的标注信息,每个标注包含了一些必要的信息,如标注的唯一标识符、所属图像的标识符、类别、边界框信息等。
  • "categories" 字段:定义了数据集中所有类别的信息,包括类别的唯一标识符、名称等。 

🍋2.2COCO格式数据示例

        以下是一个COCO数据格式的JSON文件的例子:

{
  "info": {
    "year": 2021,
    "version": "1.0",
    "description": "COCO Dataset Example",
    "contributor": "John Doe",
    "url": "http://example.com",
    "date_created": "2021-06-01"
  },
  "licenses": [
    {
      "id": 1,
      "name": "License 1",
      "url": "http://example.com/license1"
    },
    {
      "id": 2,
      "name": "License 2",
      "url": "http://example.com/license2"
    }
  ],
  "images": [
    {
      "id": 1,
      "width": 500,
      "height": 400,
      "file_name": "image1.jpg",
      "license": 1,
      "date_captured": "2021-01-01"
    },
    {
      "id": 2,
      "width": 800,
      "height": 600,
      "file_name": "image2.jpg",
      "license": 2,
      "date_captured": "2021-02-01"
    }
  ],
  "annotations": [
    {
      "id": 1,
      "image_id": 1,
      "category_id": 1,
      "bbox": [100, 100, 200, 200],
      "area": 40000,
      "iscrowd": 0
    },
    {
      "id": 2,
      "image_id": 1,
      "category_id": 2,
      "bbox": [300, 200, 150, 250],
      "area": 37500,
      "iscrowd": 1
    },
    {
      "id": 3,
      "image_id": 2,
      "category_id": 1,
      "bbox": [50, 50, 300, 400],
      "area": 120000,
      "iscrowd": 0
    }
  ],
  "categories": [
    {
      "id": 1,
      "name": "cat",
      "supercategory": "animal"
    },
    {
      "id": 2,
      "name": "dog",
      "supercategory": "animal"
    }
  ]
}
 

        JSON文件包含了一个COCO数据集的基本信息。它包括了数据集的信息(年份、版本、描述等)、许可证信息、图像信息(宽度、高度、文件名等)、标注信息(标注ID、图像ID、类别ID、边界框、面积等)以及类别信息(类别ID、类别名称、超类别等)。

🍇2.3COCO格式可视化 

         coco格式的label可视化python代码:

import json
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from PIL import Image
 
def load_data(json_file, image_file):
    with open(json_file, 'r') as f:
        data = json.load(f)
    image = Image.open(image_file)
    return data, image

def draw_bbox(image, bbox, label):
    ax = plt.gca()
    rect = Rectangle((bbox[0], bbox[1]), bbox[2], bbox[3], linewidth=1, edgecolor='red', facecolor='none')
    ax.add_patch(rect)
    plt.text(bbox[0], bbox[1], label, fontsize=10, color='red', weight='bold')

def visualize(json_file, image_file):
    data, image = load_data(json_file, image_file)
    plt.imshow(image)

    for ann in data['annotations']:
        label = data['categories'][ann['category_id']]['name']
        bbox = ann['bbox']
        draw_bbox(image, bbox, label)

    plt.axis('off')
    plt.show()

json_file = 'path_to_json_file.json'
image_file = 'path_to_image_file.jpg'
visualize(json_file, image_file)

        记得将path_to_json_file.jsonpath_to_image_file.jpg替换为实际的文件路径。

🍓🍓3.VOC数据格式

🍭3.1数据格式

        VOC格式数据后缀为xml

🍋3.2VOC格式数据示例

        VOC数据格式是一种用于图像标注的标准格式,它用于存储图像及其相关的标注信息。在VOC格式中,每张图片的标注标签信息会被保存到一个XML文件中。XML文件的结构包括以下几个部分:

  • annotation:这是整个XML文件的主要部分,包含了图片的名字及基本信息。
  • folder:图片所在的文件夹名称。
  • filename:图片的文件名。
  • path:图片的完整路径。
  • source:图片的来源信息,例如图片来自哪个数据库。
  • size:图片的尺寸信息,包括宽度、高度和深度。
  • segmented:图片是否被分割,0表示未分割,1表示被分割。
  • object:每个目标的标定框坐标,包括左上角的坐标和右下角的坐标。 

        以下是一个VOC数据格式的JSON文件的例子:

<annotation>
  <folder>17</folder> # 图片所处文件夹
  <filename>77258.bmp</filename> # 图片名
  <path>~/frcnn-image/61/ADAS/image/frcnn-image/17/77258.bmp</path>
  <source>  #图片来源相关信息
    <database>Unknown</database>  
  </source>
  <size> #图片尺寸
    <width>640</width>
    <height>480</height>
    <depth>3</depth>
  </size>
  <segmented>0</segmented>  #是否有分割label
  <object> 包含的物体
    <name>car</name>  #物体类别
    <pose>Unspecified</pose>  #物体的姿态
    <truncated>0</truncated>  #物体是否被部分遮挡(>15%)
    <difficult>0</difficult>  #是否为难以辨识的物体, 主要指要结体背景才能判断出类别的物体。虽有标注, 但一般忽略这类物体
    <bndbox>  #物体的bound box
      <xmin>2</xmin>     #左
      <ymin>156</ymin>   #上
      <xmax>111</xmax>   #右
      <ymax>259</ymax>   #下
    </bndbox>
  </object>
</annotation>

🍇3.3COCO格式可视化 

         coco格式的label可视化python代码:

import cv2
import xml.etree.ElementTree as ET

def visualize_labels(image_path, xml_path):
    # 读取图像
    image = cv2.imread(image_path)
    
    # 读取XML文件
    tree = ET.parse(xml_path)
    root = tree.getroot()
    
    # 遍历XML文件中的对象
    for obj in root.findall('object'):
        bbox = obj.find('bndbox')
        
        # 提取边界框的坐标
        xmin = int(bbox.find('xmin').text)
        ymin = int(bbox.find('ymin').text)
        xmax = int(bbox.find('xmax').text)
        ymax = int(bbox.find('ymax').text)
        
        # 在图像上绘制边界框
        cv2.rectangle(image, (xmin, ymin), (xmax, ymax), (0, 255, 0), 2)
        
        # 提取对象的标签
        label = obj.find('name').text
        
        # 在图像上标注对象的标签
        cv2.putText(image, label, (xmin, ymin - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
    
    # 显示图像
    cv2.imshow("Image", image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

# 示例用法
image_path = 'path_to_image.jpg'
xml_path = 'path_to_xml.xml'
visualize_labels(image_path, xml_path)
 

说明:

  1. 首先,需要将path_to_image.jpg替换为实际的图像文件路径。
  2. 然后,将path_to_xml.xml替换为相应图像的VOC格式的XML标签文件路径。
  3. 使用cv2.rectangle函数绘制边界框,使用cv2.putText函数标注对象的标签。
  4. 最后,使用cv2.imshow函数显示可视化结果,按任意键关闭图像窗口。

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--

🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸⛵⛵⭐⭐🍎🍎👍👍🌷🌷

相关推荐

  1. 目标检测常见数据格式(YOLO、VOC、COCO)

    2024-03-16 10:20:01       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-16 10:20:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-16 10:20:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-16 10:20:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-16 10:20:01       20 阅读

热门阅读

  1. html5&css&js代码 021 实体字符参考

    2024-03-16 10:20:01       18 阅读
  2. C语言经典面试提米(十四)

    2024-03-16 10:20:01       21 阅读
  3. 开发指南012-后台编程步骤

    2024-03-16 10:20:01       21 阅读
  4. 蓝桥杯刷题|04入门真题

    2024-03-16 10:20:01       20 阅读
  5. oracle分区表和分区表exchange

    2024-03-16 10:20:01       21 阅读
  6. vue文件结构

    2024-03-16 10:20:01       20 阅读
  7. Spring 初学者遇到的问题

    2024-03-16 10:20:01       20 阅读
  8. 什么是多模态学习?

    2024-03-16 10:20:01       24 阅读
  9. C#使用Entity Framework Core处理数据库(二)

    2024-03-16 10:20:01       19 阅读
  10. 要导出 PostgreSQL 数据库中的数据使用 pg_dump 命令

    2024-03-16 10:20:01       20 阅读
  11. android 快速实现 Switch 样式

    2024-03-16 10:20:01       22 阅读