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

news/2024/7/10 23:44:44 标签: 目标检测, YOLO, 深度学习, coco, pascal voc, voc, python

目录

YOLO%E6%A0%BC%E5%BC%8F%E6%95%B0%E6%8D%AE-toc" style="margin-left:0px;">1.YOLO格式数据

1.1数据格式

YOLO%E6%A0%BC%E5%BC%8F%E6%95%B0%E6%8D%AE%E7%A4%BA%E4%BE%8B-toc" style="margin-left:40px;">1.2YOLO格式数据示例

YOLO%E6%A0%BC%E5%BC%8F%E5%8F%AF%E8%A7%86%E5%8C%96%C2%A0-toc" style="margin-left:40px;">1.3YOLO格式可视化 

2.COCO数据格式

2.1数据格式

2.2COCO格式数据示例

2.3COCO格式可视化 

3.VOC数据格式

3.1数据格式

3.2VOC格式数据示例

3.3COCO格式可视化 


YOLO%E6%A0%BC%E5%BC%8F%E6%95%B0%E6%8D%AE" style="background-color:transparent;">🍓🍓1.YOLO格式数据

🍭1.1数据格式

        YOLO格式数据后缀为txt

YOLO%E6%A0%BC%E5%BC%8F%E6%95%B0%E6%8D%AE%E7%A4%BA%E4%BE%8B" style="background-color:transparent;">🍋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:标记框的 高,数值为 原始标记框的 高 除以 图高 后的结果。

YOLO%E6%A0%BC%E5%BC%8F%E5%8F%AF%E8%A7%86%E5%8C%96%C2%A0" style="background-color:transparent;">🍇1.3YOLO格式可视化 

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

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代码:

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文件的例子:

python"><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代码:

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函数显示可视化结果,按任意键关闭图像窗口。

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

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

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


http://www.niftyadmin.cn/n/5431141.html

相关文章

低代码与数智制造:引领软件开发的革新之旅

在当今快速发展的数字化时代&#xff0c;软件开发已经渗透到各行各业&#xff0c;成为推动社会进步的重要力量。随着技术的不断进步&#xff0c;低代码开发与数智制造正逐渐崭露头角&#xff0c;成为引领软件开发领域革新的两大关键要素。本文将深入探讨低代码与数智制造的内涵…

Go程序设计语言 学习笔记 第一章 入门

本章是对于Go语言基本组件的一些说明。本书所有例子都是针对现实世界的任务的。本章将带您尝试体验用Go语言来编写各种程序&#xff1a;从简单的文件、图片处理到并发的客户端和服务器的互联网应用开发。虽然在一章里不能把所有东西讲清楚&#xff0c;但是以这类应用作为学习一…

登录态数据抓取:Python爬虫携带Cookie与Session的应用技巧

概述 在进行网络数据抓取时&#xff0c;有些数据需要用户处于登录状态才能获取。这时就需要使用Cookie和Session来维持登录态。Cookie是服务器发给浏览器的小数据片段&#xff0c;存储在用户计算机中&#xff0c;用于在用户请求时辨识用户身份。Session则是存储在服务器端的用…

bash: sqlplus: command not found 问题解决方法

一、问题描述 在Linux中Oracle安装成功后&#xff0c;首次启动使用时&#xff0c;出现 sqlplus 命令不识别的问题&#xff0c;现象如下&#xff1a; $ sqlplus / as sysdba bash: sqlplus: command not found...二、问题分析 查看环境变量是否正确配置&#xff1a; $ vim .ba…

运行gazebo机器人模型没有cmd_vel话题

运行赵虚左教程代码出现上诉问题 roslaunch urdf02_gazebo demo03_env.launch 原因&#xff1a;缺少某个包 在工作空间catkin_make编译发现报错 解决&#xff1a; sudo apt-get install ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control 下载后再次运行launch文件…

专业无网设备如何远程运维?向日葵远程控制能源场景案例解析

清洁能源领域&#xff0c;拥有庞大的上下游产业链&#xff0c;涉及的相关工业设备门类多、技术覆盖全、行业应用广。在这一领域内&#xff0c;相关专业设备的供应商的核心竞争力除了本身产品的技术能力之外&#xff0c;服务也是重要的一环。 某企业作为致力于节能环保方向的气…

uni-app设置页面整体背景颜色为渐变色踩坑

page {background: linear-gradient(to bottom, #6295f1, #f7f8fa);}解决方法 page {background: linear-gradient(to bottom, #6295f1, #f7f8fa);height: 100%;}

Yii实现RabbitMQ队列

一&#xff1a;拓展安装 composer require yiisoft/yii2-queue composer require enqueue/amqp-lib 2&#xff1a;RabbitMQ队列配置 在配置文件中配置RabbitMQ队列 components > [...queue > [class > yii\queue\amqp_interop\Queue::class,host > 192.168.6.8…