我们相信:世界是美好的,你是我也是。 来玩一下解压小游戏吧!

在使用yolo做物品识别的时候,总是绕不开coco数据集。coco数据集分为coco8,coco64,coco2017等,区别在于数据集所包含数据的多少。那么,本文对于coco数据集做个具体的介绍。以解释在yolo编程过程中,可能会遇到的疑惑。

苏南大叔:coco数据集是什么?如何下载coco数据集?格式解读 - coco数据集下载和使用
coco数据集是什么?如何下载coco数据集?格式解读(图9-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10python@3.12.9pycocotools@2.0.8coco数据集是由微软研究院发布的。coco2017是原版的,其它的coco系列,都是第三方随机筛选生成的,所以并不具有唯一性。或者说,你自己也可以发布一个coco100之类的集合,完全没有问题的。

COCO 数据集

COCO(Common Objects in Context)是一个广泛使用的计算机视觉数据集,主要用于图像识别、目标检测、实例分割、关键点检测等任务。COCO数据集以其丰富的标注、多样的场景和高质量的图像而闻名,是计算机视觉领域的重要基准数据集之一。

COCO是由微软研究院发布的一个大规模图像数据集,旨在推动计算机视觉领域的发展。它的全称是 "Common Objects in Context",强调了数据集中物体的上下文信息。COCO 数据集的目标是提供一个多样化的、真实世界的图像集合,帮助研究者开发和评估视觉算法。

官方网站:

苏南大叔:coco数据集是什么?如何下载coco数据集?格式解读 - coco-website
coco数据集是什么?如何下载coco数据集?格式解读(图9-2)

coco数据集不同版本

COCO 数据集根据不同的用途和规模被分为多个版本,例如 COCO8COCO64COCO128COCO256COCO2017 等。除了coco2017是官方提供的版本,其它的coco,都是使用第三方工具随机抽取对应数量的图片而形成的子集。所以,不同渠道下载到的coco8数据集,很大概率是不同的。

COCO2017

  • 用途: 官方完整版本,广泛用于目标检测、分割、关键点检测等任务。
  • 规模: 包含训练集(约 118,000 张图像)、验证集(约 5,000 张图像)和测试集(约 40,000 张图像)。

COCO数据集根据任务和用途分为多个子集:

  1. 训练集(train2017):用于训练模型。
  2. 验证集(val2017):用于模型验证。
  3. 测试集(test2017):用于模型测试(无标注)。
  4. 挑战数据集:用于 COCO 挑战赛,包含额外的测试数据。

此外,COCO 数据集还根据任务分为不同的标注文件,例如 instances, captions, person_keypoints 等。

COCO 数据集下载地址

COCO数据集可以从其官方网站下载,但是官方网站是崩溃的状态:

可以把下面的地址,放到迅雷里面下载。

苏南大叔:coco数据集是什么?如何下载coco数据集?格式解读 - coco2017-dataset
coco数据集是什么?如何下载coco数据集?格式解读(图9-3)

json 文件解读

下面的这个压缩包是重点文件,解压出来的instances_train2017.json,就是coco数据集的核心配置。

苏南大叔:coco数据集是什么?如何下载coco数据集?格式解读 - zip-json
coco数据集是什么?如何下载coco数据集?格式解读(图9-4)

这个文件由于太大,可以使用Huge-JSON-Viewer或者notepad--打开。下载地址:

苏南大叔:coco数据集是什么?如何下载coco数据集?格式解读 - json文件预览
coco数据集是什么?如何下载coco数据集?格式解读(图9-5)

主要就看三个字段:images[图像],annotations[标注]【重点】,categories[分类]。

images 图像

包含超过 20 万张高质量的日常场景图像。图像中包含多种物体,且物体之间有丰富的上下文关系。

{
  "images": [
    {
        "license": 3,
        "file_name": "000000391895.jpg",
        "coco_url": "http://images.cocodataset.org/train2017/000000391895.jpg",
        "height": 360,
        "width": 640,
        "date_captured": "2013-11-14 11:18:45",
        "flickr_url": "http://farm9.staticflickr.com/8186/8119368305_4e622c8349_z.jpg",
        "id": 391895
    }
  ],
  "annotations": [],
  "categories": []
}

苏南大叔:coco数据集是什么?如何下载coco数据集?格式解读 - json-images
coco数据集是什么?如何下载coco数据集?格式解读(图9-6)

从图中可以看到,它是包含两个外网地址的。也就是说,如何使用的话,可以临时下载也可以。

annotations 标注

  • 目标检测:每个物体都有边界框(Bounding Box)标注。
  • 实例分割:每个物体都有像素级的分割掩码。
  • 关键点检测:人体关键点(如关节、头部等)标注。
  • 图像描述:每张图像有 5 条自然语言描述。
{
  "images": [],
  "annotations": [
    {
        "segmentation": [
            [
                325.9,
                332.73,
                325.35,
                338.18,
                329.99,
                345.53,
                343.07,
                344.72,
                347.7,
                339.81,
                365.41,
                340.36,
                368.13,
                338.99,
                360.78,
                310.65,
                361.05,
                300.03,
                362.41,
                298.12,
                347.43,
                303.57,
                334.07,
                312.02,
                326.44,
                332.45
            ]
        ],
        "area": 1292.1561000000002,
        "iscrowd": 0,
        "image_id": 62200,
        "bbox": [
            325.35,
            298.12,
            42.78,
            47.41
        ],
        "category_id": 3,
        "id": 1356124
    }
  ],
  "categories": []
}

苏南大叔:coco数据集是什么?如何下载coco数据集?格式解读 - json-annotations
coco数据集是什么?如何下载coco数据集?格式解读(图9-7)

categories 类别

  • 包含 80 个物体类别(如人、动物、交通工具等)。
  • 91 个东西类别(Stuff Categories)用于语义分割。
{
  "images": [],
  "annotations": [],
  "categories": [
    {
        "supercategory": "person",
        "id": 1,
        "name": "person"
    },
    {
        "supercategory": "vehicle",
        "id": 2,
        "name": "bicycle"
    },
    {
        "supercategory": "vehicle",
        "id": 3,
        "name": "car"
    }
  ]
}

苏南大叔:coco数据集是什么?如何下载coco数据集?格式解读 - json-categories
coco数据集是什么?如何下载coco数据集?格式解读(图9-8)

从截图上可以看到,这里的分类是有"supercategory"的说法的。

使用 COCO 数据集

COCO 提供了官方的API,方便加载和处理数据。可以通过以下命令安装:

pip install pycocotools

使用 COCO API 加载数据并进行操作,例如读取标注、可视化数据等。

from pycocotools.coco import COCO
import matplotlib.pyplot as plt
import cv2
import random

# 加载标注文件
coco = COCO("annotations/instances_train2017.json")

# 获取某个类别的所有图像 ID
cat_ids = coco.getCatIds(catNms=["dog","cat"])
img_ids = coco.getImgIds(catIds=cat_ids)

# 随机选择一张图像
img_info = coco.loadImgs(random.choice(img_ids))[0]
img_path = f"train2017/{img_info['file_name']}"

# 加载图像
img = cv2.imread(img_path)

# 获取标注信息
ann_ids = coco.getAnnIds(imgIds=img_info['id'], catIds=cat_ids, iscrowd=None)
anns = coco.loadAnns(ann_ids)

# 绘制标注框
for ann in anns:
    x, y, w, h = ann['bbox']
    cv2.rectangle(img, (int(x), int(y)), (int(x + w), int(y + h)), (255, 0, 0), 2)

# 显示图像
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.axis("off")  # 禁用工具栏
plt.show()

苏南大叔:coco数据集是什么?如何下载coco数据集?格式解读 - 简单随机显示效果
coco数据集是什么?如何下载coco数据集?格式解读(图9-9)

在训练模型之前,可以对COCO数据集进行数据增强和预处理,例如图像缩放、裁剪、归一化等。将COCO数据集加载到深度学习框架(如PyTorchTensorFlow)中,训练目标检测、分割或关键点检测模型。

总结

所以,结论是这样的:

  • 分类很多,分类之间有包含关系。
  • 一张图片可能对应很多个标注。
  • 每个标注对应一个分类。但是由于父级分类的存在,实际上导致一个图片对应的(标注)分类更多。

COCO数据集是计算机视觉领域的重要基准数据集,涵盖了多种任务和丰富的标注信息。通过COCO数据集,可以做:目标检测、实例分割还是关键点检测,也可以开发和评估各种视觉算法。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   yolo    coco