coco数据集是什么?如何下载coco数据集?格式解读
发布于 作者:苏南大叔 来源:程序如此灵动~

在使用yolo
做物品识别的时候,总是绕不开coco
数据集。coco
数据集分为coco8
,coco64
,coco2017
等,区别在于数据集所包含数据的多少。那么,本文对于coco
数据集做个具体的介绍。以解释在yolo
编程过程中,可能会遇到的疑惑。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10
,python@3.12.9
,pycocotools@2.0.8
。coco
数据集是由微软研究院发布的。coco2017
是原版的,其它的coco
系列,都是第三方随机筛选生成的,所以并不具有唯一性。或者说,你自己也可以发布一个coco100
之类的集合,完全没有问题的。
COCO 数据集
COCO(Common Objects in Context)
是一个广泛使用的计算机视觉数据集,主要用于图像识别、目标检测、实例分割、关键点检测等任务。COCO
数据集以其丰富的标注、多样的场景和高质量的图像而闻名,是计算机视觉领域的重要基准数据集之一。
COCO
是由微软研究院发布的一个大规模图像数据集,旨在推动计算机视觉领域的发展。它的全称是 "Common Objects in Context",强调了数据集中物体的上下文信息。COCO 数据集的目标是提供一个多样化的、真实世界的图像集合,帮助研究者开发和评估视觉算法。
官方网站:
- https://cocodataset.org/ (基本上是个瘫痪状态,国内访问不访问没有啥区别)
coco数据集不同版本
COCO
数据集根据不同的用途和规模被分为多个版本,例如 COCO8
、COCO64
、COCO128
、COCO256
和 COCO2017
等。除了coco2017
是官方提供的版本,其它的coco
,都是使用第三方工具随机抽取对应数量的图片而形成的子集。所以,不同渠道下载到的coco8
数据集,很大概率是不同的。
COCO2017
- 用途: 官方完整版本,广泛用于目标检测、分割、关键点检测等任务。
- 规模: 包含训练集(约 118,000 张图像)、验证集(约 5,000 张图像)和测试集(约 40,000 张图像)。
COCO
数据集根据任务和用途分为多个子集:
- 训练集(train2017):用于训练模型。
- 验证集(val2017):用于模型验证。
- 测试集(test2017):用于模型测试(无标注)。
- 挑战数据集:用于 COCO 挑战赛,包含额外的测试数据。
此外,COCO 数据集还根据任务分为不同的标注文件,例如 instances
, captions
, person_keypoints
等。
COCO 数据集下载地址
COCO
数据集可以从其官方网站下载,但是官方网站是崩溃的状态:
- 官网地址:COCO 数据集官网
- 下载页面:COCO 数据集下载
可以把下面的地址,放到迅雷里面下载。
- 训练集图片 (118K images)【约18G】 http://images.cocodataset.org/zips/train2017.zip
- 验证集图片 (5K images)【约1G】 http://images.cocodataset.org/zips/val2017.zip
- 测试集图片 (41K images) http://images.cocodataset.org/zips/test2017.zip
- 训练/验证标注文件 http://images.cocodataset.org/annotations/annotations_trainval2017.zip
- 测试集标注文件 http://images.cocodataset.org/annotations/image_info_test2017.zip
json 文件解读
下面的这个压缩包是重点文件,解压出来的instances_train2017.json
,就是coco
数据集的核心配置。
这个文件由于太大,可以使用Huge-JSON-Viewer
或者notepad--
打开。下载地址:
- https://wellisolutions.de/downloads/Huge-JSON-Viewer-0.4.12.19-Setup.exe_.zip
- https://gitee.com/cxasm/notepad--/releases/download/v3.2.1/Notepad--v3.2.1-win10-portable.zip
主要就看三个字段: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": []
}
从图中可以看到,它是包含两个外网地址的。也就是说,如何使用的话,可以临时下载也可以。
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": []
}
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"
}
]
}
从截图上可以看到,这里的分类是有"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
数据集加载到深度学习框架(如PyTorch
、TensorFlow
)中,训练目标检测、分割或关键点检测模型。
总结
所以,结论是这样的:
- 分类很多,分类之间有包含关系。
- 一张图片可能对应很多个标注。
- 每个标注对应一个分类。但是由于父级分类的存在,实际上导致一个图片对应的(标注)分类更多。
COCO
数据集是计算机视觉领域的重要基准数据集,涵盖了多种任务和丰富的标注信息。通过COCO
数据集,可以做:目标检测、实例分割还是关键点检测,也可以开发和评估各种视觉算法。


